<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on Frank Mitchell&#39;s Blog</title>
    <link>https://frank-mitchell.com/</link>
    <description>Recent content in Home on Frank Mitchell&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 25 Mar 2026 08:58:46 -0500</lastBuildDate>
    <atom:link href="https://frank-mitchell.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The &#39;Playing God&#39; RPG</title>
      <link>https://frank-mitchell.com/posts/playing-god/</link>
      <pubDate>Wed, 25 Mar 2026 08:58:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/playing-god/</guid>
      <description>A play-through of Playing God, an RPG about being a deity.</description>
    </item>
    <item>
      <title>A Non-review of Tunnels &amp; Trolls: A New Age</title>
      <link>https://frank-mitchell.com/posts/tntana-nonreview/</link>
      <pubDate>Tue, 03 Mar 2026 12:56:57 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/tntana-nonreview/</guid>
      <description>Curmudgeonly grousing about the Quickstart for the new edition of &lt;em&gt;Tunnels &amp;amp; Trolls&lt;/em&gt;</description>
    </item>
    <item>
      <title>A Non-review of &#39;The Perilous Void&#39;</title>
      <link>https://frank-mitchell.com/posts/perilous-void-nonreview/</link>
      <pubDate>Tue, 03 Mar 2026 12:19:00 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/perilous-void-nonreview/</guid>
      <description>A non-review of a system-independent supplement for any science fiction tabletop role-playing game.</description>
    </item>
    <item>
      <title>A Note On The Front Page (2026-02-09)</title>
      <link>https://frank-mitchell.com/posts/blog-2026-02-09/</link>
      <pubDate>Mon, 09 Feb 2026 11:01:43 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/blog-2026-02-09/</guid>
      <description>Explanation for dozens of modified files.</description>
    </item>
    <item>
      <title>NOMAD Space Stations</title>
      <link>https://frank-mitchell.com/posts/nomad-space-stations/</link>
      <pubDate>Sun, 08 Feb 2026 10:15:39 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/nomad-space-stations/</guid>
      <description>Space stations in &amp;ldquo;Faster Than Light - Nomad&amp;rdquo;.</description>
    </item>
    <item>
      <title>NOMAD Supercarriers</title>
      <link>https://frank-mitchell.com/posts/nomad-supercarriers/</link>
      <pubDate>Wed, 04 Feb 2026 10:36:47 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/nomad-supercarriers/</guid>
      <description>Super Carrier space ships in &amp;ldquo;Faster Than Light - Nomad&amp;rdquo;</description>
    </item>
    <item>
      <title>Elf Warden Class for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/class/elf-warden/</link>
      <pubDate>Wed, 04 Feb 2026 07:31:51 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/class/elf-warden/</guid>
      <description>Elf Warden &amp;ldquo;race-class&amp;rdquo; for Shadowdark</description>
    </item>
    <item>
      <title>OpenQuest: Alternative Religions</title>
      <link>https://frank-mitchell.com/posts/openquest-alt-religions/</link>
      <pubDate>Sat, 31 Jan 2026 11:51:31 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-alt-religions/</guid>
      <description>Rules and suggestions for non-standard religions in OpenQuest</description>
    </item>
    <item>
      <title>OpenQuest Quick NPCs</title>
      <link>https://frank-mitchell.com/posts/openquest-quick-npc/</link>
      <pubDate>Sat, 10 Jan 2026 08:27:04 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-quick-npc/</guid>
      <description>Shorter notation for NPCs in OpenQuest</description>
    </item>
    <item>
      <title>On *Lords of Gossamer &amp; Shadow*</title>
      <link>https://frank-mitchell.com/posts/on-lords-of-gossamer-and-shadow/</link>
      <pubDate>Tue, 16 Dec 2025 07:51:52 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/on-lords-of-gossamer-and-shadow/</guid>
      <description>In praise of the RPG &amp;lsquo;Lords of Gossamer and Shadow&amp;rsquo;, based on the Amber Diceless Role-playing system.</description>
    </item>
    <item>
      <title>NOMAD Aliens: Ylem Wraith</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/ylem-wraith/</link>
      <pubDate>Sat, 08 Nov 2025 10:25:28 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/ylem-wraith/</guid>
      <description>Description and NOMAD stats for the bizarre extradimensional Ylem Wraiths.</description>
    </item>
    <item>
      <title>NOMAD Aliens: Tlaqotl</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/tlaqotl/</link>
      <pubDate>Sat, 08 Nov 2025 09:41:32 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/tlaqotl/</guid>
      <description>Description and NOMAD stat blocks for the mysterious insectoid Tlaqotl.</description>
    </item>
    <item>
      <title>NOMAD Aliens: Tlakeli</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/tlakeli/</link>
      <pubDate>Sat, 08 Nov 2025 08:58:01 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/tlakeli/</guid>
      <description>Description and NOMAD stat blocks for the insectoid hive mind Tlakeli.</description>
    </item>
    <item>
      <title>NOMAD Aliens: Verduran Mission</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/verduran-mission/</link>
      <pubDate>Sat, 08 Nov 2025 07:42:10 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/verduran-mission/</guid>
      <description>Description and NOMAD stat blocks for a Verduran Mission sent to other planets as ambassadors.</description>
    </item>
    <item>
      <title>NOMAD Aliens: Onyx Titan</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/onyx-titan/</link>
      <pubDate>Sat, 08 Nov 2025 07:09:31 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/onyx-titan/</guid>
      <description>Description and NOMAD stat blocks for the towering, inorganic Onyx Titans</description>
    </item>
    <item>
      <title>NOMAD Aliens: Sarn</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/sarn/</link>
      <pubDate>Sat, 08 Nov 2025 07:07:25 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/sarn/</guid>
      <description>Description and NOMAD stat blocks for the bat-winged, star-traveling Sarn</description>
    </item>
    <item>
      <title>NOMAD Aliens: Xarol</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/xarol/</link>
      <pubDate>Sat, 08 Nov 2025 07:04:39 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/xarol/</guid>
      <description>Description and NOMAD stat block for the singular synthoid Xarol</description>
    </item>
    <item>
      <title>NOMAD Aliens: Verduran</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/verduran/</link>
      <pubDate>Sat, 08 Nov 2025 07:02:04 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/verduran/</guid>
      <description>Description and NOMAD stat blocks for the diverse, plant-like Verdurans</description>
    </item>
    <item>
      <title>NOMAD Aliens: Tlachatl</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/tlachatl/</link>
      <pubDate>Fri, 07 Nov 2025 22:53:22 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/tlachatl/</guid>
      <description>Description and NOMAD stat blocks for the parasitic insectoid Tlachatl.</description>
    </item>
    <item>
      <title>NOMAD Aliens: Tlapaku</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/tlapaku/</link>
      <pubDate>Fri, 07 Nov 2025 22:53:14 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/tlapaku/</guid>
      <description>Description and NOMAD stat blocks for the technically inclined insectoid Tlapaku.</description>
    </item>
    <item>
      <title>NOMAD Aliens: Tlatoku</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/tlatoku/</link>
      <pubDate>Fri, 07 Nov 2025 17:38:08 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/tlatoku/</guid>
      <description>Description and NOMAD stat blocks for the violent insectoid Tlatoku</description>
    </item>
    <item>
      <title>NOMAD Aliens: Tlaka</title>
      <link>https://frank-mitchell.com/rpg/nomad-aliens/tlaka/</link>
      <pubDate>Fri, 07 Nov 2025 17:37:35 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-aliens/tlaka/</guid>
      <description>Description and NOMAD stat blocks for the caste-based insectoid Tlaka.</description>
    </item>
    <item>
      <title>Re: Modified Articles (2025-10-25)</title>
      <link>https://frank-mitchell.com/posts/status-20251025/</link>
      <pubDate>Sat, 25 Oct 2025 19:27:14 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/status-20251025/</guid>
      <description>On the articles recently &amp;ldquo;modified&amp;rdquo;.</description>
    </item>
    <item>
      <title>Solo Journal 1: The Isle of Dread</title>
      <link>https://frank-mitchell.com/posts/solo-journal-1/</link>
      <pubDate>Fri, 24 Oct 2025 01:59:53 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/solo-journal-1/</guid>
      <description>First part of a &lt;em&gt;Quantum Dungeons&lt;/em&gt; exploration of the Isle of Dread</description>
    </item>
    <item>
      <title>The Gygax 75 Challenge Part 3: Dungeon</title>
      <link>https://frank-mitchell.com/posts/g75-3-dungeon/</link>
      <pubDate>Thu, 09 Oct 2025 02:26:20 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/g75-3-dungeon/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;../g75-2-region/&#34;&gt;last installment&lt;/a&gt; I sketched out a region which&#xA;I&amp;rsquo;ve decided to call Bergarus Vale after the Bergarus Mountains that&#xA;loom in the northeast.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;em&gt;this&lt;/em&gt; installment I will detail a dungeon in that region, the entrance&#xA;of which is called called &amp;ldquo;The Radovol Door&amp;rdquo; or &amp;ldquo;The Door In The Pit&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;(Yes, it took me two years to finally finish this thing.  I&amp;rsquo;ve had a lot&#xA;of distractions.  If I were starting this project today I&amp;rsquo;d probably use&#xA;&lt;em&gt;Shadowdark&lt;/em&gt; instead of DCC, but for now I&amp;rsquo;ll continue with DCC.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Island of Unmade Games</title>
      <link>https://frank-mitchell.com/posts/the-island-of-unmade-games/</link>
      <pubDate>Mon, 06 Oct 2025 01:39:53 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/the-island-of-unmade-games/</guid>
      <description>A list of planned RPG settings/systems, most of which I&amp;rsquo;ve blogged about, and which remain unfinished.</description>
    </item>
    <item>
      <title>OpenQuest: Tutors and Trainers</title>
      <link>https://frank-mitchell.com/posts/openquest-tutors/</link>
      <pubDate>Sun, 07 Sep 2025 10:53:21 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-tutors/</guid>
      <description>OpenQuest rules for learning skills from tutors</description>
    </item>
    <item>
      <title>Mages per Capita</title>
      <link>https://frank-mitchell.com/posts/mages-per-capita/</link>
      <pubDate>Mon, 18 Aug 2025 18:01:13 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/mages-per-capita/</guid>
      <description>An exploration of how many mages exist in a setting affects world building.</description>
    </item>
    <item>
      <title>Gridless Rules</title>
      <link>https://frank-mitchell.com/rpg/gridless-rules/</link>
      <pubDate>Sat, 09 Aug 2025 09:24:03 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/gridless-rules/</guid>
      <description>&lt;p&gt;This article contains my default rules for running tabletop role-playing game&#xA;combats without a combat map.  This should work in all TTRPG systems with&#xA;only a few minor adaptations.&lt;/p&gt;&#xA;&lt;p&gt;(For a full discussion of alternatives, see&#xA;&lt;a href=&#34;../gridless-movement/&#34;&gt;Gridless Movement&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;time&#34;&gt;Time&lt;/h2&gt;&#xA;&lt;p&gt;In the following discussion, a combat scene is divided into &lt;dfn&gt;rounds&lt;/dfn&gt;&#xA;during which all characters involved in combat take one or more&#xA;&lt;dfn&gt;actions&lt;/dfn&gt;.  Characters customarily take all their actions on their&#xA;&lt;dfn&gt;turn&lt;/dfn&gt;. Depending on the system they may also take a&#xA;&lt;dfn&gt;reaction&lt;/dfn&gt; during someone else&amp;rsquo;s turn; this may or may not count&#xA;againt the character&amp;rsquo;s total actions per turn.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Toward a Psionic System</title>
      <link>https://frank-mitchell.com/posts/toward-a-psionic-system/</link>
      <pubDate>Sat, 02 Aug 2025 22:10:39 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/toward-a-psionic-system/</guid>
      <description>Initial notes and thoughts about possibly multi-system psionics rules.</description>
    </item>
    <item>
      <title>Injury System for 2d6</title>
      <link>https://frank-mitchell.com/posts/injury-system-for-2d6/</link>
      <pubDate>Mon, 28 Jul 2025 04:04:51 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/injury-system-for-2d6/</guid>
      <description>An alternate damage system for 2d6-based games.</description>
    </item>
    <item>
      <title>Solo Journal 0: Introduction</title>
      <link>https://frank-mitchell.com/posts/solo-journal-0/</link>
      <pubDate>Sun, 27 Jul 2025 17:35:26 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/solo-journal-0/</guid>
      <description>An introduction to the Solo Journal series.</description>
    </item>
    <item>
      <title>OpenQuest Character Generation</title>
      <link>https://frank-mitchell.com/posts/openquest-chargen/</link>
      <pubDate>Sat, 26 Jul 2025 06:47:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-chargen/</guid>
      <description>A walkthrough of character generation in &lt;em&gt;OpenQuest&lt;/em&gt; v3.</description>
    </item>
    <item>
      <title>Shadowdark Character Generation</title>
      <link>https://frank-mitchell.com/posts/shadowdark-chargen/</link>
      <pubDate>Sat, 26 Jul 2025 06:27:32 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/shadowdark-chargen/</guid>
      <description>My first Shadowdark character, generated by hand.</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 5</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-5/</link>
      <pubDate>Thu, 24 Jul 2025 07:22:39 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-5/</guid>
      <description>&lt;p&gt;In past posts I gave an &lt;a href=&#34;../quantum-dungeons-preview-0&#34;&gt;overview of the draft &lt;em&gt;Quantum Dungeons&lt;/em&gt; rules&lt;/a&gt;,&#xA;created some characters, and ran them through three adventures&#xA;&lt;a href=&#34;../quantum-dungeons-preview-1/#playtest-1-the-keep-on-the-borderlands-cave-b&#34;&gt;(1)&lt;/a&gt;, &lt;a href=&#34;../quantum-dungeons-preview-2/&#34;&gt;(2)&lt;/a&gt;, &lt;a href=&#34;../quantum-dungeons-preview-3a/&#34;&gt;(3a)&lt;/a&gt;, &lt;a href=&#34;../quantum-dungeons-preview-3b/&#34;&gt;(3b)&lt;/a&gt;.&#xA;I then did the same with higher level characters &lt;a href=&#34;../quantum-dungeons-preview-4a/&#34;&gt;(4a)&lt;/a&gt;, &lt;a href=&#34;../quantum-dungeons-preview-4b/&#34;&gt;(4b)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this last post in the series for now, I&amp;rsquo;ll add some conversion notes I&#xA;wasn&amp;rsquo;t able to test, then give my final verdict on the game.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conversion-notes-for-dungeon-crawl-classics&#34;&gt;Conversion Notes for &lt;em&gt;Dungeon Crawl Classics&lt;/em&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While I didn&amp;rsquo;t run a DCC adventure, I did put together some conversion notes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 4B</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-4b/</link>
      <pubDate>Wed, 23 Jul 2025 14:45:50 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-4b/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;../quantum-dungeons-preview-4a/&#34;&gt;last installment&lt;/a&gt;, a group of six&#xA;8th level &lt;em&gt;Quantum Dungeons&lt;/em&gt; characters have begun exploring the ship in&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/17065/s3-expedition-to-the-barrier-peaks-1e&#34;&gt;&lt;em&gt;Expedition to the Barrier Peaks&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;See&#xA;&lt;a href=&#34;../quantum-dungeons-preview-4a/#creating-new-characters&#34;&gt;the previous post&lt;/a&gt;&#xA;for an introduction to the six characters, and&#xA;&lt;a href=&#34;../quantum-dungeons-preview-4a/#entering-the-cave&#34;&gt;this part&lt;/a&gt;&#xA;to explain why only six characters have braved this strange dungeon.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-expedition-continues&#34;&gt;The Expedition Continues&lt;/h2&gt;&#xA;&lt;h3 id=&#34;at-a-crossroads&#34;&gt;At a Crossroads&lt;/h3&gt;&#xA;&lt;p&gt;The party reaches a decision point.  Crossing their path is an unlit corridor,&#xA;3m (10&amp;rsquo;) wide.  Ahead of them is a &lt;em&gt;dimly lit&lt;/em&gt; section that comes to a T&#xA;junction in about 15m (50&amp;rsquo;).  Left, right, or straight ahead?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 4A</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-4a/</link>
      <pubDate>Tue, 22 Jul 2025 10:56:26 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-4a/</guid>
      <description>&lt;p&gt;Well, I &lt;em&gt;was&lt;/em&gt; planning to wrap up the series, but then two new drafts appeared&#xA;in rapid succession, so I guess I&amp;rsquo;m doing a little more playtesting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;notes-on-the-new-draft&#34;&gt;Notes on the New Draft&lt;/h2&gt;&#xA;&lt;p&gt;Changes that I noticed include:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Human 1st level characters may choose only a single Talent.&#xA;Non-humans may choose no talents.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;QD AC is renamed &amp;ldquo;DV&amp;rdquo; (Defense Value).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Two sample Patrons for priests.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A paragraph on Alignment.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A short section on 0-Level NPCs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 0: Rules Summary</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-0/</link>
      <pubDate>Tue, 22 Jul 2025 06:42:49 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-0/</guid>
      <description>&lt;p&gt;Omer Golan-Joel of Stellagama Publishing sent me a draft of his new project,&#xA;&lt;em&gt;Quantum Dungeons&lt;/em&gt;, which uses the &lt;a href=&#34;https://www.drivethrurpg.com/en/product/353866/quantum-engine-srd&#34;&gt;Quantum Engine&lt;/a&gt; for dungeon crawling.&#xA;&lt;em&gt;Quantum Dungeons&lt;/em&gt; uses only six-sided dice but aims to remain compatible&#xA;with OSR and Classic D&amp;amp;D dungeons.&lt;/p&gt;&#xA;&lt;p&gt;The rules have changed quite a bit in the past few weeks, so I&amp;rsquo;m going to&#xA;update this summary as the rules change or I find an error in my description.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Languages</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-languages/</link>
      <pubDate>Tue, 22 Jul 2025 01:41:27 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-languages/</guid>
      <description>House rules for languages in &lt;em&gt;Quantum Dungeons&lt;/em&gt;.</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 3B</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-3b/</link>
      <pubDate>Sun, 20 Jul 2025 07:27:50 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-3b/</guid>
      <description>&lt;p&gt;This is part B of the &lt;em&gt;Shadowdark&lt;/em&gt; adventure begun in&#xA;&lt;a href=&#34;../quantum-dungeons-preview-3a/&#34;&gt;part A&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recap&#34;&gt;Recap&lt;/h2&gt;&#xA;&lt;p&gt;Concerned rangers sent Ragnar and his Crew to a creepy old house around which&#xA;people were disappearing and berserkers and beastmen seemed to be working&#xA;together.  There they found a heap of bodies, beastmen and berserkers acting&#xA;oddly, giant rats, a giant spider, a bear, skittering eye creatures, and odd&#xA;of strange mucus which are probably nothing.  So far the loot has been strange&#xA;but sub-par.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 3A</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-3a/</link>
      <pubDate>Fri, 18 Jul 2025 04:04:51 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-3a/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;../quantum-dungeons-preview-2/&#34;&gt;Last time&lt;/a&gt; I ran characters from Stellagama&#xA;Publishing&amp;rsquo;s upcoming &lt;em&gt;Quantum Dungeons&lt;/em&gt; through an &lt;em&gt;Old School Essentials&lt;/em&gt;&#xA;adventure.  This time I&amp;rsquo;ve chosen a longer adventure for &lt;em&gt;Shadowdark&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ragnars-crew&#34;&gt;Ragnar&amp;rsquo;s Crew&lt;/h2&gt;&#xA;&lt;p&gt;As a reminder, these are our six sample characters.  I&amp;rsquo;m applying the &amp;ldquo;nerf&amp;rdquo;&#xA;referred to in &lt;a href=&#34;../quantum-dungeons-preview-1.5/&#34;&gt;an alternate universe&lt;/a&gt;&#xA;but &lt;em&gt;not&lt;/em&gt; the wounds incurred in said universe.  In other words, each&#xA;character has one less Talent.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Name&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Lvl&lt;/th&gt;&#xA;          &lt;th&gt;Skills&lt;/th&gt;&#xA;          &lt;th&gt;Talents (Species)&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Aelfred&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Combat 2, Stealth 1&lt;/td&gt;&#xA;          &lt;td&gt;Marksman&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Berthold&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Combat 2, Physical 1&lt;/td&gt;&#xA;          &lt;td&gt;Two-Fisted&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Duri&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Craft 2. Social 1&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;Dwarf&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Giles&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Physical 1, Stealth 2&lt;/td&gt;&#xA;          &lt;td&gt;Sneak Attack&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Mithrius&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Lore 3&lt;/td&gt;&#xA;          &lt;td&gt;Sorcerer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Ragnar&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;Combat 3, Physical 1&lt;/td&gt;&#xA;          &lt;td&gt;Armor Training, Heavy Hitter&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;em&gt;Mithrius&amp;rsquo;s Spells:&lt;/em&gt; Respite, Sleep&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gold in a Silver-Backed Fantasy Economy</title>
      <link>https://frank-mitchell.com/posts/gold-in-a-silver-economy/</link>
      <pubDate>Wed, 16 Jul 2025 08:08:09 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/gold-in-a-silver-economy/</guid>
      <description>&lt;p&gt;In previous articles on fantasy role-playing games I&amp;rsquo;ve&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/money-in-rpgs/&#34;&gt;argued for a silver economy&lt;/a&gt;&#xA;in which gold is worth 100 silvers.&#xA;I&amp;rsquo;ve also &lt;a href=&#34;../weight-of-coins/&#34;&gt;revised the weight of coins&lt;/a&gt;&#xA;to a more reasonable 200 per kilogram, or 100 per metric pound.&#xA;Finally I&amp;rsquo;ve introduce the concept of &lt;a href=&#34;../fantasy-banking-rules/&#34;&gt;banks&lt;/a&gt;&#xA;in fantasy role-playing games, which may also serve as temples,&#xA;to mitigate the effect of players suddenly carrying ten time the coins.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-role-of-gold&#34;&gt;The Role of Gold&lt;/h2&gt;&#xA;&lt;p&gt;What I haven&amp;rsquo;t addressed is the role of gold in such an economy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Weight of Fantasy Coins</title>
      <link>https://frank-mitchell.com/posts/weight-of-coins/</link>
      <pubDate>Mon, 14 Jul 2025 03:40:21 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/weight-of-coins/</guid>
      <description>&lt;h2 id=&#34;how-many-coins-can-you-lift&#34;&gt;How Many Coins Can You Lift?&lt;/h2&gt;&#xA;&lt;p&gt;For convenience, we assume all coins weigh the same.&#xA;But how heavy is a FRPG coin in real-world units of mass?&lt;/p&gt;&#xA;&lt;p&gt;In &lt;em&gt;Shadowdark&lt;/em&gt; 100 coins occupy a Gear Slot, although the first 100 don&amp;rsquo;t&#xA;count.  D&amp;amp;D 5e uses pounds; 50 coins weigh a pound, which means each coin&#xA;weighs 9.07 grams.&lt;/p&gt;&#xA;&lt;p&gt;However, these are &lt;em&gt;heavy&lt;/em&gt; coins.&#xA;The historical &lt;em&gt;denarius&lt;/em&gt; and &lt;em&gt;drachma&lt;/em&gt; weighed about than half of that,&#xA;between 4.3g &lt;a href=&#34;https://en.wikipedia.org/wiki/Ancient_drachma#Weight_value&#34;&gt;(source)&lt;/a&gt; and 4.6g &lt;a href=&#34;https://en.wikipedia.org/wiki/Denarius#Debasement_and_evolution&#34;&gt;(source)&lt;/a&gt;,&#xA;with &lt;em&gt;denarii&lt;/em&gt; growing smaller and less silver all the time.&#xA;The &lt;em&gt;sceat&lt;/em&gt;, predecessor to the English silver penny between the 5th and 9th&#xA;centuries A.D., weighed only between 0.8g and 1.3g. &lt;a href=&#34;https://en.wikipedia.org/wiki/Sceat&#34;&gt;(source)&lt;/a&gt;&#xA;The modern British pound coin weighs only 8.75g. &lt;a href=&#34;https://en.wikipedia.org/wiki/Coins_of_the_pound_sterling#Currently_circulating_coinage&#34;&gt;(source)&lt;/a&gt;&#xA;Only the modern American half-dollar, rarely used, weighs more than our&#xA;fictional coins, at 11.340g. &lt;a href=&#34;https://www.usmint.gov/learn/coins-and-medals/circulating-coins/half-dollar&#34;&gt;(source)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 2</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-2/</link>
      <pubDate>Mon, 14 Jul 2025 03:32:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;../quantum-dungeons-preview-1&#34;&gt;Last time&lt;/a&gt; I gave an overview of the rules&#xA;for the upcoming &lt;em&gt;Quantum Dungeons&lt;/em&gt; RPG from Stellagama Publishing.&#xA;I also ran &lt;a href=&#34;#ragnars-crew&#34;&gt;six characters&lt;/a&gt;&#xA;through what was supposed to be a challenging combat, but which proved easier&#xA;than I had heard.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ragnars-crew&#34;&gt;Ragnar&amp;rsquo;s Crew&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Name&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Lvl&lt;/th&gt;&#xA;          &lt;th&gt;Skills&lt;/th&gt;&#xA;          &lt;th&gt;Talents (Species)&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Aelfred&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Combat 2, Stealth 1&lt;/td&gt;&#xA;          &lt;td&gt;Marksman&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Berthold&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Combat 2, Physical 1&lt;/td&gt;&#xA;          &lt;td&gt;Two-Fisted&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Duri&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Craft 2. Social 1&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;Dwarf&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Giles&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Physical 1, Stealth 2&lt;/td&gt;&#xA;          &lt;td&gt;Sneak Attack&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Mithrius&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Lore 3&lt;/td&gt;&#xA;          &lt;td&gt;Sorcerer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Ragnar&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;Combat 3, Physical 1&lt;/td&gt;&#xA;          &lt;td&gt;Armor Training, Heavy Hitter&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;em&gt;Mithrius&amp;rsquo;s Spells:&lt;/em&gt; Respite, Sleep&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 1.5</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-1.5/</link>
      <pubDate>Sun, 06 Jul 2025 00:31:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-1.5/</guid>
      <description>&lt;p&gt;Questions linger about how easily Ragnar&amp;rsquo;s Crew conquered eight orcs in less&#xA;than two rounds with six characters in an encounter known to be deadly.&lt;/p&gt;&#xA;&lt;p&gt;Omar Golan-Joel saw the last post and decided to &amp;ldquo;nerf&amp;rdquo; first-level characters&#xA;by giving them only one Talent.  If he implements that rule change,&#xA;Ragnar&amp;rsquo;s Crew might look like this:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Name&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Lvl&lt;/th&gt;&#xA;          &lt;th&gt;Skills&lt;/th&gt;&#xA;          &lt;th&gt;Talents (Species)&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Aelfred&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Combat 2, Stealth 1&lt;/td&gt;&#xA;          &lt;td&gt;Marksman&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Berthold&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Combat 2, Physical 1&lt;/td&gt;&#xA;          &lt;td&gt;Two-Fisted&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Duri&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Craft 2. Social 1&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;Dwarf&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Giles&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Physical 1, Stealth 2&lt;/td&gt;&#xA;          &lt;td&gt;Sneak Attack&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Mithrius&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1, Lore 3&lt;/td&gt;&#xA;          &lt;td&gt;Sorcerer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Ragnar&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;Combat 3, Physical 1&lt;/td&gt;&#xA;          &lt;td&gt;Armor Training, Heavy Hitter&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;em&gt;Mithrius&amp;rsquo;s Spells:&lt;/em&gt; Respite, Sleep&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum Dungeons Preview 1</title>
      <link>https://frank-mitchell.com/posts/quantum-dungeons-preview-1/</link>
      <pubDate>Tue, 01 Jul 2025 12:21:12 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quantum-dungeons-preview-1/</guid>
      <description>&lt;p&gt;Omer Golan-Joel of Stellagama Publishing sent me a draft of his new project,&#xA;&lt;em&gt;Quantum Dungeons&lt;/em&gt;, which uses the &lt;a href=&#34;https://www.drivethrurpg.com/en/product/353866/quantum-engine-srd&#34;&gt;Quantum Engine&lt;/a&gt; for dungeon crawling.&#xA;&lt;em&gt;Quantum Dungeons&lt;/em&gt; uses only six-sided dice but aims to remain compatible&#xA;with OSR and Classic D&amp;amp;D dungeons.&lt;/p&gt;&#xA;&lt;h2 id=&#34;rules&#34;&gt;Rules&lt;/h2&gt;&#xA;&lt;p&gt;::: note&#xA;2025-07-21: This summary is obsolete; I leave it here to explain the rest&#xA;of the text.  Please see &lt;a href=&#34;../quantum-dungeons-preview-0/&#34;&gt;this summary&lt;/a&gt;&#xA;instead.&#xA;:::&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-quantum-engine&#34;&gt;The Quantum Engine&lt;/h3&gt;&#xA;&lt;p&gt;To determine the success or failure of an action, players and the Referee&#xA;throw two six-sided dice (2d6), add any modifiers, and try to meet or&#xA;exceed a Target Number determined by the situation.  &lt;em&gt;Quantum Dungeons&lt;/em&gt;&#xA;introduces Advantage and Disadvantage dice: throw 3d6 and total the highest&#xA;two if the player has Advantage, or the lower two if the player has&#xA;Disadvantage.  Advantage and Disadvantage cancel each other out.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dwarf Expert Class for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/class/dwarf-expert/</link>
      <pubDate>Sun, 22 Jun 2025 20:10:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/class/dwarf-expert/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Dwarf Expert Class&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;dwarf-expert&#34;&gt;Dwarf Expert&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Clever craftsmen, wily merchants, and veteran delvers with a lifetime of&#xA;experience living underground.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Weapons.&lt;/strong&gt; Club, crossbow, dagger, &lt;a href=&#34;#weapons&#34;&gt;hand axe&lt;/a&gt;,&#xA;&lt;a href=&#34;#weapons&#34;&gt;light hammer&lt;/a&gt;, mace, shortbow, shortsword, spear.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Armor.&lt;/strong&gt; Leather, chainmail, shields.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hit Points.&lt;/strong&gt; 1d8 per level.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Languages.&lt;/strong&gt; You speak Common and Dwarfish.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dwarf Defender Class for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/class/dwarf-defender/</link>
      <pubDate>Sun, 22 Jun 2025 19:11:30 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/class/dwarf-defender/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Dwarf Defender Class&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;dwarf-defender&#34;&gt;Dwarf Defender&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Stout defenders of Dwarfkind and those to whom they have sworn their loyalty.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Weapons.&lt;/strong&gt; Club, crossbow, dagger, greataxe, &lt;a href=&#34;#weapons&#34;&gt;hand axe&lt;/a&gt;,&#xA;&lt;a href=&#34;#weapons&#34;&gt;light hammer&lt;/a&gt;, mace, shortbow, shortsword, spear, warhammer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Armor.&lt;/strong&gt; All armor and shields.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hit Points.&lt;/strong&gt; 1d10 per level.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Languages.&lt;/strong&gt; You speak Common and Dwarfish.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clash of Steel Playtest</title>
      <link>https://frank-mitchell.com/posts/clash-of-steel-playtest/</link>
      <pubDate>Thu, 19 Jun 2025 00:35:23 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/clash-of-steel-playtest/</guid>
      <description>&lt;p&gt;On March 8, 2025 I ran a playtest of &lt;a href=&#34;https://www.drivethrurpg.com/en/product/505035/clash-of-steel-2nd-edition&#34;&gt;Clash of Steel&lt;/a&gt; from Zozer Games.&#xA;Here are my (much delayed) playtest notes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-adventure&#34;&gt;The Adventure&lt;/h2&gt;&#xA;&lt;p&gt;Taking a cue from one of the adventure seeds in the back, the adventurers&#xA;start by witnessing five boys being flogged by the royal guards.&#xA;A distraught old man reveals they are his sons, who approached the king&#xA;to tell him their taxes would be delayed because some &lt;em&gt;thing&lt;/em&gt; was killing&#xA;their flocks of sheep.  The king accused them of lying, hence the flogging.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Players Roll All D20s</title>
      <link>https://frank-mitchell.com/posts/players-roll-all-d20s/</link>
      <pubDate>Thu, 19 Jun 2025 00:20:29 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/players-roll-all-d20s/</guid>
      <description>&lt;p&gt;So, I&amp;rsquo;m trying to figure out how to do a &amp;ldquo;players roll all dice&amp;rdquo; version of&#xA;d20 where the probabilities remain the same for both sides.&lt;/p&gt;&#xA;&lt;p&gt;Addenda to the &lt;a href=&#34;https://www.d20srd.org/srd/variant/adventuring/playersRollAllTheDice.htm&#34;&gt;d20 SRD&lt;/a&gt; suggest that enemies receive an Attack Score equal&#xA;to 11 + their normal attack bonus and make Defense Checks equal to 1d20 +&#xA;(AC - 10).  However, when I brought this up on a Discord server, one user&#xA;insisted that I should use (AC - 11), and indeed 11 across the board to&#xA;convert static DCs to bonuses and vice versa.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Myrkheim, Land of the Dwarfs</title>
      <link>https://frank-mitchell.com/rpg/myrkheim/</link>
      <pubDate>Mon, 16 Jun 2025 09:14:45 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/myrkheim/</guid>
      <description>&lt;p&gt;Originally I created &lt;em&gt;Myrkheim&lt;/em&gt; for &lt;em&gt;Clash of Steel&lt;/em&gt;, but I&amp;rsquo;ve transplanted&#xA;it into &lt;em&gt;Shadowdark&lt;/em&gt; for an upcoming&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/shadowdark/house-rule/human-centric/&#34;&gt;&amp;ldquo;mostly humans&amp;rdquo;&lt;/a&gt; campaign using&#xA;some version of my &lt;a href=&#34;https://frank-mitchell.com/rpg/shadowdark/class/&#34;&gt;ancestry classes&lt;/a&gt; instead of&#xA;the usual Ancestry rules.&lt;/p&gt;&#xA;&lt;p&gt;This write-up works for any world where Dwarfs exist but are rare in most&#xA;human lands.  In my settings the Dwarfs have significant influence over&#xA;the lands between Myrkheim and major trade routes.&#xA;In one they effectively control the feckless human government;&#xA;in another they have a &amp;ldquo;seventh city-state&amp;rdquo; of mixed humans and Dwarfs&#xA;along the river that connects Myrkheim to the nearest seaport.&#xA;In the Shadowdark setting they rely on their own fortified settlements&#xA;along their land trade route and the relative peace brought by the Empire.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A (Revised^2) Report on SLAN: Scheme List-Atom Notation</title>
      <link>https://frank-mitchell.com/projects/slan/</link>
      <pubDate>Fri, 13 Jun 2025 00:40:40 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/slan/</guid>
      <description>&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;CHANGES (2025-06-13): Since &lt;a href=&#34;../slan-past/slan-r1/&#34;&gt;R1&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Removed restrictions of character encodings, in line with &lt;a href=&#34;../eltn/&#34;&gt;ELTN&lt;/a&gt;;&#xA;any bytes outside the ASCII range remain unchanged.&lt;/li&gt;&#xA;&lt;li&gt;Converted the formal grammar to official EBNF.&lt;/li&gt;&#xA;&lt;li&gt;Removed rejected proposals.&lt;/li&gt;&#xA;&lt;li&gt;Moved Java APIs to &lt;a href=&#34;https://frank-mitchell.com/projects/java/slan-j/&#34;&gt;a new page&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Replace Lua string escapes with SRFI-75.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;CHANGES (2025-06-14): spell-check.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;SLAN is the Scheme List-Atom Notation&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, because I really wanted the&#xA;acronym &lt;a href=&#34;https://en.wikipedia.org/wiki/Slan&#34;&gt;SLAN&lt;/a&gt;.&#xA;Like &lt;a href=&#34;https://www.w3.org/TR/xml/&#34;&gt;XML&lt;/a&gt;, &lt;a href=&#34;https://yaml.org/&#34;&gt;YAML&lt;/a&gt;, &lt;a href=&#34;https://www.json.org/&#34;&gt;JSON&lt;/a&gt;, &lt;a href=&#34;https://toml.io/&#34;&gt;TOML&lt;/a&gt;, and my own &lt;a href=&#34;../eltn/&#34;&gt;ELTN&lt;/a&gt; it&amp;rsquo;s a&#xA;language for describing data structures, not performing calculations.&#xA;In SLAN everything is a list of &amp;ldquo;atoms&amp;rdquo; &amp;ndash; strings, numbers, &amp;ldquo;symbols&amp;rdquo;,&#xA;and booleans &amp;ndash; and other lists.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SLAN in Java</title>
      <link>https://frank-mitchell.com/projects/java/slan-j/</link>
      <pubDate>Sun, 08 Jun 2025 14:34:20 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/java/slan-j/</guid>
      <description>&lt;p&gt;These are the Java APIs that might implement &lt;a href=&#34;https://frank-mitchell.com/projects/slan/&#34;&gt;SLAN&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;slanpp-the-slan-pull-parser&#34;&gt;SLANPP: The SLAN Pull Parser&lt;/h2&gt;&#xA;&lt;p&gt;One might write a Pull Parser to parse SLAN with an interface like this.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;SlanPullParser&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;enum&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;SlanEvent&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;SYNTAX&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;ERROR,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;START_STREAM,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;START_LIST,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;END_LIST,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;SYMBOL,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;STRING,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;NUMBER,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;BOOLEAN_TRUE,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;BOOLEAN_FALSE,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;EMPTY_LIST,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;END_STREAM&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;boolean&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;hasNext&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;next&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;SlanEvent&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getEvent&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;String&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getString&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;// value of SYMBOL or STRING&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;boolean&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;isNumber&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;// if NUMBER or maybe number-like STRING&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Number&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getNumber&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;// converts string ... if possible&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;boolean&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;isTrue&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;// not BOOLEAN_FALSE or EMPTY_LIST&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And here&amp;rsquo;s one way one might use it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extended Lua Table Notation (ELTN), v0.9.2</title>
      <link>https://frank-mitchell.com/projects/eltn/</link>
      <pubDate>Fri, 06 Jun 2025 11:41:50 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/eltn/</guid>
      <description>&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;CHANGED 2025-06-06: Since &lt;a href=&#34;https://frank-mitchell.com/projects/eltn-past/eltn-0-9-1/&#34;&gt;0.9.1&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Clarified role of &lt;a href=&#34;#nil&#34;&gt;Nil&lt;/a&gt; in parsing, serialization, and deserialization.&lt;/li&gt;&#xA;&lt;li&gt;Rearrange &amp;ldquo;&lt;code&gt;ws&lt;/code&gt;&amp;rdquo; (whitespace and comments) productions&#xA;in &lt;a href=&#34;#parser-rules&#34;&gt;top-level EBNF&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Added form feed and vertical tab as whitespace characters.&lt;/li&gt;&#xA;&lt;li&gt;Fixed error in &amp;ldquo;&lt;code&gt;hex_number&lt;/code&gt;&amp;rdquo; production.&lt;/li&gt;&#xA;&lt;li&gt;Added explanation of root of &lt;a href=&#34;#appendix-d-eltn-path&#34;&gt;ELTN Path&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Minor rewording.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;CHANGED 2025-06-14: spell-check.&lt;/p&gt;&#xA;&lt;p&gt;CHANGED 2026-01-10: fix markup / markdown.&lt;/p&gt;&#xA;&lt;p&gt;CHANGED 2026-01-18: remove UTF-8 character in source.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;objectives&#34;&gt;Objectives&lt;/h2&gt;&#xA;&lt;p&gt;Extended Lua Table Notation (ELTN) provides a text representation of data&#xA;drawn from syntax of the &lt;a href=&#34;https://lua.org&#34;&gt;Lua programming language&lt;/a&gt; in the same way&#xA;&lt;a href=&#34;http://json.org/&#34;&gt;JSON&lt;/a&gt; draws from &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript&#34;&gt;JavaScript&lt;/a&gt; / &lt;a href=&#34;https://tc39.es/ecma262/&#34;&gt;ECMAScript&lt;/a&gt;.&#xA;The author envisions ELTN as an alternative to &lt;a href=&#34;https://toml.io/&#34;&gt;TOML&lt;/a&gt; for configuration and&#xA;manifest files, but ELTN could also play a role in data exchange similar to&#xA;JSON in exchanging data over HTTP or raw sockets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extended Lua Table Notation (ELTN), v0.9.1</title>
      <link>https://frank-mitchell.com/projects/eltn-past/eltn-0-9-1/</link>
      <pubDate>Sat, 31 May 2025 09:50:09 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/eltn-past/eltn-0-9-1/</guid>
      <description>&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;CHANGED 2025-05-31: Since &lt;a href=&#34;https://frank-mitchell.com/projects/eltn-past/eltn-0-9-0/&#34;&gt;0.9.0&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rearranged sections for better readability.&lt;/li&gt;&#xA;&lt;li&gt;More speculative sections moved to Appendices.&lt;/li&gt;&#xA;&lt;li&gt;Tightened up some language.&lt;/li&gt;&#xA;&lt;li&gt;Removed booleans as table keys.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;CHANGED 2025-06-04:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fix minor typos in text.&lt;/li&gt;&#xA;&lt;li&gt;Add link back to previous version.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;objectives&#34;&gt;Objectives&lt;/h2&gt;&#xA;&lt;p&gt;Extended Lua Table Notation (ELTN) provides a text representation of data&#xA;drawn from syntax of the &lt;a href=&#34;https://lua.org&#34;&gt;Lua programming language&lt;/a&gt; in the same way&#xA;&lt;a href=&#34;http://json.org/&#34;&gt;JSON&lt;/a&gt; draws from &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript&#34;&gt;JavaScript&lt;/a&gt; / &lt;a href=&#34;https://tc39.es/ecma262/&#34;&gt;ECMAScript&lt;/a&gt;.&#xA;The author envisions ELTN as an alternative to &lt;a href=&#34;https://toml.io/&#34;&gt;TOML&lt;/a&gt; for configuration and&#xA;manifest files, but ELTN could also play a role in data exchange similar to&#xA;JSON in exchanging data over HTTP or raw sockets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extended Lua Table Notation (ELTN), v0.9.0</title>
      <link>https://frank-mitchell.com/projects/eltn-past/eltn-0-9-0/</link>
      <pubDate>Fri, 23 May 2025 08:14:38 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/eltn-past/eltn-0-9-0/</guid>
      <description>&lt;h2 id=&#34;objectives&#34;&gt;Objectives&lt;/h2&gt;&#xA;&lt;p&gt;Extended Lua Table Notation (ELTN) provides a text representation of data&#xA;drawn from the &lt;a href=&#34;https://lua.org&#34;&gt;Lua programming language&lt;/a&gt; in the same way &lt;a href=&#34;http://json.org/&#34;&gt;JSON&lt;/a&gt; draws&#xA;from &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript&#34;&gt;JavaScript&lt;/a&gt; / &lt;a href=&#34;https://tc39.es/ecma262/&#34;&gt;ECMAScript&lt;/a&gt;.&#xA;The author envisions ELTN as an alternative to &lt;a href=&#34;https://toml.io/&#34;&gt;TOML&lt;/a&gt; for configuration and&#xA;manifest files, but ELTN could also play a role in data exchange similar to&#xA;JSON in exchanging data over HTTP or raw sockets.&lt;/p&gt;&#xA;&lt;h2 id=&#34;related-work&#34;&gt;Related Work&lt;/h2&gt;&#xA;&lt;p&gt;As a strict subset of the &lt;a href=&#34;https://lua.org&#34;&gt;Lua programming language&lt;/a&gt;,&#xA;ELTN owes a great deal to Lua&amp;rsquo;s authors, Roberto Ierusalimschy,&#xA;Waldemar Celes, and Luiz Henrique de Figueiredo, as well as its many&#xA;contributors and maintainers over decades.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Specification of the ELTN File Format (v0.6)</title>
      <link>https://frank-mitchell.com/projects/eltn-past/eltn-0-6/</link>
      <pubDate>Sun, 11 May 2025 22:23:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/eltn-past/eltn-0-6/</guid>
      <description>&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;CHANGED 2025-05-11:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Preserved old version in &lt;a href=&#34;https://frank-mitchell.com/projects/eltn-past/&#34;&gt;ELTN Past&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Incremented version to 0.6&lt;/li&gt;&#xA;&lt;li&gt;Fixed missing text under &lt;a href=&#34;#streaming-eltn&#34;&gt;Streaming ELTN&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Removed &amp;ldquo;changed&amp;rdquo; notes in the text.&lt;/li&gt;&#xA;&lt;li&gt;Removed sections on rejected features.&lt;/li&gt;&#xA;&lt;li&gt;Removed links to &amp;ldquo;in-progress&amp;rdquo; implementations.&lt;/li&gt;&#xA;&lt;li&gt;Ran through spell-checker.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;CHANGED 2025-05-13:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added line numbers to all examples in &lt;a href=&#34;#use-cases&#34;&gt;use cases&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Added two missing &lt;a href=&#34;#fixed-length-tokens&#34;&gt;fixed-length tokens&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;CHANGED 2025-05-18:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Renamed &amp;ldquo;var&amp;rdquo; to &amp;ldquo;def&amp;rdquo;, as in definition.&lt;/li&gt;&#xA;&lt;li&gt;Remove dependency on UTF-8.  Parsers should handle any encoding&#xA;based on ASCII, and pass any unfamiliar bytes in strings and comments&#xA;straight through.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Antigod</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/antigod/</link>
      <pubDate>Sat, 10 May 2025 18:08:26 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/antigod/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wiktionary.org/wiki/antigod&#34;&gt;&lt;strong&gt;antigod&lt;/strong&gt;&lt;/a&gt; (&lt;em&gt;plural&lt;/em&gt; &lt;strong&gt;antigods&lt;/strong&gt;)&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;(&lt;em&gt;mythology&lt;/em&gt;) A preternatural being opposed to the gods.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;An Antigod is a being opposed to one or more &lt;a href=&#34;../deity&#34;&gt;Deities&lt;/a&gt;, either&#xA;through personal enmity or by representing the antithesis of what those&#xA;Deities stand for.  Examples from mythology include the Greek Titans, the&#xA;Norse Giants, the Indian Asuras, and the Christian Devil.&lt;/p&gt;&#xA;&lt;p&gt;If Deities are good (in their own minds and those of their worshipers), it&#xA;stands to reason that Antigods must be evil (in the eyes of the Deities and&#xA;their followers).  Most Antigods embody traits that few religions endorse:&#xA;malice, anger, greed, gluttony, pride, ignorance, indifference, and destruction&#xA;for destruction&amp;rsquo;s sake.  While Deities thrive on worship, Antigods draw&#xA;sustenance from terror, horror, and hatred.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Void King&#39;s Court for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/void-king/</link>
      <pubDate>Sat, 10 May 2025 10:27:18 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/void-king/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Void King&amp;rsquo;s Court&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;void-kings-court&#34;&gt;Void King&amp;rsquo;s Court&lt;/h2&gt;&#xA;&lt;p&gt;The Void King dwells in a huge cube-shaped citadel, 32 kilometers (20 miles)&#xA;on a side, somewhere in an uncharted Void Zone.  Few have been in its&#xA;vast airless labyrinth and lived to tell the tale &amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Adonic Angel for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/adonic-angel/</link>
      <pubDate>Sat, 10 May 2025 09:17:32 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/adonic-angel/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Adonic Angel&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;In the world of Adon, a minor god named L&amp;mdash; grew in fame and glory to become&#xA;the only god of that desert world, thanks to the efforts of his creations,&#xA;the Adonic Angels. When the one now referred to only as the Most High&#xA;discovered the multiverse, his angels followed him into a grander battlefield.&#xA;They won many battles against Chaos, and razed the benighted world of Erebus.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Item, Grigori Artifact for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/magic-item/grigori-artifact/</link>
      <pubDate>Sat, 10 May 2025 09:12:37 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/magic-item/grigori-artifact/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Magic Item, Grigori Artifact&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The Grigori Empire appeared in the Mythic Age.  They challenged the&#xA;Builders to a war in the skies that rearranged the landscape.&#xA;Eventually the Grigori left, apparently defeated.&#xA;The Grigori left very few portable artifacts, mostly weapons and ships.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Deity</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/deity/</link>
      <pubDate>Sat, 10 May 2025 07:52:54 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/deity/</guid>
      <description>&lt;p&gt;::: license&lt;/p&gt;&#xA;&lt;p&gt;Chapbook typeface by Feòrag NicBhrìde, available&#xA;&lt;a href=&#34;https://www.feorag.com/freestuff/chapbook.html&#34;&gt;here&lt;/a&gt;.&#xA;This typeface is licensed under the Creative Commons&#xA;Attribution-NonCommercial-ShareAlike License, available at&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by-nc-sa/2.0/&#34;&gt;http://creativecommons.org/licenses/by-nc-sa/2.0/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the countless Worlds, some beings can only be classified as &amp;ldquo;deities&amp;rdquo;.&#xA;These deities can produce calamities or work miracles on a grand scale.&#xA;They have cults, sects, or entire religions dedicated to their worship,&#xA;and priests of these sects can accomplish magical or miraculous feats.&#xA;Sometimes these deities descent to earth in a mortal form or disguised&#xA;as mortals, but most of the time their true bodies dwell in an earthly&#xA;or extra-planar paradise of their own making.  Only their senses, powers,&#xA;and servants frequent the places where mortals dwell.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Relic</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/relic/</link>
      <pubDate>Fri, 09 May 2025 16:04:58 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/relic/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Many fantasy worlds contain magic items that provide a small boost to combat or&#xA;other common tasks, or carry extra items, or otherwise provide an incremental&#xA;benefit (or curse) for the wielder.&lt;/p&gt;&#xA;&lt;p&gt;A Relic is another thing altogether. Relics &lt;em&gt;bend reality&lt;/em&gt; around them.&#xA;Being imbued with sentience and power by a god, devil, or sheer antiquity,&#xA;a Relic can sway the hearts and minds of an entire kingdom, break the known&#xA;laws of nature and magic, or bear a blessing (or curse) coveted (or shunned)&#xA;by all thinking beings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats! Appendix A: Probability</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/z-probability/</link>
      <pubDate>Fri, 09 May 2025 15:39:10 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/z-probability/</guid>
      <description>&lt;p&gt;This appendix breaks down the probabilities of all the mechanics used by&#xA;Timeless Threats.&lt;/p&gt;&#xA;&lt;h2 id=&#34;diceless&#34;&gt;Diceless&lt;/h2&gt;&#xA;&lt;p&gt;Used by:&#xA;&lt;a href=&#34;../antigod/&#34;&gt;Antigod&lt;/a&gt;,&#xA;&lt;a href=&#34;../deity/&#34;&gt;Deity&lt;/a&gt;,&#xA;&lt;a href=&#34;../devourer/&#34;&gt;Devourer&lt;/a&gt;,&#xA;&lt;a href=&#34;../devourer/&#34;&gt;Handler&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Gods and antigods do not play dice with the universe.&#xA;All their abilities manipulate narratives, not probabilities.&#xA;Their minions and incarnations operate under the rules of&#xA;the &lt;a href=&#34;../../rules/#host-system&#34;&gt;Host System&lt;/a&gt; in the Worlds where they operate.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Devourers do not roll dice, but they provoke dice-rolling in other&#xA;characters.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Handlers operate entirely under the rules of the &lt;a href=&#34;../../rules/#host-system&#34;&gt;Host System&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Occultist</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/occultist/</link>
      <pubDate>Thu, 08 May 2025 07:04:59 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/occultist/</guid>
      <description>&lt;p&gt;::: license&lt;/p&gt;&#xA;&lt;p&gt;Dearmach font © Feòrag NicBhrìde, available&#xA;&lt;a href=&#34;https://www.feorag.com/freestuff/dearmach.html&#34;&gt;here&lt;/a&gt;.&#xA;This typeface is licensed under a Creative Commons&#xA;Attribution-Non-Commercial-Share Alike 2.5 UK: Scotland.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Faced with a harsh, prosaic world, some minds rebel.  They latch onto&#xA;unsubstantiated beliefs about past lives, ghosts, Bigfoot, global&#xA;conspiracies, psychic powers, a flat Earth, a hollow Earth, mythical&#xA;civilizations with mystical powers, astral projection,&#xA;extraterrestrials, ultraterrestrials, or worlds beyond their own.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes, by sheer accident or mysterious design, they happen to be right.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Phantom</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/phantom/</link>
      <pubDate>Thu, 08 May 2025 06:23:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/phantom/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Existence is a privilege, not a right. The multiverse can erase those who&#xA;now exist for many reasons: a timeline rendered impossible by irresponsible&#xA;time travelers, a Shadow World already on the bringk of nonexistence falling&#xA;into the Devourer&amp;rsquo;s maw, or an entire body of evidence wished away by a&#xA;cabal of &lt;a href=&#34;../revisionist/&#34;&gt;Revisionists&lt;/a&gt; manipulating consensual reality.&lt;/p&gt;&#xA;&lt;p&gt;Whatever the cause, survivors of the vanished timeline, world, or evidence&#xA;become Phantoms, their own existence gradually fading &amp;hellip; assuming&#xA;&lt;a href=&#34;../devourer/&#34;&gt;Devourers&lt;/a&gt; don&amp;rsquo;t come for the first.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Time Gem</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/time-gem/</link>
      <pubDate>Sat, 03 May 2025 10:23:21 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/time-gem/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Time Gems first appeared in the hands of the &lt;a href=&#34;../time-thief/&#34;&gt;Time Thieves&lt;/a&gt;, who used them&#xA;to commit daring burglaries in the present and past.  As the name implies,&#xA;a Time Gem has the ability to alter time and to some extent space for a user&#xA;with whom it has bonded.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appearance&#34;&gt;Appearance&lt;/h2&gt;&#xA;&lt;p&gt;A Time Gem is a glowing amber stone, roughly oval, about 10 cm by 7cm by 5 cm.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tactics&#34;&gt;Tactics&lt;/h2&gt;&#xA;&lt;p&gt;Time Gem users employ the Time Gem&amp;rsquo;s power to enhance their own movement and&#xA;impede the mvement of others.  The most powerful abilities of a Gem in that&#xA;regard are &lt;a href=&#34;#freeze&#34;&gt;Freeze&lt;/a&gt;, &lt;a href=&#34;#haste&#34;&gt;Haste&lt;/a&gt;, and &lt;a href=&#34;#slow&#34;&gt;Slow&lt;/a&gt;,&#xA;&lt;a href=&#34;#portal&#34;&gt;Portal&lt;/a&gt; may be used to escape as well as travel to the past.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Time Guardian</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/time-guardian/</link>
      <pubDate>Sat, 03 May 2025 08:39:07 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/time-guardian/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Since the solution to humans playing with powers they do not understand is&#xA;apparently more humans playing with powers they do not understand, a mortal&#xA;organization of Time Guardians has sprung up.  They pursue Time Thieves using&#xA;the same techniques, further polluting the time stream.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appearance&#34;&gt;Appearance&lt;/h2&gt;&#xA;&lt;p&gt;Some Time Guardians wear uniforms and helmets that mark them as some form of&#xA;soldiers or agents.  Others attempt to blend in with the locals, although&#xA;any &amp;ldquo;streetwise&amp;rdquo; characters, particularly Time Thieves, can identify them&#xA;by their quasi-military bearing and slightly &amp;ndash; or obviously &amp;ndash; &amp;ldquo;square&amp;rdquo;&#xA;behavior.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Revisionist</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/revisionist/</link>
      <pubDate>Fri, 02 May 2025 18:06:11 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/revisionist/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Explanations exist; they have existed for all time; there is always a&#xA;well-known solution to every human problem &amp;ndash; neat, plausible, and wrong.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ndash; H. L. Mencken&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In the sciences and the humanities, dedicated and passionate researchers&#xA;uncover new facts, formulate new hypotheses, and refine their hypotheses&#xA;into provable theories.  Even historians, whose work revolves around documents&#xA;of sometimes questionable accuracy, are no less rigorous or skeptical than&#xA;physicists or biologists.  Slowly, in halting steps, our understanding of&#xA;the physical world, of nature, and of humanity&amp;rsquo;s troubled past grows and&#xA;improves.  Sometimes scientists make wrong turns, but others step in to&#xA;weed out the bad science and bad history and put our collective knowledge&#xA;on the road to&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Timeless</title>
      <link>https://frank-mitchell.com/posts/about-timeless/</link>
      <pubDate>Thu, 01 May 2025 09:55:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/about-timeless/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://frank-mitchell.com/posts/many-systems-one-campaign/&#34;&gt;wacky idea&lt;/a&gt; I had last week took over&#xA;my brain, and has now transformed into something like a real game.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://frank-mitchell.com/rpg/game-designs/timeless/&#34;&gt;&lt;em&gt;Timeless&lt;/em&gt;&lt;/a&gt; is a &amp;ldquo;metasystem&amp;rdquo; that ties together&#xA;independent characters in different tabletop roleplaying game systems into&#xA;a single being, a Timeless, who incarnates in different parallel worlds at&#xA;different times.  I added more explanation, alternate mechanics, and a&#xA;quartet of equally system-independent potential antagonists.&lt;/p&gt;&#xA;&lt;p&gt;Consider this thing in pre-alpha development.  I wrote it over a week, and it&#xA;hasn&amp;rsquo;t been tested &lt;em&gt;at all&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Devourer</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/devourer/</link>
      <pubDate>Tue, 29 Apr 2025 18:24:28 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/devourer/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Devourers are incarnations of entropy.&#xA;They have put dying worlds out of their misery and converted grim but&#xA;habitable &amp;ldquo;shadow worlds&amp;rdquo; into so much rubble and empty space.&lt;/p&gt;&#xA;&lt;p&gt;From the vast Wyrms of the Void Between Worlds to the small, innumerable&#xA;clock-roaches that appear during temporal paradoxes, scavengers of the&#xA;Devourer portend doom for a divergent timeline or fading world.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appearance&#34;&gt;Appearance&lt;/h2&gt;&#xA;&lt;p&gt;Devourers typically resemble lower earth vermin of uncommon size.&#xA;They seem made of a black plastic that glistens, but in the wrong places.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Handler</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/handler/</link>
      <pubDate>Tue, 29 Apr 2025 02:26:40 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/handler/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Handlers work for a mysterious being called the Arbiter, who heads something&#xA;called the Cosmic Balance.  The Arbiter sends out Handlers to aid his agents&#xA;throughout space and time, and collect their intelligence reports.&lt;/p&gt;&#xA;&lt;p&gt;Handlers also act as brokers for just about everything an agent could need,&#xA;if not always what they want.  They negotiate in rough neighborhoods and&#xA;dangerous areas, yet still keep to their principles of doing no (direct) harm.&#xA;They walk unarmed, but can handle themselves in a fight.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Time Thief</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/time-thief/</link>
      <pubDate>Tue, 29 Apr 2025 02:26:40 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/time-thief/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Humans, as is their wont, tread where wiser species dare not go.  Thus we&#xA;have humans who, having acquired magic that transcends time to a limited&#xA;extent, set about stealing treasures from their own past.&lt;/p&gt;&#xA;&lt;p&gt;Other time travelers have appeared every so often. Most have been scholars,&#xA;or at least tourists, with some sense of responsibility.&#xA;Some will remember the so-called TimeWatch, who tried to police time travel.&lt;/p&gt;&#xA;&lt;p&gt;Blatantly plundering the past, however &amp;hellip; there are just no words.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Threats: Discarnator</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/threats/discarnator/</link>
      <pubDate>Tue, 29 Apr 2025 02:25:47 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/threats/discarnator/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Human fanatics stalk the Timeless during their Incarnations.  They wish to&#xA;destroy the Timeless, and have acquired a few nasty mystical tricks to do so.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appearance&#34;&gt;Appearance&lt;/h2&gt;&#xA;&lt;p&gt;Most, but not all, Discarnators &lt;em&gt;look&lt;/em&gt; religiously fanatic. either disheveled&#xA;or obsessively neat in an archaic style.  They often brandish a holy symbol&#xA;and speak a litany of protection against evil in the face of a known or&#xA;suspected Timeless.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tactics&#34;&gt;Tactics&lt;/h2&gt;&#xA;&lt;p&gt;Discarnators masquerade as fringe religions with innocent-sounding names.&#xA;Cultists start off as friendly missionaries, but soon their circle grows&#xA;tighter around a suspected Timeless and becomes more threatening.   At last&#xA;the Discarnators make their move: kidnapping the suspected Timeless, locking&#xA;them in an abandoned building, and subjecting them to tortures aimed at&#xA;&amp;ldquo;drawing out the demon&amp;rdquo; or some culturally acceptable religious idiom.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless: Timeless City Lore</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/timeless-city-lore/</link>
      <pubDate>Sat, 26 Apr 2025 16:32:53 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/timeless-city-lore/</guid>
      <description>&lt;p&gt;&lt;em&gt;You wake up &amp;hellip; nowhere.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Timeless City is a sort of Limbo between Incarnations.  Picture a town from&#xA;1930s America, or medieval England, or imperial China; it&amp;rsquo;s like none of them,&#xA;or all of them.  It&amp;rsquo;s what you want it to be.  It&amp;rsquo;s what you fear it to be.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;NikolaAvramovic_CGINVESTIGATOR-1.png&#34; alt=&#34;Investigator on the Street&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;::: license&#xA;Artwork copyright Nikola Avramovic, used with permission.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;places&#34;&gt;Places&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-diner&#34;&gt;The Diner&lt;/h3&gt;&#xA;&lt;p&gt;People eat at the Diner &amp;ndash; food tastes &lt;em&gt;exactly&lt;/em&gt; the way you remember &amp;ndash; but&#xA;mostly they talk.  Rival factions of Timeless, &lt;a href=&#34;#handlers&#34;&gt;Handlers&lt;/a&gt; conferring with&#xA;their clients, old friends catching up &amp;hellip; they&amp;rsquo;re all there.  If anyone&#xA;tries to stir up trouble, the &lt;a href=&#34;#the-chef&#34;&gt;Chef&lt;/a&gt; sends in some bouncers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Lore</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/lore/</link>
      <pubDate>Sat, 26 Apr 2025 06:20:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/lore/</guid>
      <description>&lt;p&gt;::: sidebar&lt;/p&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;&#xA;&lt;p&gt;The author hates, &lt;em&gt;hates&lt;/em&gt;, &lt;em&gt;&lt;strong&gt;hates&lt;/strong&gt;&lt;/em&gt; metaplot in role-playing games.&#xA;The reader should therefore consider this merely &lt;em&gt;one&lt;/em&gt; interpretation of&#xA;the fiction underlying &lt;em&gt;Timeless&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In order to answer deep philosophical questions about &lt;a href=&#34;../rules/&#34;&gt;&lt;em&gt;Timeless&lt;/em&gt;&lt;/a&gt;,&#xA;I&amp;rsquo;ve put together some answers to questions nobody has yet asked.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-classic-enigmas&#34;&gt;The Classic Enigmas&lt;/h2&gt;&#xA;&lt;h3 id=&#34;timeless&#34;&gt;What Are The Timeless?&lt;/h3&gt;&#xA;&lt;p&gt;We do not know.  Some regard them as little more than psychic bundles of&#xA;memories and emotional scars, misfiled memoirs in the Akashic Records.&#xA;Others regard them as entities of the Psychic or even Causal Plane, able&#xA;to meld with the minds of mere mortals for a time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless Rules</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/rules/</link>
      <pubDate>Sat, 26 Apr 2025 06:20:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/rules/</guid>
      <description>&lt;p&gt;::: license&lt;/p&gt;&#xA;&lt;p&gt;Vespasian font © Feòrag NicBhrìde, available&#xA;&lt;a href=&#34;https://www.feorag.com/freestuff/vespasian.html&#34;&gt;here&lt;/a&gt;.&#xA;This typeface is licenced under the Creative Commons&#xA;Attribution-Non-Commercial-Share Alike 2.5 UK: Scotland, available at&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&#34;&gt;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introducing-timeless&#34;&gt;Introducing &lt;em&gt;Timeless&lt;/em&gt;&lt;/h2&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;https://www.frank-mitchell.com/posts/many-systems-one-campaign/&#34;&gt;&amp;ldquo;Many Systems, One Campaign&amp;rdquo;&lt;/a&gt; for more context.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-frame&#34;&gt;The Frame&lt;/h3&gt;&#xA;&lt;p&gt;Players portray the Timeless, reincarnating eternally across space and time.&#xA;In one incarnation they may fight a brutal war involving other Timeless.&#xA;Tn the next, they find they are the ones who start it.&lt;/p&gt;&#xA;&lt;p&gt;The Timeless break consensus reality to perform seeming miracles.&#xA;Mundane consensus reality, however, is a powerful force.&#xA;Every time the PCs break the laws of time, space, and parallel worlds,&#xA;the metaverse has a chance to fight back.  And it fights dirty.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless: Tales</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/tales/</link>
      <pubDate>Sat, 26 Apr 2025 06:20:25 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/tales/</guid>
      <description>&lt;p&gt;::: license&lt;/p&gt;&#xA;&lt;p&gt;Vespasian font © Feòrag NicBhrìde, available&#xA;&lt;a href=&#34;https://www.feorag.com/freestuff/vespasian.html&#34;&gt;here&lt;/a&gt;.&#xA;This typeface is licenced under the Creative Commons&#xA;Attribution-Non-Commercial-Share Alike 2.5 UK: Scotland, available at&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&#34;&gt;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;Please first read the rules for &lt;a href=&#34;../rules/&#34;&gt;&lt;em&gt;Timeless&lt;/em&gt;&lt;/a&gt;.  This document&#xA;only explains differences between those rules and this variant.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/327200/the-extraordinary-adventures-of-baron-munchausen-third-edition&#34;&gt;&lt;em&gt;The Extraordinary Adventures of Baron Munchhausen&lt;/em&gt;&lt;/a&gt;&#xA;inspired this variant of &lt;em&gt;Timeless&lt;/em&gt;.&#xA;It demonstrates how simple a (small-s) storytelling RPG could be.&lt;/p&gt;&#xA;&lt;p&gt;This variant of &lt;em&gt;Timeless&lt;/em&gt; uses elements of &lt;a href=&#34;https://fate-srd.com/fate-core/&#34;&gt;Fate Core&lt;/a&gt;, specifically the&#xA;&lt;a href=&#34;https://fate-srd.com/fate-core/fate-point-economy&#34;&gt;Fate Point Economy&lt;/a&gt;.&#xA;Please refer to linked pages for a more comprehensive explanation of&#xA;concepts and rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless: Timeless City</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/timeless-city/</link>
      <pubDate>Sat, 26 Apr 2025 06:17:14 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/timeless-city/</guid>
      <description>&lt;p&gt;::: license&lt;/p&gt;&#xA;&lt;p&gt;Vespasian font © Feòrag NicBhrìde, available&#xA;&lt;a href=&#34;https://www.feorag.com/freestuff/vespasian.html&#34;&gt;here&lt;/a&gt;.&#xA;This typeface is licenced under the Creative Commons&#xA;Attribution-Non-Commercial-Share Alike 2.5 UK: Scotland, available at&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&#34;&gt;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;Please first read the rules for &lt;a href=&#34;../rules/&#34;&gt;&lt;em&gt;Timeless&lt;/em&gt;&lt;/a&gt;.  This document&#xA;only explains differences between those rules and this variant.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Timeless City&amp;rdquo; owes a heavy debt to the &lt;em&gt;Fighting Fantasy&lt;/em&gt; books of&#xA;Steve Jackson (UK), and to official and unofficial sequels like&#xA;&lt;em&gt;Advanced Fighting Fantasy&lt;/em&gt; and &lt;em&gt;Troika!&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless: The Ladder</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/ladder/</link>
      <pubDate>Sat, 26 Apr 2025 06:14:30 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/ladder/</guid>
      <description>&lt;p&gt;::: license&lt;/p&gt;&#xA;&lt;p&gt;Vespasian font © Feòrag NicBhrìde, available&#xA;&lt;a href=&#34;https://www.feorag.com/freestuff/vespasian.html&#34;&gt;here&lt;/a&gt;.&#xA;This typeface is licenced under the Creative Commons&#xA;Attribution-Non-Commercial-Share Alike 2.5 UK: Scotland, available at&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&#34;&gt;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;Please first read the rules for &lt;a href=&#34;../rules/&#34;&gt;&lt;em&gt;Timeless&lt;/em&gt;&lt;/a&gt;.  This document&#xA;only explains differences between those rules and this variant.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;psyche-in-timeless-the-ladder&#34;&gt;Psyche in &lt;em&gt;Timeless: The Ladder&lt;/em&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;sheet.png&#34; alt=&#34;Timeless Character Sheet&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Psyche is divided into eight &lt;a href=&#34;#bending-reality-in-metasyste&#34;&gt;levels&lt;/a&gt;,&#xA;each representing the &lt;em&gt;average&lt;/em&gt; level at which the Timeless can bend reality.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bending-reality&#34;&gt;Bending Reality&lt;/h2&gt;&#xA;&lt;p&gt;The Referee determines the Difficulty Level (DL) of a proposed alteration to&#xA;reality according to the following chart:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timeless: D20 Edition</title>
      <link>https://frank-mitchell.com/rpg/game-designs/timeless/d20/</link>
      <pubDate>Sat, 26 Apr 2025 06:14:07 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/timeless/d20/</guid>
      <description>&lt;p&gt;::: license&lt;/p&gt;&#xA;&lt;p&gt;Vespasian font © Feòrag NicBhrìde, available&#xA;&lt;a href=&#34;https://www.feorag.com/freestuff/vespasian.html&#34;&gt;here&lt;/a&gt;.&#xA;This typeface is licenced under the Creative Commons&#xA;Attribution-Non-Commercial-Share Alike 2.5 UK: Scotland, available at&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&#34;&gt;http://creativecommons.org/licenses/by-nc-sa/2.5/scotland/&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;Please first read the rules for &lt;a href=&#34;../rules/&#34;&gt;&lt;em&gt;Timeless&lt;/em&gt;&lt;/a&gt;.  This document&#xA;only explains differences between those rules and this d20 variant.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;psyche-in-timeless-d20&#34;&gt;Psyche in &lt;em&gt;Timeless&lt;/em&gt; D20&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;sheet.png&#34; alt=&#34;Timeless d20 Character Sheet&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Psyche score represents the modifier to the twenty-sider die that the&#xA;player rolls when a Timeless attempts to &lt;em&gt;Bend Reality&lt;/em&gt;.&#xA;A newly created Timeless&amp;rsquo;s initial Psyche is +0.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Many Systems, One Campaign</title>
      <link>https://frank-mitchell.com/posts/many-systems-one-campaign/</link>
      <pubDate>Fri, 25 Apr 2025 15:45:37 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/many-systems-one-campaign/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Often I find myself sighing, &lt;em&gt;so many role-playing games, so little time.&lt;/em&gt;&#xA;After writing a much longer and more tedious essay, I&amp;rsquo;d like to explain ways&#xA;we can play multiple RPGs within the same campaign.&lt;/p&gt;&#xA;&lt;h3 id=&#34;why-do-it&#34;&gt;Why Do It?&lt;/h3&gt;&#xA;&lt;p&gt;So why entertain this strange idea of a multi-system role-playing campaign&#xA;at all?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;To sample other systems and settings.&lt;/li&gt;&#xA;&lt;li&gt;To try other genres ill-adapted to one’s favorite system.&lt;/li&gt;&#xA;&lt;li&gt;To capture the multiversal strangeness of Marvel’s &lt;em&gt;Exiles&lt;/em&gt;,&#xA;Moorcock’s Eternal Champion series, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prior-work&#34;&gt;Prior Work&lt;/h2&gt;&#xA;&lt;p&gt;Many games contain elements of what I&amp;rsquo;m searching for, but I will restrict&#xA;myself to three.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Astral Notes</title>
      <link>https://frank-mitchell.com/posts/astral-notes/</link>
      <pubDate>Thu, 24 Apr 2025 22:17:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/astral-notes/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;../many-systems-one-campaign/&#34;&gt;long article I didn&amp;rsquo;t post&lt;/a&gt; included some&#xA;notes on &lt;a href=&#34;../about-astral/&#34;&gt;Astral&lt;/a&gt;, an RPG I&amp;rsquo;ve talked about writing for&#xA;years but on which I&amp;rsquo;ve yet to make any progress.  I was considering&#xA;Astral as a unifying mechanic for multi-system play, but decided it ran&#xA;afoul of the Unifying System Paradox and possibly &lt;em&gt;Shadowrun&lt;/em&gt;&amp;rsquo;s Netrunner&#xA;problem.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-astral-report&#34;&gt;The Astral Report&lt;/h2&gt;&#xA;&lt;p&gt;Astral&amp;rsquo;s main problem is Feature Creep in the &amp;ldquo;magic&amp;rdquo; and &amp;ldquo;crafting&amp;rdquo; systems.&#xA;In brief, though, each character&amp;rsquo;s Astral Body would be defined by the&#xA;following abilities:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Depletion for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/depletion/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/depletion/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Depletion&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;depletion&#34;&gt;Depletion&lt;/h2&gt;&#xA;&lt;p&gt;Some magic items and artifacts have a &lt;strong&gt;Depletion&lt;/strong&gt;.  This represents&#xA;running out of charges, fuel, or some other energy source, or simple wear&#xA;and tear.  Instead of tracking those charges, roll a die to determine if&#xA;the previous use of the item was its last.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lesser Gods for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/article/lesser-gods/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/article/lesser-gods/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Lesser Gods&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;While the Nine receive the majority of worshipers, the people of the&#xA;Shadowdark Worlds appeal to lesser gods for their day-to-day needs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lesser-gods-for-daily-life&#34;&gt;Lesser Gods for Daily Life&lt;/h2&gt;&#xA;&lt;p&gt;Madeera the Covenant, Gede, or Ord handle huge sweeping concepts like law,&#xA;nature, or secrets, but most people need a god to help them through the day.&#xA;A fisherman or sea-traveling merchant needs a god of the see to hear his&#xA;prayers for safety.  A god of oaths and contracts must bear witness to a proud&#xA;man&amp;rsquo;s boast.  A god of the hearth or motherhood must see a busy stay-at-home&#xA;wife through her many, many chores.  To sooth their minds and salve their&#xA;consciences, and maybe for a bit of luck this day, a commoner may stop into&#xA;the shrine of a lesser god and donate some silver or sacrifice a small bird.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Item, Void Ship for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/magic-item/void-ship/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/magic-item/void-ship/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Magic Item, Void Ship&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;void-ship&#34;&gt;Void Ship&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A huge, roughly ellipsoidal vessel made of some pitted black rock.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Benefit.&lt;/strong&gt; By engaging the &lt;em&gt;Void Engine&lt;/em&gt;, the ship can travel through the&#xA;Void Between Worlds to any other physical world, or to another Void Zone.&#xA;Setting a destination is a DC 15 INT check &lt;em&gt;and&lt;/em&gt; requires knowing written&#xA;Voidspeech.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Deva for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/deva/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/deva/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Deva&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;deva&#34;&gt;Deva&lt;/h2&gt;&#xA;&lt;p&gt;Free-spirited divine beings tending to mortals in their own way.&lt;/p&gt;&#xA;&lt;p&gt;A female Deva is called a Devi.&lt;/p&gt;&#xA;&lt;h3 id=&#34;deva-lesser&#34;&gt;Deva, Lesser&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;A blue-skinned humanoid with silver wings&#xA;growing from the small of their back.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;AC&lt;/strong&gt; 15 (leather armor and shield),&#xA;&lt;strong&gt;HP&lt;/strong&gt; 25,&#xA;&lt;strong&gt;ATK&lt;/strong&gt; 1 spear +3 (1d6, magic) &lt;em&gt;or&lt;/em&gt; 1 transform,&#xA;&lt;strong&gt;MV&lt;/strong&gt; near &lt;em&gt;or&lt;/em&gt; near × 2 (fly),&#xA;&lt;strong&gt;S&lt;/strong&gt; +2, &lt;strong&gt;D&lt;/strong&gt; +2, &lt;strong&gt;C&lt;/strong&gt; +2, &lt;strong&gt;I&lt;/strong&gt; +3, &lt;strong&gt;W&lt;/strong&gt; +3, &lt;strong&gt;Ch&lt;/strong&gt; +4,&#xA;&lt;strong&gt;AL&lt;/strong&gt; L,&#xA;&lt;strong&gt;LV&lt;/strong&gt; 5&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Dwarf for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/dwarf/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/dwarf/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Dwarf&amp;rdquo; is an independent products published&#xA;under the Shadowdark RPG Third-Party License&#xA;and is not affiliated with The Arcane Library, LLC.&#xA;Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;dwarf&#34;&gt;Dwarf&lt;/h2&gt;&#xA;&lt;p&gt;Dwarfs are short (1.2 m/4 ft.), stocky humanoids who dwell mostly underground&#xA;in mines, caverns, and fine halls they have carved for themselves.  Dwarfs&#xA;are renowned as craftsmen and miners.  Through adaptation and training they&#xA;have learned to navigate the Shadowdark &lt;em&gt;almost&lt;/em&gt; as well as the monsters they&#xA;battle.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Elf for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/elf/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/elf/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Elf&amp;rdquo; is an independent products published&#xA;under the Shadowdark RPG Third-Party License&#xA;and is not affiliated with The Arcane Library, LLC.&#xA;Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;elf&#34;&gt;Elf&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Ethereal, ageless fey-people infused with ancient magic.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;elf-knight&#34;&gt;Elf Knight&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;An Elf clad in shining plate armor, carrying a shield and a sword.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;AC&lt;/strong&gt; 17 (plate and shield),&#xA;&lt;strong&gt;HP&lt;/strong&gt; 18,&#xA;&lt;strong&gt;ATK&lt;/strong&gt; 1 longsword +2 (1d8),&#xA;&lt;strong&gt;MV&lt;/strong&gt; near,&#xA;&lt;strong&gt;S&lt;/strong&gt; +2, &lt;strong&gt;D&lt;/strong&gt; +2, &lt;strong&gt;C&lt;/strong&gt; +2, &lt;strong&gt;I&lt;/strong&gt; +1, &lt;strong&gt;W&lt;/strong&gt; +1, &lt;strong&gt;Ch&lt;/strong&gt; +2,&#xA;&lt;strong&gt;AL&lt;/strong&gt; L,&#xA;&lt;strong&gt;LV&lt;/strong&gt; 4&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Empyrean for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/empyrean/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/empyrean/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Empyrean&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;empyrean&#34;&gt;Empyrean&lt;/h2&gt;&#xA;&lt;p&gt;Empyreans are divinities from another world at war with Cosmic Chaos.&#xA;They send emissaries to other worlds who have yet to succumb to Chaos&#xA;in what they call the &amp;ldquo;Cosmic Struggle&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Guardians&lt;/strong&gt; protect temples and other holy sites.&#xA;&lt;strong&gt;Messengers&lt;/strong&gt; carry the word of Empyrea to mortals.&#xA;&lt;strong&gt;Luminaries&lt;/strong&gt; assist humans, sometimes with object lessons.&#xA;&lt;strong&gt;Archons&lt;/strong&gt; ensure the proper working of natural law.&#xA;&lt;strong&gt;Aeons&lt;/strong&gt; command the others and maintain natural law.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Faction of Balance for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/faction-of-balance/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/faction-of-balance/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Faction of Balance&amp;rdquo; is an independent products published&#xA;under the Shadowdark RPG Third-Party License&#xA;and is not affiliated with The Arcane Library, LLC.&#xA;Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The &amp;ldquo;Cosmic Struggle&amp;rdquo; as the &lt;a href=&#34;../empyrean/&#34;&gt;Empyreans&lt;/a&gt; call it has driven&#xA;many beings in many worlds to ally with the &amp;ldquo;Cosmic Balance&amp;rdquo;&#xA;against both Cosmic Law and Cosmic Chaos.  Grass-roots organization comes&#xA;from Temples of Balance, where masters of martial arts and spy-craft teach&#xA;ordinary mortals their arts.  Above them are the mysterious Handlers,&#xA;who receive intelligence and issue orders to each school or spy cell.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Lemurian for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/lemurian/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/lemurian/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Lemurian&amp;rdquo; is an independent products published&#xA;under the Shadowdark RPG Third-Party License&#xA;and is not affiliated with The Arcane Library, LLC.&#xA;Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Lemurians ply the seas between worlds, trading wares from across the&#xA;multiverse.  Survivors of a sunken continent, Lemurians are known for&#xA;their flashy fashion sense, their close-knit cultural ties, their&#xA;language, and their &amp;ldquo;Lemurian Way&amp;rdquo;, a quasi-religious code of honor&#xA;few if any Lemurian would violate.  The Lemurian Way suits a culture&#xA;of merchants and sailors who are warriors only when unavoidable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Void Wraith for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/void-wraith/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/void-wraith/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Void Wraith&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;void-wraith&#34;&gt;Void Wraith&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;An unholy hybrid of corpse and machine in black robes,&#xA;wielding a glowing black sword.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Void Wraiths enforce &lt;a href=&#34;../../monster/void-raider/&#34;&gt;Voidborn&lt;/a&gt; laws, such as they are, and the whims&#xA;of the &lt;a href=&#34;../../monster/void-king/#void-king&#34;&gt;Void King&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;AC&lt;/strong&gt; 16 (adamantine plate armor),&#xA;&lt;strong&gt;HP&lt;/strong&gt; 53,&#xA;&lt;strong&gt;ATK&lt;/strong&gt; 3 adamantine greatsword +9 (1d12+1d6)&#xA;&lt;em&gt;or&lt;/em&gt; 1 raycaster pistol (far) +7 (1d10)&#xA;&lt;em&gt;or&lt;/em&gt; 1 smite +9 (2d12+2d6),&#xA;&lt;strong&gt;MV&lt;/strong&gt; near × 2 (fly),&#xA;&lt;strong&gt;S&lt;/strong&gt; +4, &lt;strong&gt;D&lt;/strong&gt; +2, &lt;strong&gt;C&lt;/strong&gt; +4, &lt;strong&gt;I&lt;/strong&gt; +4, &lt;strong&gt;W&lt;/strong&gt; +4, &lt;strong&gt;Ch&lt;/strong&gt; +4,&#xA;&lt;strong&gt;AL&lt;/strong&gt; C,&#xA;&lt;strong&gt;LV&lt;/strong&gt; 11&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Mysteries of Saint Terragnis for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/article/saint-terragnis/</link>
      <pubDate>Thu, 24 Apr 2025 02:01:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/article/saint-terragnis/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;The Mysteries of Saint Terragnis&amp;rdquo; is an independent product published under&#xA;the Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-saints-enigma&#34;&gt;The Saint&amp;rsquo;s Enigma&lt;/h2&gt;&#xA;&lt;p&gt;Those who travel the worlds find Saint Terragnis a mystery.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Unlike the other Nine Gods, or even the lesser gods, she was born human,&#xA;within human history.  Yet if the tales of Saint Terragnis were &lt;em&gt;all&lt;/em&gt;&#xA;true, she would have lived a dozen human lifetimes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Item, Portal Stone for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/magic-item/portal-stone/</link>
      <pubDate>Wed, 23 Apr 2025 06:02:16 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/magic-item/portal-stone/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Magic Item, Portal Stone&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;portal-stone&#34;&gt;Portal Stone&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A plain, off-white oblong standing stone atop a plinth of similar stone.&#xA;One side is blank, the other side is covered in Builder Glyphs.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Benefit.&lt;/strong&gt; When used properly a doorway opens in the stone, through which&#xA;you and your party walks to enter another plane or world.&#xA;(See the spell &lt;em&gt;Plane Shift&lt;/em&gt;.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Psyche for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/psyche/</link>
      <pubDate>Wed, 23 Apr 2025 06:02:16 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/psyche/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;House Rule, Psyche&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Psyche represents a character&amp;rsquo;s total psychic strength.&#xA;An ancient artifact may require a &lt;a href=&#34;#psyche-check&#34;&gt;Psyche Check&lt;/a&gt; to activate it,&#xA;and some eldritch beings force a &lt;a href=&#34;#psyche-check&#34;&gt;Psyche Check&lt;/a&gt; to oppose their powers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;psyche-modifier&#34;&gt;Psyche Modifier&lt;/h2&gt;&#xA;&lt;p&gt;To determine your &lt;dfn&gt;Psyche Modifier&lt;/dfn&gt;,&#xA;add your INT Modifier, WIS Modifier, and CHA Modifier together.&#xA;The total is your Psyche Modifier, sometimes abbreviated PSY.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Origins of Humanoids for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/article/origins/</link>
      <pubDate>Wed, 23 Apr 2025 04:45:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/article/origins/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;The Origins of Humanoids&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Many have wondered if and how the various humanoid species are related.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-elf-hypothesis&#34;&gt;The Elf Hypothesis&lt;/h2&gt;&#xA;&lt;p&gt;Elvish tradition claims they gained sapience first, followed by humans and&#xA;Dwarfs.  Others emerged as blends or mutations of those three species.&#xA;Traditionally, Elves do not recognize the Elvish or Orcish lineage of&#xA;Half-Elves or Half-Orcs, considering them merely variant humans.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Primordial Age for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/article/primordial-age/</link>
      <pubDate>Wed, 23 Apr 2025 04:42:20 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/article/primordial-age/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;The Primordial Age&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;And so the Primordial Age ended, and the gods fled. In their place rose&#xA;mortals, and they scattered the earth with their shining kingdoms and&#xA;lost ruins&amp;hellip;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is a speculative timeline of the Primordial Age.&lt;/p&gt;&#xA;&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;p&gt;Relative to the wider multiverse, time in the Shadowdark worlds passes&#xA;more slowly and more irregularly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Item, Raycaster for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/magic-item/raycaster/</link>
      <pubDate>Tue, 22 Apr 2025 18:36:34 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/magic-item/raycaster/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Magic Item, Raycaster&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;raycaster-energy-crystal&#34;&gt;Raycaster Energy Crystal&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A glowing crystalline sphere, emitting a rainbow of colors.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Benefit.&lt;/strong&gt; Provides energy to a Raycaster.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Benefit.&lt;/strong&gt; May be thrown up to Near range; when it shatters, does 3d6 points&#xA;of damage.&lt;/p&gt;&#xA;&lt;h2 id=&#34;raycaster-pistol&#34;&gt;Raycaster Pistol&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A short brass metal rod tipped with an amethyst gem at one end and&#xA;&lt;a href=&#34;#raycaster-energy-crystal&#34;&gt;a glowing crystalline sphere&lt;/a&gt; at the other.&#xA;A handle with a brass stud projects from the sphere end.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Human-Centric World for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/human-centric/</link>
      <pubDate>Tue, 22 Apr 2025 09:11:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/human-centric/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;A Human-Centric World&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Standard fantasy role-playing games present a smorgasbord of player&#xA;ancestries from standard elves and dwarves to cat people and shark people.&#xA;Some GMs and players may hark back to simpler game and literary roots.&#xA;These rules are for those GMs and players.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alternate Alignments for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/alignment/</link>
      <pubDate>Tue, 22 Apr 2025 09:11:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/alignment/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Alternate Alignments&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The GM may want to consider other alignment systems in their &lt;em&gt;Shadowdark&lt;/em&gt;&#xA;games.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;For a grimdark world &lt;a href=&#34;#no-aligment&#34;&gt;no alignment&lt;/a&gt; might suit the&#xA;ethos better.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;For my setting where &amp;ldquo;True Neutrals&amp;rdquo; actively oppose Law and Chaos,&#xA;&lt;a href=&#34;#four-alignments&#34;&gt;four alignments&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Other settings may prefer fewer than the standard three, or possibly more,&#xA;or likely none.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Half-Orc Warrior Class for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/class/half-orc-warrior/</link>
      <pubDate>Tue, 22 Apr 2025 09:05:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/class/half-orc-warrior/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Half-Orc Warrior Class&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;half-orc-warrior&#34;&gt;Half-Orc Warrior&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Hulking warriors whose brutish looks belie their keen intuition.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Weapons.&lt;/strong&gt; All weapons.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Armor.&lt;/strong&gt; All armor and shields.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hit Points.&lt;/strong&gt; 1d8 per level.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Languages.&lt;/strong&gt; You speak Common and Orcish.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Insight.&lt;/strong&gt; When assessing the behavior and motives of other beings,&#xA;you make WIS Checks with Advantage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Half-Elf Class for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/class/half-elf/</link>
      <pubDate>Tue, 22 Apr 2025 07:35:31 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/class/half-elf/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Half-Elf Class&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;half-elf&#34;&gt;Half Elf&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Children of Elf and human who can do anything a human can.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Base Class.&lt;/strong&gt; Choose a class available to humans.  Your Weapons, Armor,&#xA;Hit Points, Talent Table, and other class features derive from this class.&#xA;When a feature in the Base Class conflicts with this class, use the version&#xA;in this class.  You do not choose a &lt;a href=&#34;../../house-rule/human-centric/#specialties&#34;&gt;Specialty&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elf Noble Class for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/class/elf-noble/</link>
      <pubDate>Tue, 22 Apr 2025 07:34:59 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/class/elf-noble/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Elf Noble Class&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;elf-noble&#34;&gt;Elf Noble&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Equally adept at fighting and spellcraft, yet most comfortable in the&#xA;wilderness.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Weapons.&lt;/strong&gt; Club, crossbow, dagger, longbow, longsword, shortbow, shortsword,&#xA;spear, staff.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Armor.&lt;/strong&gt; All armor and shields.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hit Points.&lt;/strong&gt; 1d6&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Languages.&lt;/strong&gt; You speak Common and Elvish.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Feyblood.&lt;/strong&gt; You have Advantage on DEX checks while in the natural wilds.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Languages for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/languages/</link>
      <pubDate>Fri, 18 Apr 2025 17:25:12 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/languages/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Languages&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;revised-language-rules&#34;&gt;Revised Language Rules&lt;/h2&gt;&#xA;&lt;p&gt;These house rules benefit settings with more languages than in the&#xA;&lt;em&gt;Shadowdark&lt;/em&gt; rules (p 32).  In particular, each human culture or civilization&#xA;would have its own language, as in the real world.  The GM must not&#xA;get carried away, however; more than a dozen or so Common languages and another&#xA;dozen Rare and Extinct languages becomes unwieldy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Item, Elysium Grimoires for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/magic-item/elysium-grimoires/</link>
      <pubDate>Fri, 18 Apr 2025 05:40:18 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/magic-item/elysium-grimoires/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Magic Item, Elysium Grimoires&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-elysium-codex&#34;&gt;The Elysium Codex&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A blue, leather-bound tome with unrecognizable writing embossed on the cover.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the Elysian Language, the cover and title page read,&#xA;&amp;ldquo;Introduction to Sorcery, volume 1&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Benefit.&lt;/strong&gt; Anyone who reads this tome learns the Elysian language.&#xA;If the reader is a Wizard, they also gain one level.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Item, Benediction Supernal for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/magic-item/benediction-supernal/</link>
      <pubDate>Fri, 18 Apr 2025 00:05:04 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/magic-item/benediction-supernal/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Magic Item, Benediction Supernal&amp;rdquo; is an independent product published under&#xA;the Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-benediction-supernal&#34;&gt;The Benediction Supernal&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A white, leather-bound tome with a winged angel embossed on the cover.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Benefit.&lt;/strong&gt; A lawful being who reads this tome gains a level and learns the&#xA;Celestial language.&lt;/p&gt;&#xA;&lt;p&gt;A chaotic being who reads this book must pass a DC 18 Wisdom check or lose&#xA;one level.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The &#39;Verse for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/article/the-verse/</link>
      <pubDate>Thu, 17 Apr 2025 16:19:22 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/article/the-verse/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;The &amp;lsquo;Verse&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;These works rely on the following cosmology, called the Uncounted Worlds.&lt;/p&gt;&#xA;&lt;p&gt;In the diagram below, every box represents a plane or world; every box cluster&#xA;stands in for an unbounded set of worlds.  Each line represents the &lt;em&gt;ability&lt;/em&gt;&#xA;to contact or travel into another world, with arrows indicating the direction&#xA;in which beings usually flow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Void Raider Compact for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/article/void-compact/</link>
      <pubDate>Wed, 16 Apr 2025 17:44:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/article/void-compact/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Void Raider Compact&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with&#xA;The Arcane Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;void-raider-articles-of-agreement&#34;&gt;Void Raider Articles of Agreement&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;translated from Void Glyphs by an anonymous sage&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;All hail the Void King!  All glory to the Void King!&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;By birth into this tribe, we solemnly agree to abide by the terms of&#xA;these articles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hard Alignments Gods for D&amp;D 5</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/dnd-hard-alignment-gods/</link>
      <pubDate>Mon, 14 Apr 2025 17:09:44 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/dnd-hard-alignment-gods/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;../dnd-hard-alignment/&#34;&gt;Hard Alignment&lt;/a&gt; system reduces Alignment to&#xA;four: &lt;strong&gt;Lawful&lt;/strong&gt;, &lt;strong&gt;Unaligned&lt;/strong&gt;, &lt;strong&gt;True Neutral&lt;/strong&gt;, and &lt;strong&gt;Chaotic&lt;/strong&gt;.&#xA;Most deities use the nine-alignment system introduced in Advanced D&amp;amp;D.&#xA;Adapting deities to the new system may prove challenging.&lt;/p&gt;&#xA;&lt;p&gt;Bypassing that, I propose a system based on the simple alignments, and&#xA;another with a set of multiversal &amp;ldquo;lords&amp;rdquo; of each Alignment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;powers-that-be&#34;&gt;Powers That Be&lt;/h2&gt;&#xA;&lt;p&gt;A Cleric may dedicate themselves to the unnamed Powers of their Alignment.&#xA;Below are the alternate names for the Powers of each Alignment and their&#xA;primary Domains.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Silver Economy for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/silver/</link>
      <pubDate>Sat, 12 Apr 2025 22:20:04 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/silver/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;A Silver Economy&amp;rdquo; is an independent product published under&#xA;the Shadowdark RPG Third-Party License&#xA;and is not affiliated with The Arcane Library, LLC.&#xA;Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This &lt;em&gt;entire discussion&lt;/em&gt; replaces the entry for &lt;strong&gt;Coin&lt;/strong&gt; (&lt;em&gt;Shadowdark&lt;/em&gt; p 34).&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-silver-standard&#34;&gt;The Silver Standard&lt;/h2&gt;&#xA;&lt;p&gt;In this house rule, one gold &lt;strong&gt;crown&lt;/strong&gt; is worth 100 silvers.&#xA;Read &lt;a href=&#34;https://frank-mitchell.com/rpg/money-in-rpgs/&#34;&gt;&amp;ldquo;The Ecstasy of Gold: Money in RPGs&amp;rdquo;&lt;/a&gt; for the exact reasons why.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;gc&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;sp&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;cp&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1 gold Guilder (G) =&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1 gold crown (gc) ≈&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1 silver piece (sp) =&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1/100&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;10&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;1 copper piece (cp) =&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1/1000&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1/10&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Silver pieces may be abbreviated &lt;strong&gt;s&lt;/strong&gt;, and copper pieces &lt;strong&gt;p&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Awe for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/awe/</link>
      <pubDate>Sat, 12 Apr 2025 18:45:24 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/awe/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Awe for Shadowdark&amp;rdquo; is an independent product published under the Shadowdark RPG&#xA;Third-Party License and is not affiliated with The Arcane Library, LLC.&#xA;Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Those who plunge into the Shadowdark may or may not be religious.&#xA;All mortals must bend the knee, however, when they confront the truly divine.&lt;/p&gt;&#xA;&lt;h2 id=&#34;awe-check&#34;&gt;Awe Check&lt;/h2&gt;&#xA;&lt;p&gt;When the GM calls for an Awe Check, they will specify the&#xA;&lt;a href=&#34;#difficulty-class&#34;&gt;Difficulty Class&lt;/a&gt; (DC).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Horror for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/house-rule/horror/</link>
      <pubDate>Sat, 12 Apr 2025 18:45:24 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/house-rule/horror/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Horror for Shadowdark&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with The Arcane&#xA;Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Those who plunge into the Shadowdark may not be wholly sane, but they normally&#xA;do not bolt or quail at the horrors down below.  Yet some sights can unhinge&#xA;even these jaded explorers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;horror-check&#34;&gt;Horror Check&lt;/h2&gt;&#xA;&lt;p&gt;When player characters first encounter something horrific,&#xA;the GM will call for a Horror Check with a specific&#xA;&lt;a href=&#34;#difficulty-class&#34;&gt;Difficulty Class&lt;/a&gt; (DC).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, First One for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/first-one/</link>
      <pubDate>Wed, 09 Apr 2025 07:10:07 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/first-one/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, First One&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with The Arcane&#xA;Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Monsters for my H. P. Lovecraft pastiche (or rip-off).&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-one&#34;&gt;First One&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Star headed, radially symmetrical creatures with five manipulators, five&#xA;locomotors, and five wings.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;AC&lt;/strong&gt; 15,&#xA;&lt;strong&gt;HP&lt;/strong&gt; 45,&#xA;&lt;strong&gt;ATK&lt;/strong&gt; 5 arms (1d3 &lt;em&gt;or&lt;/em&gt; weapon) &lt;em&gt;or&lt;/em&gt; 2 kicks (1d4),&#xA;&lt;strong&gt;MV&lt;/strong&gt; near &lt;em&gt;or&lt;/em&gt; near × 2 (wings),&#xA;&lt;strong&gt;S&lt;/strong&gt; +4, &lt;strong&gt;D&lt;/strong&gt; +4, &lt;strong&gt;C&lt;/strong&gt; +3, &lt;strong&gt;I&lt;/strong&gt; +4, &lt;strong&gt;W&lt;/strong&gt; +2, &lt;strong&gt;Ch&lt;/strong&gt; +2,&#xA;&lt;strong&gt;AL&lt;/strong&gt; N,&#xA;&lt;strong&gt;LV&lt;/strong&gt; 6&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Outer One for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/outer-one/</link>
      <pubDate>Wed, 09 Apr 2025 07:10:07 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/outer-one/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Outer One&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with The Arcane&#xA;Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Monsters for my H. P. Lovecraft pastiche (or rip-off).&lt;/p&gt;&#xA;&lt;h2 id=&#34;outer-one&#34;&gt;Outer One&lt;/h2&gt;&#xA;&lt;p&gt;All Outer Ones have the following traits:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Horror.&lt;/strong&gt; DC 12 &lt;a href=&#34;../../house-rule/horror/&#34;&gt;Horror Check&lt;/a&gt; upon first seeing an Outer One.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Resistant to Missiles.&lt;/strong&gt; Non-magical arrows, bolts, and bullets&#xA;do minimum damage. On a critical hit they do double minimum damage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Xothian for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/xothian/</link>
      <pubDate>Wed, 09 Apr 2025 07:10:07 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/xothian/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Xothian&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with The Arcane&#xA;Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Monsters for my H. P. Lovecraft pastiche (or rip-off).&lt;/p&gt;&#xA;&lt;h2 id=&#34;xothian&#34;&gt;Xothian&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A giant with a vaguely humanoid body and a cephalopodean head on top.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;AC&lt;/strong&gt; 15,&#xA;&lt;strong&gt;HP&lt;/strong&gt; 84,&#xA;&lt;strong&gt;ATK&lt;/strong&gt; 7 tentacles (1d12)&#xA;&lt;strong&gt;MV&lt;/strong&gt; near &lt;em&gt;or&lt;/em&gt; near × 2 (wings),&#xA;&lt;strong&gt;S&lt;/strong&gt; +5, &lt;strong&gt;D&lt;/strong&gt; +0, &lt;strong&gt;C&lt;/strong&gt; +3, &lt;strong&gt;I&lt;/strong&gt; +2, &lt;strong&gt;W&lt;/strong&gt; +2, &lt;strong&gt;Ch&lt;/strong&gt; -4,&#xA;&lt;strong&gt;AL&lt;/strong&gt; C,&#xA;&lt;strong&gt;LV&lt;/strong&gt; 14&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Astral Warden for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/astral-warden/</link>
      <pubDate>Tue, 25 Mar 2025 16:58:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/astral-warden/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Astral Warden&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with The Arcane&#xA;Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;astral-warden&#34;&gt;Astral Warden&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;A tall, gaunt, pale figure with primitive clothes and a skeletal aspect.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Astral Wardens reside primarily in the Astral Plane.&#xA;In a corporeal world, Astral Wardens gather in &amp;ldquo;creche villages&amp;rdquo; to conceive&#xA;and raise young.  The Astral Plane stops all biological processes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monster, Void Raider for Shadowdark</title>
      <link>https://frank-mitchell.com/rpg/shadowdark/monster/void-raider/</link>
      <pubDate>Tue, 25 Mar 2025 16:58:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/shadowdark/monster/void-raider/</guid>
      <description>&lt;div class=&#34;license&#34;&gt;&#xA;&lt;p&gt;&amp;ldquo;Monster, Void Raider&amp;rdquo; is an independent product published under the&#xA;Shadowdark RPG Third-Party License and is not affiliated with The Arcane&#xA;Library, LLC. Shadowdark RPG © 2023 The Arcane Library, LLC.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;void-raider&#34;&gt;Void Raider&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Pale, towering humanoids with surgically sealed ears and nostrils,&#xA;brass-rimmed lenses for eyes, and mouths shut tight.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A raiding party consists of 2d6 &lt;a href=&#34;#void-warrior&#34;&gt;Void Warriors&lt;/a&gt;,&#xA;one &lt;a href=&#34;#void-lord&#34;&gt;Void Lord&lt;/a&gt;,&#xA;one &lt;a href=&#34;#void-pilot&#34;&gt;Void Pilot&lt;/a&gt;,&#xA;one &lt;a href=&#34;#void-arcanist&#34;&gt;Void Arcanist&lt;/a&gt; or &lt;a href=&#34;#void-psion&#34;&gt;Void Psion&lt;/a&gt;,&#xA;1d3 &lt;a href=&#34;#void-tech&#34;&gt;Void Techs&lt;/a&gt; (roll 1d6 for each: 1-3 Wartech, 4-5 Biotech, 6 Necrotech)&#xA;and 1d3 &lt;a href=&#34;#void-revenant&#34;&gt;Void Revenants&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Realistic Banking in a Fantasy World</title>
      <link>https://frank-mitchell.com/posts/fantasy-banking-rules/</link>
      <pubDate>Fri, 14 Feb 2025 14:25:32 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/fantasy-banking-rules/</guid>
      <description>&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;p&gt;CHANGED 2025-02-15: Small grammatical fixes for clarity.&lt;/p&gt;&#xA;&lt;p&gt;:::&lt;/p&gt;&#xA;&lt;p&gt;These are some rules I threw together for &amp;ldquo;realistic&amp;rdquo; banking in a fantasy&#xA;world.  They&amp;rsquo;re written primarily for &lt;em&gt;Clash of Steel&lt;/em&gt; and the assumption&#xA;that temples (or temple moneychangers) act as banks, but they should be&#xA;easy to adapt to any system.  Enjoy!&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;realistic-banking-in-a-fantasy-world&#34;&gt;Realistic Banking in a Fantasy World&lt;/h2&gt;&#xA;&lt;p&gt;Quoting &lt;em&gt;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/505035/clash-of-steel-2nd-edition&#34;&gt;Clash of Steel&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Adventurers will amass silver coins and spend them on training and the honing&#xA;of their skills, as well as weapons and more mundane items. Their savings&#xA;should be lodged in a temple, with its god passing knowledge of this wealth&#xA;to its other temples, allowing PCs to withdraw funds from any of that god’s&#xA;temples.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Adventurers&#39; Guild Revisited</title>
      <link>https://frank-mitchell.com/posts/adventurers-guild-revisited/</link>
      <pubDate>Wed, 12 Feb 2025 00:27:29 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/adventurers-guild-revisited/</guid>
      <description>&lt;h2 id=&#34;the-guild-structure&#34;&gt;The Guild Structure&lt;/h2&gt;&#xA;&lt;p&gt;One of my fellow gamers called into question using medieval craft and merchant&#xA;guilds as a model for my &lt;a href=&#34;../adventurers-guild/&#34;&gt;adventurers&amp;rsquo; guild&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For context, the Adventurers&amp;rsquo; Guild I first proposed would be placed in a&#xA;region I developed for the &lt;a href=&#34;../g75-2-region/&#34;&gt;Gygax 75 Challenge&lt;/a&gt;, specifically the town of&#xA;Knight&amp;rsquo;s Haven.  Earl Gareth, ruler of Bergarus Vale and founder of Knight&amp;rsquo;s&#xA;Haven, used to be an adventurer himself, and wanted to harness the might&#xA;of adventurers without creating an army.  (Neither the King nor the neighboring&#xA;Eastern Hegemony would take kindly to an army of experienced fighters, wizards,&#xA;clerics, and thieves.)  He therefore created an Adventuer&amp;rsquo;s Guild to help&#xA;pacify and civilize the region without raising any hackles.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fantasy Banking</title>
      <link>https://frank-mitchell.com/posts/fantasy-banking/</link>
      <pubDate>Sun, 09 Feb 2025 13:46:26 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/fantasy-banking/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This essay asks a simple question: in fantasy tabletop role-playing games,&#xA;how do characters carry their money?&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-encumbrance-problem&#34;&gt;The Encumbrance Problem&lt;/h3&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll only link to the&#xA;&lt;a href=&#34;https://www.d20srd.org/srd/carryingCapacity.htm&#34;&gt;D&amp;amp;D 3.5 encumbrance rules&lt;/a&gt;.&#xA;D&amp;amp;D 5e is somwhat simpler (and optional): character&amp;rsquo;s can carry their&#xA;Strength score × 15 lb.  Other games rate encumbrance as number of&#xA;&amp;ldquo;items&amp;rdquo;.  In the &lt;em&gt;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/505035/clash-of-steel-2nd-edition&#34;&gt;Clash of Steel&lt;/a&gt;&lt;/em&gt; RPG a character can carry 8 + their&#xA;MIGHT score in &amp;ldquo;items&amp;rdquo;.  (Starting character MIGHT ranges from 1 to 4.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Barbaric!&#39; Character Generation</title>
      <link>https://frank-mitchell.com/posts/barbaric-chargen/</link>
      <pubDate>Tue, 04 Feb 2025 08:04:35 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/barbaric-chargen/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Having just covered &lt;a href=&#34;../clash-of-steel-chargen&#34;&gt;&lt;em&gt;Clash of Steel&lt;/em&gt;&lt;/a&gt;, I realized&#xA;that I never created a character for &lt;a href=&#34;https://www.drivethrurpg.com/en/product/450864/barbaric-2nd-edition&#34;&gt;&lt;em&gt;Barbaric!&lt;/em&gt;&lt;/a&gt;.&#xA;Now in its second edition, &lt;em&gt;Barbaric!&lt;/em&gt; shares the same&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/cepheus-quantum/&#34;&gt;Quantum Engine&lt;/a&gt;&#xA;base system as &lt;a href=&#34;../cepheus-atom/&#34;&gt;&lt;em&gt;Cepheus Atom&lt;/em&gt;&lt;/a&gt; and &lt;a href=&#34;https://www.drivethrurpg.com/en/publisher/9571/stellagama-publishing/category/40913/quantum-engine&#34;&gt;other games&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;making-characters&#34;&gt;Making Characters&lt;/h2&gt;&#xA;&lt;p&gt;The basic steps of character generation are as follows:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Start with a character concept.&lt;/li&gt;&#xA;&lt;li&gt;Distribute 5 points among six &lt;strong&gt;Skills&lt;/strong&gt;, none higher than 3:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Combat:&lt;/em&gt; attacking and defending&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Craft:&lt;/em&gt; expertise in a variety of tasks&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Lore:&lt;/em&gt; knowledge about the world and magic&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Physical:&lt;/em&gt; strength, agility, health&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Social:&lt;/em&gt; interpersonal interaction&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Stealth:&lt;/em&gt; sneaking and skulduggery&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Choose an &lt;strong&gt;Archetype&lt;/strong&gt; (pp 12-13).&lt;/li&gt;&#xA;&lt;li&gt;Calculate &lt;strong&gt;Stamina:&lt;/strong&gt; 14 + 3 × &lt;em&gt;Physical&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Calculate &lt;strong&gt;Defense:&lt;/strong&gt; 8 + ½ &lt;em&gt;Combat&lt;/em&gt; (rounded up)&lt;/li&gt;&#xA;&lt;li&gt;Record starting &lt;strong&gt;Equipment&lt;/strong&gt;:&#xA;food and water for 3 days, a backpack, a waterskin, a knife, and&#xA;3d6×10 gold coins worth of items (pp 18-21).&lt;/li&gt;&#xA;&lt;li&gt;If &lt;em&gt;Combat&lt;/em&gt; is greater than 1, choose (&lt;em&gt;Combat&lt;/em&gt;-1) &lt;strong&gt;Combat Moves&lt;/strong&gt;&#xA;(pp 14-15).&lt;/li&gt;&#xA;&lt;li&gt;If &lt;em&gt;Lore&lt;/em&gt; is greater than 0, choose (&lt;em&gt;Lore&lt;/em&gt;) &lt;strong&gt;Spells&lt;/strong&gt; (pp 37-39).&lt;/li&gt;&#xA;&lt;li&gt;Decide on the character&amp;rsquo;s &lt;strong&gt;Name&lt;/strong&gt; and &lt;strong&gt;Appearance&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Jot down notes on the character&amp;rsquo;s motivation and personality.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Rather than walk through all these steps I&amp;rsquo;m just going to show the final&#xA;results.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clash of Steel Character Generation</title>
      <link>https://frank-mitchell.com/posts/clash-of-steel-chargen/</link>
      <pubDate>Mon, 03 Feb 2025 10:27:03 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/clash-of-steel-chargen/</guid>
      <description>&lt;p&gt;Zozer Games recently released the second edition of their RPG&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/505035/clash-of-steel-2nd-edition&#34;&gt;&lt;em&gt;Clash of Steel&lt;/em&gt;&lt;/a&gt;.&#xA;It&amp;rsquo;s been on my radar for a while.  I bought the first edition but didn&amp;rsquo;t&#xA;read too far in. (I noticed some characteristics were renamed in this edition.)&lt;/p&gt;&#xA;&lt;p&gt;Having finally read&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; this second edition cover to cover, I&amp;rsquo;m ready&#xA;to at least create some characters, and maybe compare it to the other&#xA;sword-and-sorcery games I&amp;rsquo;ve read.&lt;/p&gt;&#xA;&lt;h2 id=&#34;making-characters&#34;&gt;Making Characters&lt;/h2&gt;&#xA;&lt;p&gt;The procedure for creating a general adventurer differs from that of a&#xA;Priest or a Sorcerer.  Priests and Sorcerers are discouraged as regular player&#xA;character adventurers, but I&amp;rsquo;m going to try one of each anyway.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Alien Tables 3: Dragon and Beyond</title>
      <link>https://frank-mitchell.com/posts/random-alien-tables-3/</link>
      <pubDate>Sat, 01 Feb 2025 08:51:27 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/random-alien-tables-3/</guid>
      <description>&lt;p&gt;To create alien species for a&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-confederation-space/&#34;&gt;proposed ongoing science fiction RPG&lt;/a&gt;&#xA;I &lt;a href=&#34;../random-alien-tables/&#34;&gt;tried three alien generators&lt;/a&gt;&#xA;then &lt;a href=&#34;../random-alien-tables-2/&#34;&gt;&amp;ldquo;uplifted&amp;rdquo; randomly generated alien animals&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Honestly I was relatively content with the &amp;ldquo;Uplift&amp;rdquo; method of random alien&#xA;generation.  However, recently someone referred me to a &lt;em&gt;Dragon&lt;/em&gt; magazine&#xA;article from 1981.  I thought I&amp;rsquo;d try it out for comparison, then conclude&#xA;this accidental series with some thoughts on procedurally generated alien&#xA;species in tabletop RPGs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;species-4-make-your-own-aliens-dragon-51-1981&#34;&gt;Species 4, &amp;ldquo;Make Your Own Aliens&amp;rdquo;, &lt;em&gt;Dragon&lt;/em&gt; 51 (1981)&lt;/h2&gt;&#xA;&lt;p&gt;Roger E. Moore begins &amp;ldquo;Make Your Own Aliens&amp;rdquo; as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Teufel Notes</title>
      <link>https://frank-mitchell.com/projects/far-future/teufel-notes/</link>
      <pubDate>Sun, 24 Nov 2024 06:24:47 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/teufel-notes/</guid>
      <description>&lt;p&gt;&lt;em&gt;Related Projects&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://frank-mitchell.com/projects/far-future/expobj/&#34;&gt;Exported Objects (ExO)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://frank-mitchell.com/projects/far-future/mstring/&#34;&gt;MString&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://frank-mitchell.com/projects/far-future/typelib/&#34;&gt;TypeLib&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://frank-mitchell.com/projects/far-future/xtidl/&#34;&gt;XTIDL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These are random notes on my pie-in-the-sky language project, Teufel, including&#xA;excerpts from other blog posts.&lt;/p&gt;&#xA;&lt;p&gt;Someday, I hope, I&amp;rsquo;ll look back at this and laugh.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;Excerpted from &lt;a href=&#34;https://frank-mitchell.com/posts/unwanted-software-thoughts-syndrome/#teufel&#34;&gt;Unwanted Software Thoughts&#xA;Syndrome&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;teufel&#34;&gt;Teufel&lt;/h2&gt;&#xA;&lt;p&gt;Well over a decade ago, I read Bertrand Meyer&amp;rsquo;s &lt;em&gt;Object Oriented Software&#xA;Construction&lt;/em&gt;, and thought it the bee&amp;rsquo;s knees.&#xA;Since then, I&amp;rsquo;ve had experience with functional languages, dynamically-typed&#xA;languages, and distributed computing.&#xA;Meyer&amp;rsquo;s approach, and the Eiffel language, is &lt;em&gt;one&lt;/em&gt; way to construct systems.&#xA;As a whole, though, it&amp;rsquo;s a slow, brittle, and sometimes over-complicated way.&#xA;Eiffel&amp;rsquo;s design also reflects not only Meyer&amp;rsquo;s personal preferences&#xA;(unsurprisingly) but an earlier era where memory and processor cycles were much&#xA;more scarce.&#xA;Scripting languages like Lua, Ruby, and (ugh) JavaScript provide a&#xA;complementary construction technique: less efficient but more flexible glue&#xA;between Eiffel style &amp;ldquo;reliable components&amp;rdquo;.&#xA;The nature of the Web and distributed computing also argues for a more&#xA;function-oriented approach.&#xA;A lot of Web programming is transforming GET and POST requests into HTML (or,&#xA;lately, JSON) responses, with a few side effects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blasts From the Past?</title>
      <link>https://frank-mitchell.com/posts/blasts-from-the-past/</link>
      <pubDate>Wed, 20 Nov 2024 15:12:40 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/blasts-from-the-past/</guid>
      <description>&lt;p&gt;Anyone who&amp;rsquo;s been watching my homepage the past few weeks have noticed that&#xA;huge swaths of articles are being &amp;ldquo;modified&amp;rdquo; with little if any explanation.&#xA;Here&amp;rsquo;s what happened:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A role-playing game creator asked me to preface my rules for his game with&#xA;a copyright notice, as required by Creative Commons.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A second RPG creator, when asked, also suggested I make sure I give credit&#xA;where credit is due.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I recently ran a link checker over my website and found not only broken&#xA;internal links but links to deleted pages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Technology: Translators</title>
      <link>https://frank-mitchell.com/rpg/nomad-tech/translators/</link>
      <pubDate>Mon, 18 Nov 2024 01:12:53 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-tech/translators/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the XD6 System Reference Document by&#xA;Stellagama Publishing. This Reference is published under the Creative Commons&#xA;Attribution License v4.0. You can read more about this license here:&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;translator&#34;&gt;Translator&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Technology Age:&lt;/em&gt; Late Atomic&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Cost:&lt;/em&gt; 250 Cr.&lt;/p&gt;&#xA;&lt;p&gt;A handheld device that translates between two languages for which it has a&#xA;&lt;a href=&#34;#translator-module&#34;&gt;Translator Module&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Communication is necessarily slow because the device must listen to a sentence&#xA;or two then repeat back the translation, just like a live translator.&#xA;Depending on the language and quality of the &lt;a href=&#34;#translator-module&#34;&gt;module&lt;/a&gt; the&#xA;translation may have problems translating idioms, figurative language, and&#xA;slurred or garbled speech.  The user of the device should throw &lt;strong&gt;Social&lt;/strong&gt;&#xA;to see whether the other party understood their intent, and vice versa.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Teufel Again</title>
      <link>https://frank-mitchell.com/posts/teufel-again/</link>
      <pubDate>Sun, 17 Nov 2024 01:19:24 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/teufel-again/</guid>
      <description>&lt;p&gt;::: note&#xA;MODIFIED (2024-11-22): Minor edits, further &lt;a href=&#34;#postscript-2-other-languages&#34;&gt;thoughts&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://www.youtube.com/watch?v=E0h5f5gvvo8&#34;&gt;video excerpt of Robert &amp;ldquo;Uncle Bob&amp;rdquo; Martin&lt;/a&gt;&#xA;prompted some thoughts about the programming language I will probably never&#xA;write, &lt;a href=&#34;../unwanted-software-thoughts-syndrome/#teufel&#34;&gt;Teufel&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;encapsulation&#34;&gt;Encapsulation&lt;/h2&gt;&#xA;&lt;p&gt;In the video, Martin speaks of how the C programming language had strict&#xA;encapsulation: a &lt;code&gt;.h&lt;/code&gt; header file that provided the interface and a &lt;code&gt;.c&lt;/code&gt;&#xA;code file that provided the implementation.  He then laments that nearly all&#xA;object-oriented languages jumble interface and implementation together in one&#xA;(or, worse, two) files, with compiler directives to make certain members&#xA;&amp;ldquo;public&amp;rdquo;, &amp;ldquo;private&amp;rdquo;, &amp;ldquo;protected&amp;rdquo;, or other.  (In Java that&amp;rsquo;s &amp;ldquo;package&#xA;protected&amp;rdquo;.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Notes on Taluism</title>
      <link>https://frank-mitchell.com/posts/openquest-taluism/</link>
      <pubDate>Mon, 11 Nov 2024 07:33:56 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-taluism/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2024 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;FIXED 2024-11-12: Markdown cut off Other Skills column in &lt;a href=&#34;#ranks&#34;&gt;Ranks&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Faith and Invocations</title>
      <link>https://frank-mitchell.com/posts/openquest-faith/</link>
      <pubDate>Sun, 10 Nov 2024 03:47:56 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-faith/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2024 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Some religions not only do not use magic, they consider it an affront to&#xA;their god(s).  They have, instead, acquired powers of casting out demons,&#xA;blocking spells, and resisting magic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implied Settings In D&amp;D and Other RPGs</title>
      <link>https://frank-mitchell.com/posts/implied-settings/</link>
      <pubDate>Fri, 25 Oct 2024 08:58:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/implied-settings/</guid>
      <description>&lt;p&gt;This &lt;a href=&#34;https://www.youtube.com/watch?v=xh8ROvcWAYo&#34;&gt;YouTube video&lt;/a&gt; makes an&#xA;interesting (if somewhat belabored) point: every RPG system carries implicit&#xA;assumptions which imply certain setting elements.&lt;/p&gt;&#xA;&lt;p&gt;(Note: the following discussion will refer to the creator of a world variously&#xA;as the Dungeon Master (DM), Game Master (GM), and Referee, to match the&#xA;terminology of each game system.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;assumptions-of-dd&#34;&gt;Assumptions of D&amp;amp;D&lt;/h2&gt;&#xA;&lt;p&gt;To summarize the video, the implied setting of most &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; and&#xA;D&amp;amp;D-like games includes the following elements:&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest Variant Language Rules</title>
      <link>https://frank-mitchell.com/rpg/openquest-languages/</link>
      <pubDate>Fri, 18 Oct 2024 10:04:59 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/openquest-languages/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2024 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; These rules are a work in progress.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Domains</title>
      <link>https://frank-mitchell.com/posts/openquest-domains/</link>
      <pubDate>Sun, 13 Oct 2024 17:51:39 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-domains/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2024 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;ADDED 2024-11-02: &lt;a href=&#34;#using-domains&#34;&gt;Using Domains&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Toward a Ritual Magic System, Part 3.6: Other Designs</title>
      <link>https://frank-mitchell.com/posts/ritual-magic-3.6/</link>
      <pubDate>Thu, 10 Oct 2024 10:52:55 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ritual-magic-3.6/</guid>
      <description>&lt;p&gt;Apropos of nothing, I&amp;rsquo;m going to address why I&amp;rsquo;ve chosen this particular&#xA;design for the Ritual Magic System, and why I&amp;rsquo;m designing one at all.&lt;/p&gt;&#xA;&lt;h2 id=&#34;existing-work&#34;&gt;Existing Work&lt;/h2&gt;&#xA;&lt;p&gt;While as stated &lt;a href=&#34;../openquest-ritual/#essence-dice&#34;&gt;previously&lt;/a&gt;&#xA;the major inspiration for the system comes from the magic system for&#xA;&lt;em&gt;King Arthur Pendragon&lt;/em&gt;, 4th Edition, I&amp;rsquo;m drawing from a number of other&#xA;systems I&amp;rsquo;ve seen and liked over the years, including:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;em&gt;Barbarians of Lemuria&lt;/em&gt; and &lt;em&gt;Everywhen&lt;/em&gt;, Sorcery&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Buffy the Vampire Slayer&lt;/em&gt; RPG, Sorcery&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Carcosa&lt;/em&gt; (Lamentations of the Flame Princess), Sorcery&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Castle Falkenstein&lt;/em&gt;, Sorcery&lt;/li&gt;&#xA;&lt;li&gt;D&amp;amp;D 3.5 SRD, Incantations&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Stormbringer&lt;/em&gt; 1st Edition, summoning demons&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Ghosts of Albion&lt;/em&gt;, Magic&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;GURPS Thaumatology&lt;/em&gt;, Book/Path Magic, Energy Accumulating variant&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;The Laundry&lt;/em&gt; RPG, Sorcery&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;A Magical Medley&lt;/em&gt; (Fudge), “Occultism” system&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Mythras&lt;/em&gt;, Animism&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Features I like include:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Toward a Ritual Magic System, Part 3.5: Refinements</title>
      <link>https://frank-mitchell.com/posts/ritual-magic-3.5/</link>
      <pubDate>Thu, 26 Sep 2024 23:30:36 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ritual-magic-3.5/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2024 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Right now I&amp;rsquo;m working on compiling the Ritual Magic System into a single&#xA;document.  One &lt;em&gt;&lt;strong&gt;BIG&lt;/strong&gt;&lt;/em&gt; missing part is actual rituals, which will be&#xA;the next post I&amp;rsquo;m also working on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disciple of Balance (DCC)</title>
      <link>https://frank-mitchell.com/rpg/disciple/</link>
      <pubDate>Wed, 11 Sep 2024 11:24:47 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/disciple/</guid>
      <description>&lt;p&gt;&lt;strong&gt;A class for the &lt;em&gt;Dungeon Crawl Classics&lt;/em&gt; RPG.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Normally I like the simplicity of &lt;em&gt;Dungeon Crawl Classics&lt;/em&gt;&amp;rsquo; small number of&#xA;classes.  However, when creating my &lt;a href=&#34;https://frank-mitchell.com/tags/gygax-75-challenge/&#34;&gt;world of Eordh&lt;/a&gt;&#xA;I decided I needed a class similar to the D&amp;amp;D Monk (or &amp;ldquo;Mystic&amp;rdquo; in the&#xA;&lt;em&gt;Rules Compendium&lt;/em&gt;).  The &amp;ldquo;Disciples of Balance&amp;rdquo; as they&amp;rsquo;re known in Eordh&#xA;represent the True Neutral force of Balance the way that Clerics champion&#xA;their Lawful, Neutral (Unaligned), or Chaotic gods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Gygax 75 Challenge Part 2.7: Religions of Eordh</title>
      <link>https://frank-mitchell.com/posts/g75-2.7-religions/</link>
      <pubDate>Mon, 02 Sep 2024 10:20:24 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/g75-2.7-religions/</guid>
      <description>&lt;p&gt;As I may have argued elsewhere, the primary unit of belief is not gods but&#xA;religions.  A religion may have zero, one, or many gods in it.&lt;/p&gt;&#xA;&lt;p&gt;Below are the primary religions of Eordh in the &lt;a href=&#34;../g75-2.5-history/#the-fifth-age&#34;&gt;Fifth Age&lt;/a&gt; and the gods&#xA;(if any) they believe in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-imperial-pantheon&#34;&gt;The Imperial Pantheon&lt;/h2&gt;&#xA;&lt;p&gt;The Imperial religion practices syncretism.&#xA;Sol Invictus is the Eastern god Mitra renamed,&#xA;Perkunnus comes from the North,&#xA;and Kel, Thalassa, and Nox come from the South.&#xA;Even Mortifex, the evil god of Death and Undeath, has a place in the pantheon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Morale for D&amp;D 5e</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/morale-5e/</link>
      <pubDate>Thu, 22 Aug 2024 07:35:13 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/morale-5e/</guid>
      <description>&lt;p&gt;D&amp;amp;D 5e and its cousins probably need to restore the Morale Check.&lt;/p&gt;&#xA;&lt;h2 id=&#34;old-school-morale&#34;&gt;Old-School Morale&lt;/h2&gt;&#xA;&lt;p&gt;In old D&amp;amp;D monsters and opposing NPCs had a Morale score, which was a number&#xA;between 2 and 12.  The Referee would roll 2d6 and compare it to Morale to&#xA;determine whether the monster or NPC would stay and fight or break and run.&#xA;I&amp;rsquo;ve reproduced an example &lt;a href=&#34;#osem&#34;&gt;below&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If I ever DM again, for D&amp;amp;D 5e or any similar game, I may introduce a rule&#xA;like the one below.  This will help monsters act like real creatures, or&#xA;at least prevent them from becoming XP farms.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Technology: Robot Upgrades</title>
      <link>https://frank-mitchell.com/rpg/nomad-tech/robot-upgrades/</link>
      <pubDate>Wed, 21 Aug 2024 16:56:45 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-tech/robot-upgrades/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the XD6 System Reference Document by&#xA;Stellagama Publishing. This Reference is published under the Creative Commons&#xA;Attribution License v4.0. You can read more about this license here:&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;More upgrades for your &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; robots.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cybernetics&#34;&gt;Cybernetics&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Technology Age:&lt;/strong&gt; &lt;em&gt;varies&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; &lt;em&gt;varies&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A robot may have certain cybernetics installed in place of regular arms,&#xA;legs, and equipment &lt;em&gt;if&lt;/em&gt; the cybernetics provides an advantage that ordinary&#xA;equipment does not.  Robots do not incur Loss.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Gygax 75 Challenge Part 2.6: Systems</title>
      <link>https://frank-mitchell.com/posts/g75-2.6-systems/</link>
      <pubDate>Mon, 19 Aug 2024 10:27:38 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/g75-2.6-systems/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been well over a year since I &lt;a href=&#34;../g75-1-concept/&#34;&gt;started this series&lt;/a&gt;.&#xA;A number of new d20/OSR systems have come out since then, or &lt;em&gt;are&lt;/em&gt; coming&#xA;out soon.  I&amp;rsquo;d like to run down the systems I considered, and see which ones&#xA;may be better a better fit for certain &lt;a href=&#34;../g75-2.5-history/&#34;&gt;ages of Eordh&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For what it&amp;rsquo;s worth my list for the &lt;a href=&#34;../g75-2.5-history/#the-fifth-age&#34;&gt;Fifth Age&lt;/a&gt; of Eordh is still:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#dungeon-crawl-classics&#34;&gt;Dungeon Crawl Classics&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#into-the-unknown&#34;&gt;Into the Unknown&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;#swords-and-wizardry&#34;&gt;Swords &amp;amp; Wizardry&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Review</title>
      <link>https://frank-mitchell.com/posts/ftl-nomad-review/</link>
      <pubDate>Mon, 19 Aug 2024 08:49:10 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ftl-nomad-review/</guid>
      <description>&lt;p&gt;::: note&#xA;Originally published on &lt;a href=&#34;https://www.rpg.net/reviews/archive/19/19220.phtml&#34;&gt;RPG.net&lt;/a&gt;. Some typos corrected.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Full Disclosure: Stellagama Publishing sent me a coupon for a hard copy of&lt;/em&gt;&#xA;Faster Than Light: Nomad &lt;em&gt;at cost after one I bought from Lulu.com was &amp;hellip;&#xA;not right.  Otherwise I have received no compensation for this review.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Stellagama Publishing&amp;rsquo;s &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; provides a toolbox for space&#xA;traveling, star-hopping adventures without the fiddly detail of some other&#xA;systems in the same genre.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Gygax 75 Challenge Part 2.5: History of Eordh</title>
      <link>https://frank-mitchell.com/posts/g75-2.5-history/</link>
      <pubDate>Mon, 19 Aug 2024 04:28:52 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/g75-2.5-history/</guid>
      <description>&lt;p&gt;Remember the &lt;a href=&#34;../g75-2-region/&#34;&gt;Gygax 75 Challenge&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;My article queue has three uncompleted articles in the series, and I&amp;rsquo;m trying&#xA;to clear the queue &amp;hellip; but writing a dungeon is hard.  So I&amp;rsquo;m going to&#xA;flashforward to &amp;ldquo;Week&amp;rdquo; 5 and start detailing the history of this proposed&#xA;campaign world, mostly from a magical perspective.&lt;/p&gt;&#xA;&lt;p&gt;::: sidebar&#xA;This ran much longer than I intended.  Sorry.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;before-human-history&#34;&gt;Before Human History&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Years:&lt;/strong&gt; at least 3000 years before the Era of Canon (B.E.C.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Have More Opinions About Comics</title>
      <link>https://frank-mitchell.com/posts/opinions-about-comics-2/</link>
      <pubDate>Thu, 08 Aug 2024 20:35:03 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/opinions-about-comics-2/</guid>
      <description>&lt;p&gt;While I suspected I&amp;rsquo;d do at least one more &amp;ldquo;Opinions About Comics&amp;rdquo; post,&#xA;I didn&amp;rsquo;t think I&amp;rsquo;d do it this soon.&#xA;Mostly I was dissatisfied by the stuff I wrote in 2020 and didn&amp;rsquo;t edit (much),&#xA;so this is sort of a redo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;superheroes-as-relics-take-two&#34;&gt;Superheroes as Relics, Take Two&lt;/h2&gt;&#xA;&lt;p&gt;My paragraph and a sentence from &lt;a href=&#34;../opinions-about-comics-1/&#34;&gt;last time&lt;/a&gt;&#xA;essentially summarized the 1930s, reviewed Superman&amp;rsquo;s early history,&#xA;then made a crack about fascism.&#xA;First, I&amp;rsquo;d like to back up those claims:&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Probabilities 2</title>
      <link>https://frank-mitchell.com/posts/ftl-nomad-prob-2/</link>
      <pubDate>Wed, 07 Aug 2024 13:29:03 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ftl-nomad-prob-2/</guid>
      <description>&lt;p&gt;(This article refers to &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.)&lt;/p&gt;&#xA;&lt;p&gt;Just showing off a new version of the &lt;a href=&#34;../ftl-nomad-prob/&#34;&gt;Python script&lt;/a&gt;&#xA;that I use to generate the probability tables for &lt;em&gt;Nomad&lt;/em&gt;.  It includes&#xA;command line arguments to change parameters at runtime, and a much faster&#xA;recursive algorithm to calculate probabilities.&#xA;Same probabilities though, just with more dice in something less than several&#xA;minutes. (Or hours &amp;hellip; or days &amp;hellip;)&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-table&#34;&gt;The Table&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;./rollkeep.py -b 5&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fountain: I Have Some Notes</title>
      <link>https://frank-mitchell.com/projects/notes-on-fountain/</link>
      <pubDate>Fri, 02 Aug 2024 19:46:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/notes-on-fountain/</guid>
      <description>&lt;p&gt;First off I&amp;rsquo;ll admit I&amp;rsquo;m in no way a screenwriter, or maybe any kind&#xA;of writer. I write fanfic &amp;ndash; mainly &lt;em&gt;Arcane&lt;/em&gt;, &lt;em&gt;Doctor Who&lt;/em&gt;, and &lt;em&gt;Star Trek&lt;/em&gt;&#xA;&amp;ndash; for my own enjoyment. It&amp;rsquo;s not really good enough to show anyone yet.&lt;/p&gt;&#xA;&lt;p&gt;Second, let me say I like &lt;a href=&#34;https://fountain.io/syntax&#34;&gt;Fountain&lt;/a&gt;.&#xA;I tried using Scrivener to write screenplay fanfic, but it seemed like&#xA;overkill. (Maybe if I write that novel &amp;hellip;) Then my Macs died, one by one,&#xA;and I couldn&amp;rsquo;t run it any more. (I did dig around the .scriv file and rescue&#xA;my text, though.)  So I tried Markdown, but the formatting never looked&#xA;right.  Fountain, however, reimagines Markdown specifically for screenwriters.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Star Trek: More Gorn Headcanon</title>
      <link>https://frank-mitchell.com/posts/more-gorn/</link>
      <pubDate>Fri, 02 Aug 2024 19:43:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/more-gorn/</guid>
      <description>&lt;p&gt;If I&amp;rsquo;m not writing about &lt;a href=&#34;https://frank-mitchell.com/tags/klingon/&#34;&gt;Klingons&lt;/a&gt;, I&amp;rsquo;m writing about&#xA;&lt;a href=&#34;https://frank-mitchell.com/tags/gorn/&#34;&gt;Gorn&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;We know so little about the Gorn, really, because the original costume was&#xA;hot and uncomfortable and still looked a little hokey.  Unsurprisingly,&#xA;nobody wanted to use them again, even if they had a better idea than&#xA;&amp;ldquo;kill humans, grrr&amp;rdquo;.&#xA;Follow-on media and even official &lt;a href=&#34;../trek-canon/&#34;&gt;canon&lt;/a&gt; therefore made up&#xA;pretty much whatever they wanted.&lt;/p&gt;&#xA;&lt;p&gt;Technology didn&amp;rsquo;t improve matters much.&#xA;The CGI Gorn in &lt;em&gt;Enterprise&lt;/em&gt; seemed a little too &amp;hellip; CGI.&#xA;Only two decades later did &lt;em&gt;Strange New Worlds&lt;/em&gt; depict the species again,&#xA;albeit as horror movie monsters with lots of concealing shadows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Languages</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/languages/</link>
      <pubDate>Fri, 02 Aug 2024 02:08:01 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/languages/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;starting-languages&#34;&gt;Starting Languages&lt;/h2&gt;&#xA;&lt;p&gt;The player maintains two lists for their character:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Known Languages, i.e. languages the character knows.&lt;/li&gt;&#xA;&lt;li&gt;Unknown Languages, i.e. languages the character definitely &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; know.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Every character adds &lt;strong&gt;Alliance Standard&lt;/strong&gt; to their list of Known Languages&#xA;along with one other language reflecting their culture, ancestry, or species.&#xA;The character also knows how to read and write the written form of each&#xA;language, called a &lt;a href=&#34;https://frank-mitchell.com/rpg/language-scripts/&#34;&gt;Script&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Confederation Space: Languages</title>
      <link>https://frank-mitchell.com/rpg/nomad-confederation-space-addenda/languages/</link>
      <pubDate>Fri, 02 Aug 2024 02:03:53 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-confederation-space-addenda/languages/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS. For more information see&#xA;&lt;a href=&#34;../../nomad-confederation-space/&#34;&gt;the main article&lt;/a&gt;&#xA;and the &lt;a href=&#34;..&#34;&gt;enclosing directory&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;These rules expand the Language rules in &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt;&#xA;by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;starting-languages&#34;&gt;Starting Languages&lt;/h2&gt;&#xA;&lt;p&gt;Every character speaks &lt;strong&gt;Tradespeak (Danaut)&lt;/strong&gt;&#xA;and one other language reflecting their culture, ancestry, or species.&#xA;The character also knows how to read and write all languages they start with.&lt;/p&gt;&#xA;&lt;h3 id=&#34;about-tradespeak&#34;&gt;About Tradespeak&lt;/h3&gt;&#xA;&lt;p&gt;Tradespeak descends from &amp;ldquo;High Confederation&amp;rdquo;, the formal language used in&#xA;Confederation deliberations, back when the Confederation used to deliberate.&#xA;You wouldn&amp;rsquo;t know it, though; it has enough slang and foreign loanwords to&#xA;make it a wholly incomprehensible new language.  Furthermore, the variation&#xA;of Tradespeak used one sector over is &lt;em&gt;not&lt;/em&gt; the same as the one in the Danaut&#xA;sector.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Robot Generation</title>
      <link>https://frank-mitchell.com/posts/ftl-nomad-robots/</link>
      <pubDate>Fri, 02 Aug 2024 01:10:27 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ftl-nomad-robots/</guid>
      <description>&lt;p&gt;::: note&#xA;2024-08-21: Upgrades moved to &lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-tech/robot-upgrades/&#34;&gt;Robot Upgrades&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Yet more exploration of Stellagama&amp;rsquo;s&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Having tried my hand at ships &lt;a href=&#34;../ftl-nomad-ships-1/&#34;&gt;(1)&lt;/a&gt;&#xA;&lt;a href=&#34;../ftl-nomad-ships-2/&#34;&gt;(2)&lt;/a&gt; &lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships/&#34;&gt;(3)&lt;/a&gt;&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-amf/&#34;&gt;(4)&lt;/a&gt;&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-apkf/&#34;&gt;(5)&lt;/a&gt;&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-asys/&#34;&gt;(6)&lt;/a&gt;&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-grey/&#34;&gt;(7)&lt;/a&gt;,&#xA;I&amp;rsquo;m now going to make a few robots.&lt;/p&gt;&#xA;&lt;p&gt;(Note: Most of this is &lt;a href=&#34;https://frank-mitchell.com/rpg/robots-in-coriolis/&#34;&gt;self-plagiarism&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;tobor&#34;&gt;TOBOR&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Technology Age:&lt;/strong&gt; Late Atomic&lt;/p&gt;&#xA;&lt;p&gt;This is the clunky cylindrical robot from innumerable Republic serials&#xA;and low-budget movies.  Perfect for the mad scientist on a budget.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./tobor.jpg&#34; alt=&#34;Tobor the Robot&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;tobors-construction&#34;&gt;TOBOR&amp;rsquo;s Construction&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Section&lt;/th&gt;&#xA;          &lt;th&gt;Description&lt;/th&gt;&#xA;          &lt;th&gt;Notes&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;Cost&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Chassis&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Large: bear-sized&lt;/td&gt;&#xA;          &lt;td&gt;Dur 18, Pro 6&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;20,000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Brain&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Limited&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;500&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Arms&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Work Arms x2&lt;/td&gt;&#xA;          &lt;td&gt;Dam 1d6&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;2,000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Upgrades&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Night Visor&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;600&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;em&gt;&lt;strong&gt;Subtotal&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;23,100&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Locomotor&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Two legs&lt;/td&gt;&#xA;          &lt;td&gt;human speed, 10km/hr&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;+10%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;em&gt;&lt;strong&gt;TOTAL&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;25,410&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;tobors-specs&#34;&gt;TOBOR&amp;rsquo;s Specs&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Size&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Durability&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Protection&lt;/th&gt;&#xA;          &lt;th&gt;Speed&lt;/th&gt;&#xA;          &lt;th&gt;Brain&lt;/th&gt;&#xA;          &lt;th&gt;Skills&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Large&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;18&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;Two legs, normal movement&lt;/td&gt;&#xA;          &lt;td&gt;Limited&lt;/td&gt;&#xA;          &lt;td&gt;Combat 1&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Upgrades and Equipment:&lt;/strong&gt;&lt;/em&gt; Two Work Arms with crude grippers:&#xA;+1D6 when lifting, 1d6 in melee, can grapple.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Confederation Space: Aliens</title>
      <link>https://frank-mitchell.com/rpg/nomad-confederation-space-addenda/aliens/</link>
      <pubDate>Wed, 31 Jul 2024 15:51:03 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-confederation-space-addenda/aliens/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS. For more information see&#xA;&lt;a href=&#34;../../nomad-confederation-space/&#34;&gt;the main article&lt;/a&gt;&#xA;and the &lt;a href=&#34;..&#34;&gt;enclosing directory&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Below are the sapient species in the Confederation Space setting,&#xA;converted into &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Games.&lt;/p&gt;&#xA;&lt;h2 id=&#34;class-0&#34;&gt;Class 0&lt;/h2&gt;&#xA;&lt;p&gt;This species is always available as a player character.  As per the&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;FTL: Nomad&lt;/em&gt;&lt;/a&gt; rules (p 14):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your character stats with 5 Skill points to allocate among skills, with&#xA;no more than 3 in any one skill.&lt;/li&gt;&#xA;&lt;li&gt;You may choose an Archetype.&lt;/li&gt;&#xA;&lt;li&gt;You may start with &lt;em&gt;one&lt;/em&gt; Talent.&lt;/li&gt;&#xA;&lt;li&gt;Your Stamina is 14 + &lt;strong&gt;Physical&lt;/strong&gt;×3&lt;/li&gt;&#xA;&lt;li&gt;Your Encumbrance limit is 10 + &lt;strong&gt;Physical&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;human&#34;&gt;Human&lt;/h3&gt;&#xA;&lt;p&gt;Humans are by far the most common species in Confederation Space.  Most have&#xA;skin in shades of pink or brown and hair ranging from silver to reddish-brown&#xA;to black, but some bloodlines have bluish or greenish coloration, or something&#xA;even more unusual.  Despite skin and hair color, though, only the most backward&#xA;provincial would consider them not human.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Alien Tables 2: The &#39;Nomad&#39; Solutions</title>
      <link>https://frank-mitchell.com/posts/random-alien-tables-2/</link>
      <pubDate>Wed, 31 Jul 2024 10:15:44 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/random-alien-tables-2/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the XD6 System Reference Document by&#xA;Stellagama Publishing. This Reference is published under the Creative Commons&#xA;Attribution License v4.0. You can read more about this license here:&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Since &lt;a href=&#34;../random-alien-tables/&#34;&gt;my last attempt&lt;/a&gt; was a bust, I&amp;rsquo;ll look to&#xA;purely &lt;em&gt;Nomad&lt;/em&gt;-based solutions for my &lt;em&gt;Nomad&lt;/em&gt;-based problems.&lt;/p&gt;&#xA;&lt;h2 id=&#34;xenofauna&#34;&gt;Xenofauna&lt;/h2&gt;&#xA;&lt;p&gt;This time I&amp;rsquo;ll generate some base species using the Xenofauna tables in&#xA;FTLN (pp 242-253, 259), then &amp;ldquo;evolve&amp;rdquo; them into sapients.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Alien Tables: A Test</title>
      <link>https://frank-mitchell.com/posts/random-alien-tables/</link>
      <pubDate>Mon, 29 Jul 2024 23:45:05 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/random-alien-tables/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When evaluating &lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-confederation-space/&#34;&gt;Confederation Space&lt;/a&gt; so far,&#xA;one notable gap was sapient alien species.  Sure, I had the four aliens from&#xA;&lt;em&gt;Nomad&lt;/em&gt; &amp;ndash; Insectoids, Gekkonids, Greys, and Reptilians &amp;ndash; and my concept for&#xA;Confederation Space was heavily human-dominated (despite Earth being in another&#xA;octant).  But I wanted more.&lt;/p&gt;&#xA;&lt;p&gt;One of the things I admired about &lt;em&gt;Babylon 5&lt;/em&gt; was that instead of an alien a&#xA;week they &lt;em&gt;started&lt;/em&gt; with about 20 alien species in the background, and brought&#xA;them to the foreground whenever necessary.  Granted, their aliens were actors&#xA;in makeup or masks, but hey, it&amp;rsquo;s a TV series.  In an RPG we can go weirder.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 8: Conclusion</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/8-conclusion/</link>
      <pubDate>Sun, 28 Jul 2024 17:32:58 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/8-conclusion/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;h2 id=&#34;previously&#34;&gt;Previously&lt;/h2&gt;&#xA;&lt;p&gt;We looked at five fictional means of faster-than-light travel:&#xA;&lt;a href=&#34;../3-hyperspace/&#34;&gt;Hyperspace&lt;/a&gt;, &lt;a href=&#34;../4-jump/&#34;&gt;Jump&lt;/a&gt;, &lt;a href=&#34;../5-portal/&#34;&gt;Portal&lt;/a&gt;, &lt;a href=&#34;../6-teletransport/&#34;&gt;Teletransport&lt;/a&gt;, and &lt;a href=&#34;../7-warp/&#34;&gt;Warp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-exotic-forms-of-travel&#34;&gt;More Exotic Forms of Travel&lt;/h2&gt;&#xA;&lt;h3 id=&#34;transwarp&#34;&gt;&amp;ldquo;Transwarp&amp;rdquo;&lt;/h3&gt;&#xA;&lt;p&gt;The elusive next step after &lt;a href=&#34;../7-warp/&#34;&gt;Warp&lt;/a&gt;, &amp;ldquo;Transwarp&amp;rdquo; functions like&#xA;near-instant travel between two regions of normal space.  Whether Transwarp&#xA;permits travel between any two regions of space or only between two connected&#xA;&amp;ldquo;nodes&amp;rdquo; in a network depends on the exact method.&#xA;(I.e. it&amp;rsquo;s whatever the Game Master decides it is.)&#xA;It may have other limitations such as only functioning within a galaxy&#xA;due to an invisible but pervasive medium through which the ship moves.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 7: Warp</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/7-warp/</link>
      <pubDate>Sun, 28 Jul 2024 17:32:53 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/7-warp/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; this article may contain numbers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;previously&#34;&gt;Previously&lt;/h2&gt;&#xA;&lt;p&gt;We &lt;a href=&#34;../6-teletransport/&#34;&gt;looked at&lt;/a&gt; sending a person as information from one&#xA;place to another.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-warp-works&#34;&gt;How Warp Works&lt;/h2&gt;&#xA;&lt;p&gt;A bubble of spacetime wraps around the starship, expanding space behind the&#xA;ship and contracting it in front, effectively propelling it forward at speeds&#xA;exceeding the speed of light. The ship remains in a stable region of spacetime&#xA;where normal physics still works.  Sound like something out of &lt;em&gt;Star Trek&lt;/em&gt;?&#xA;It is, but&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Alcubierre_drive&#34;&gt;a physicist thinks it could work&lt;/a&gt; &amp;hellip; assuming such things as negative mass and sub-vacuum energy existed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 6: Teletransport</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/6-teletransport/</link>
      <pubDate>Sun, 28 Jul 2024 17:32:45 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/6-teletransport/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; this article may contain numbers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;previously&#34;&gt;Previously&lt;/h2&gt;&#xA;&lt;p&gt;We &lt;a href=&#34;../5-portal/&#34;&gt;glanced at&lt;/a&gt; &amp;ldquo;portals&amp;rdquo;: magic doors between one volume of&#xA;space and the next.&lt;/p&gt;&#xA;&lt;p&gt;Now we look at what I&amp;rsquo;m calling teletransport, i.e. the &lt;em&gt;Star Trek&lt;/em&gt;&#xA;transporter extended to transport across light years.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-teletransport-works&#34;&gt;How Teletransport Works&lt;/h2&gt;&#xA;&lt;p&gt;Teletransporters disassemble a person or thing into atoms, subatomic particles,&#xA;or &amp;ldquo;energy&amp;rdquo;, fling them across space, and reassemble them as they were&#xA;at the beginning of the process in another star system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 5: Portal</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/5-portal/</link>
      <pubDate>Sun, 28 Jul 2024 17:32:34 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/5-portal/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; this article may contain numbers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;previously&#34;&gt;Previously&lt;/h2&gt;&#xA;&lt;p&gt;We &lt;a href=&#34;../4-jump/&#34;&gt;considered&lt;/a&gt; the &amp;ldquo;jump drive&amp;rdquo; present in &lt;em&gt;Traveller&lt;/em&gt; and other&#xA;RPGs, based in older science fiction works: press a button, and you&amp;rsquo;re parsecs&#xA;away.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-portals-work&#34;&gt;How Portals Work&lt;/h2&gt;&#xA;&lt;p&gt;Conceptually a &amp;ldquo;portal&amp;rdquo; is even easier to understand than Jump drive: fly&#xA;through a doorway in space and end up in another star system.  There&amp;rsquo;s an&#xA;entire subgenre called&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Fantasy#Portal_fantasy&#34;&gt;portal fantasy&lt;/a&gt;&#xA;where protagonists walk through a magic door, or a looking-glass, or a&#xA;wardrobe and end up in another world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 4: Jump</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/4-jump/</link>
      <pubDate>Sun, 28 Jul 2024 17:32:23 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/4-jump/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; this article may contain numbers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;previously-&#34;&gt;Previously &amp;hellip;&lt;/h2&gt;&#xA;&lt;p&gt;We &lt;a href=&#34;../3-hyperspace/&#34;&gt;presented&lt;/a&gt; &lt;em&gt;hyperspace&lt;/em&gt;, a common FTL trope in which&#xA;ships exceed the speed of light by opening a portal to a parallel space&#xA;where the distances between stars are much shorter.&lt;/p&gt;&#xA;&lt;p&gt;Next we examine a related trope: jumping between stars without crossing the&#xA;space between.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-jumps-work&#34;&gt;How Jumps Work&lt;/h2&gt;&#xA;&lt;p&gt;The crew powers up the FTL Engine and they&amp;rsquo;re suddenly &amp;hellip; sumeplace else.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 3: Hyperspace</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/3-hyperspace/</link>
      <pubDate>Sun, 28 Jul 2024 17:32:08 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/3-hyperspace/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; this article may contain numbers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;previously-&#34;&gt;Previously &amp;hellip;&lt;/h2&gt;&#xA;&lt;p&gt;We &lt;a href=&#34;../2-astrogation&#34;&gt;discussed&lt;/a&gt; that knowing how far stars are from each&#xA;other in realspace will affect our fictional Faster Than Light devices.&lt;/p&gt;&#xA;&lt;p&gt;First up: hyperspace.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-hyperspace-works&#34;&gt;How Hyperspace Works&lt;/h2&gt;&#xA;&lt;p&gt;Hyperspace is a realm at right angles to our reality &amp;ndash; &amp;ldquo;realspace&amp;rdquo; &amp;ndash;&#xA;where distances between two points in realspace don&amp;rsquo;t correspond to the&#xA;distance between corresponding entrance and exit points in hyperspace.&#xA;Hyperspace posits a parallel space where the distances between stars is &lt;em&gt;much&lt;/em&gt;&#xA;smaller; a ship can fly between them in weeks or days, not years or centuries.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 2: Astrogation</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/2-astrogation/</link>
      <pubDate>Tue, 23 Jul 2024 07:34:51 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/2-astrogation/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;h2 id=&#34;previously-&#34;&gt;Previously &amp;hellip;&lt;/h2&gt;&#xA;&lt;p&gt;We &lt;a href=&#34;../1-introduction&#34;&gt;discussed&lt;/a&gt; why Faster Than Light travel is impossible&#xA;in reality, and broke down the various FTL mechanisms in fiction into five&#xA;categories.&lt;/p&gt;&#xA;&lt;h2 id=&#34;and-now-&#34;&gt;And Now &amp;hellip;&lt;/h2&gt;&#xA;&lt;p&gt;Before we talk about travel between the stars, we have to know where the&#xA;stars are located relative to each other, and how easy (or hard) we&amp;rsquo;ll&#xA;have to work to get there.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-do-we-need-this&#34;&gt;Why Do We Need This?&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;For the GM: At some point someone will want to know how long the trip&#xA;between Horvath and Simonds World takes.  It&amp;rsquo;s hard to give a definitive&#xA;answer if you don&amp;rsquo;t know where Horvath and Simonds World are,&#xA;relative to each other or to some reference point.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Space Combat Example</title>
      <link>https://frank-mitchell.com/posts/nomad-space-combat-example/</link>
      <pubDate>Tue, 23 Jul 2024 03:58:10 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/nomad-space-combat-example/</guid>
      <description>&lt;p&gt;::: summary&#xA;This is a totally made-up example of space combat in the RPG&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; by Stellagama Publishing&#xA;to illustrate &lt;a href=&#34;../nomad-combat-made-simple/&#34;&gt;&amp;ldquo;Space Combat Made Simple&amp;rdquo;&lt;/a&gt;.&#xA;The scenario is loosely based on &amp;ldquo;Lurian Space Patrol&amp;rdquo; in&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad Quickstart Rules&lt;/em&gt;&lt;/a&gt;.&#xA;Any resemblance to any persons, living or dead, is purely coincidental.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;The player characters have answered a distress call from the Vebos Research&#xA;Station around the gas giant Mari.  Suddenly, they see three fighters coming&#xA;straight for them:&lt;/p&gt;</description>
    </item>
    <item>
      <title>A &#39;Nomad&#39; Sensor/Weapons Lock Hack?</title>
      <link>https://frank-mitchell.com/posts/nomad-sensor-weapons-lock-hack/</link>
      <pubDate>Tue, 23 Jul 2024 02:12:00 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/nomad-sensor-weapons-lock-hack/</guid>
      <description>&lt;p&gt;While compiling &lt;a href=&#34;../nomad-combat-made-simple&#34;&gt;&amp;ldquo;Nomad Combat Made Simple&amp;rdquo;&lt;/a&gt;,&#xA;my reference for &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing,&#xA;I ran into an interesting conundrum about the order of Combat Actions in a&#xA;space combat round.&lt;/p&gt;&#xA;&lt;p&gt;In a game where all the players go then all the GM&amp;rsquo;s NPCs go, a Sensor Operator&#xA;can establish a Sensor/Weapons Lock, the Gunner can use it, and then an NPC&#xA;can attempt to break it.&lt;/p&gt;&#xA;&lt;p&gt;If PCs and enemy NPCs are interleaved arbitrarily&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, however, some may&#xA;object that an NPC can undo a &lt;em&gt;Sensor/Weapons Lock&lt;/em&gt; with a&#xA;&lt;em&gt;Break Sensor/Weapons Lock&lt;/em&gt;.&#xA;Thus the Sensor Operator&amp;rsquo;s action would be &amp;ldquo;wasted&amp;rdquo; before it accomplishes&#xA;anything.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Space Combat Made Simple</title>
      <link>https://frank-mitchell.com/posts/nomad-combat-made-simple/</link>
      <pubDate>Tue, 23 Jul 2024 02:07:58 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/nomad-combat-made-simple/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the XD6 System Reference Document by&#xA;Stellagama Publishing. This Reference is published under the Creative Commons&#xA;Attribution License v4.0. You can read more about this license here:&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Having seen someone&amp;rsquo;s printout of &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt;&amp;rsquo;s&#xA;Space Combat Actions section on FTLN pp 177-181 (&lt;a href=&#34;https://www.drivethrurpg.com/en/product/481407/faster-than-light-nomad-quickstart-rules&#34;&gt;FTLN Quickstart&lt;/a&gt;&#xA;pp 55-59), I thought, &amp;ldquo;hey, I could explain it more simply.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;:::sidebar&#xA;Arguably I&amp;rsquo;m about to explain it a little &lt;em&gt;too&lt;/em&gt; simply.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Technology: Full Body Cyborgs</title>
      <link>https://frank-mitchell.com/rpg/nomad-tech/full-body-cyborg/</link>
      <pubDate>Sun, 21 Jul 2024 11:00:16 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-tech/full-body-cyborg/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the XD6 System Reference Document by&#xA;Stellagama Publishing. This Reference is published under the Creative Commons&#xA;Attribution License v4.0. You can read more about this license here:&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Full Body Cyborgs take cyberware to a whole new level: nearly their entire&#xA;bodies are machines, with only their brains and maybe a few vestigial organs&#xA;left.  The classic example in fiction is Motoko Kusanagi from the &lt;em&gt;Ghost&#xA;in the Shell&lt;/em&gt; franchise.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why &#39;NOMAD Confederation Space&#39;?</title>
      <link>https://frank-mitchell.com/posts/why-nomad-confederation-space/</link>
      <pubDate>Tue, 16 Jul 2024 13:38:33 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/why-nomad-confederation-space/</guid>
      <description>&lt;p&gt;Recently I wrote up a &lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-confederation-space/&#34;&gt;proposal&lt;/a&gt; for a&#xA;campaign using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Pubishing,&#xA;based on my Confederation Space setting.&#xA;Somehow I feel compelled to explain myself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-confederation-space&#34;&gt;Why Confederation Space?&lt;/h2&gt;&#xA;&lt;p&gt;So why Confederation Space? I designed it to be broadly compatible with any&#xA;general space game, including &lt;em&gt;Nomad&lt;/em&gt;, Classic &lt;em&gt;Traveller&lt;/em&gt;, current &lt;em&gt;Traveller&lt;/em&gt;,&#xA;&lt;em&gt;Cepheus Deluxe&lt;/em&gt; (also available from Stellagama), &lt;em&gt;Scum and Villainy&lt;/em&gt;,&#xA;etc.  It pretty much hits the Classic &lt;em&gt;Traveller&lt;/em&gt; vibe I prefer: an overarching&#xA;government too far away to really interfere, individual settled worlds ripe&#xA;with adventure, a human-dominated cosmos, etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Confederation Space</title>
      <link>https://frank-mitchell.com/rpg/nomad-confederation-space/</link>
      <pubDate>Tue, 16 Jul 2024 06:31:31 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-confederation-space/</guid>
      <description>&lt;p&gt;This is a proposed one-shot, limited campaign, or unlimited campaign using&#xA;the &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; rules (or the &lt;a href=&#34;https://www.drivethrurpg.com/en/product/481407/faster-than-light-nomad-quickstart-rules&#34;&gt;Quickstart Rules&lt;/a&gt;)&#xA;by Stellagama Publishing&#xA;using my &lt;a href=&#34;https://frank-mitchell.com/posts/star-setting/&#34;&gt;Confederation Space&lt;/a&gt; setting.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-setting&#34;&gt;The Setting&lt;/h2&gt;&#xA;&lt;p&gt;In brief, Confederation Space is a standard &lt;em&gt;Nomad&lt;/em&gt; (or &lt;em&gt;Cepheus&lt;/em&gt; or Classic&#xA;&lt;em&gt;Traveller&lt;/em&gt;) setting.  While nominally all planets are part of a grand&#xA;Confederation, in practice all planets are on their own.  Some have developed&#xA;client relationships with other, richer planets.  Some are colonies wholly&#xA;dependent on their owners.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More Human Than Human</title>
      <link>https://frank-mitchell.com/posts/more-human-than-human/</link>
      <pubDate>Sat, 13 Jul 2024 02:57:59 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/more-human-than-human/</guid>
      <description>&lt;p&gt;Here is the final&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; installment of a series begun years ago in&#xA;&lt;a href=&#34;../star-setting&#34;&gt;&amp;ldquo;A Space Opera Setting&amp;rdquo;&lt;/a&gt; and continued in&#xA;&lt;a href=&#34;../less-evil-empire/&#34;&gt;&amp;ldquo;The Less Evil Empire&amp;rdquo;&lt;/a&gt; and&#xA;&lt;a href=&#34;../bad-republic/&#34;&gt;&amp;ldquo;The Not So Good Republic&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This post details the Transhuman Commonwealth, a.k.a. The &amp;ldquo;Post-Human Dominion&amp;rdquo;&#xA;as its critics call it.  Its population are 100% artificial intelligences,&#xA;and while they&amp;rsquo;re willing to trade with organics they feel uncomfortable&#xA;mixing with them.&lt;/p&gt;&#xA;&lt;p&gt;The Commonwealth&amp;rsquo;s most direct inspiration is Charles Stross&amp;rsquo;s &lt;em&gt;Neptune&amp;rsquo;s&#xA;Brood&lt;/em&gt; and the RPG &lt;em&gt;Eclipse Phase&lt;/em&gt;.  I&amp;rsquo;ll also borrow from my own&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/theta-priori/&#34;&gt;&amp;ldquo;Theta Priori&amp;rdquo;&lt;/a&gt; setting somewhat, specifically the&#xA;part about &amp;ldquo;side-loading&amp;rdquo; skills and direct brain-machine interfaces.&#xA;(Except the brains in question are &lt;em&gt;also&lt;/em&gt; a kind of machine &amp;hellip;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Technology: Wormholes</title>
      <link>https://frank-mitchell.com/rpg/nomad-tech/wormholes/</link>
      <pubDate>Sat, 13 Jul 2024 02:27:15 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-tech/wormholes/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;This article uses &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama&#xA;Publishing, but can be easily translated to any science fiction RPG.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A standard FTL Engine&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; travels between two stars (or star-like masses)&#xA;as long as they are close enough together.  A &lt;em&gt;wormhole&lt;/em&gt; creates&#xA;a path through hyperspace that connects two stars no matter how distant they&#xA;are.  Traversing this path can take one between &lt;em&gt;galaxies&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wormhole-basics&#34;&gt;Wormhole Basics&lt;/h2&gt;&#xA;&lt;h3 id=&#34;open-vs-closed&#34;&gt;Open vs. Closed&lt;/h3&gt;&#xA;&lt;p&gt;Wormholes are either &amp;ldquo;closed&amp;rdquo; or &amp;ldquo;open&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Ships of the Greys</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-grey/</link>
      <pubDate>Sun, 07 Jul 2024 05:22:31 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-grey/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS. See the &lt;a href=&#34;..&#34;&gt;enclosing directory&lt;/a&gt; for&#xA;more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;p&gt;(Inspired by Stellagama Publishing&amp;rsquo;s &lt;em&gt;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/328192/ufos&#34;&gt;UFOs&lt;/a&gt;&lt;/em&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Page references are to &lt;a href=&#34;https://www.drivethrurpg.com/en/product/491208/ftl-supplement-2-spacecraft-go&#34;&gt;&lt;em&gt;Spacecraft Go!&lt;/em&gt;&lt;/a&gt; (SCG)&#xA;or &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; (FTLN).&lt;/p&gt;&#xA;&lt;h2 id=&#34;about-the-grays&#34;&gt;About the Grays&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;../aliens/#grey&#34;&gt;Greys&lt;/a&gt; or &amp;ldquo;Grays&amp;rdquo; have possessed FTL long before humanity,&#xA;and according to uncorroborated reports have visited Earth in the past.&lt;/p&gt;&#xA;&lt;p&gt;While other civilizations have built a variety of ships (some documented in&#xA;&lt;a href=&#34;../ships-asys&#34;&gt;System Ships of Alliance Space&lt;/a&gt; and &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&#xA;pp 147-157), the various Grey tribes have consistently built their distinctive&#xA;saucer-like and cigar-shaped craft, to the exclusion of all other designs.&#xA;That and their distinctive biology suggests that both they and their&#xA;technology originate from some as yet undiscovered home world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: System Ships of Alliance Space</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-asys/</link>
      <pubDate>Sat, 06 Jul 2024 13:34:12 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-asys/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;p&gt;Page references are to &lt;a href=&#34;https://www.drivethrurpg.com/en/product/491208/ftl-supplement-2-spacecraft-go&#34;&gt;&lt;em&gt;Spacecraft Go!&lt;/em&gt;&lt;/a&gt; (SCG)&#xA;or &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; (FTLN).&lt;/p&gt;&#xA;&lt;h2 id=&#34;solar-defense-fleet-ship-classes&#34;&gt;Solar Defense Fleet Ship Classes&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Technological Age:&lt;/strong&gt; Late Interstellar&lt;/p&gt;&#xA;&lt;p&gt;The duty of the Solar Defense Fleet is to protect Earth, Mars, Jupiter&amp;rsquo;s moons,&#xA;and their Solar System.  Many of its ships have been copied or sold to similar&#xA;defense fleets across the Alliance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Ships of the Alliance Merchant Fleet</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-amf/</link>
      <pubDate>Fri, 05 Jul 2024 02:00:55 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-amf/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;p&gt;Page references are to &lt;a href=&#34;https://www.drivethrurpg.com/en/product/491208/ftl-supplement-2-spacecraft-go&#34;&gt;&lt;em&gt;Spacecraft Go!&lt;/em&gt;&lt;/a&gt; (SCG)&#xA;or &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; (FTLN).&lt;/p&gt;&#xA;&lt;h2 id=&#34;alliance-merchant-fleet-ship-classes&#34;&gt;Alliance Merchant Fleet Ship Classes&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Technological Age:&lt;/strong&gt; Early Galactic&lt;/p&gt;&#xA;&lt;p&gt;The Alliance leases these ships to corporations with interstellar scope.&#xA;They may only visit Alliance member worlds, and must abide by other&#xA;restrictions to prevent cultural contamination and proliferation of&#xA;dangerous technology.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Ships of the Alliance Peacekeeping Fleet</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-apkf/</link>
      <pubDate>Fri, 05 Jul 2024 00:29:20 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships-apkf/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;p&gt;Page references are to &lt;a href=&#34;https://www.drivethrurpg.com/en/product/491208/ftl-supplement-2-spacecraft-go&#34;&gt;&lt;em&gt;Spacecraft Go!&lt;/em&gt;&lt;/a&gt; (SCG)&#xA;or &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; (FTLN).&lt;/p&gt;&#xA;&lt;h2 id=&#34;peacekeeping-fleet-ship-classes&#34;&gt;Peacekeeping Fleet Ship Classes&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Technological Age:&lt;/strong&gt; Early Galactic&lt;/p&gt;&#xA;&lt;p&gt;These ships are exclusive to the Peacekeeping Fleet.&lt;/p&gt;&#xA;&lt;h3 id=&#34;fighter&#34;&gt;Fighter&lt;/h3&gt;&#xA;&lt;p&gt;This ship&amp;rsquo;s powerful thrusters and gravitic compensators mark this&#xA;model as a starfighter with eventual civilian uses.  It consists mainly&#xA;of a spherical cockpit in a reinforced transparent aluminum bubble with&#xA;holographic heads-up displays, four multidirectional ion thrusters,&#xA;and a main fusion thruster toward the rear.&#xA;While the cockpit is pressurized with a day&amp;rsquo;s worth of breathable atmosphere,&#xA;the pilot and gunner usually wear spacesuits just in case.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Ship Generation, Part 2: Fleets</title>
      <link>https://frank-mitchell.com/posts/ftl-nomad-ships-2/</link>
      <pubDate>Fri, 05 Jul 2024 00:23:31 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ftl-nomad-ships-2/</guid>
      <description>&lt;p&gt;::: note&#xA;2024-07-06: Links to Confederation Space article.&lt;/p&gt;&#xA;&lt;p&gt;2024-07-21: Fix ships to show numbers in parentheses as Passengers, not total&#xA;aboard.&lt;/p&gt;&#xA;&lt;p&gt;2024-07-22: Added rationale for Ylem Wraith Sphere variant damage table.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;As part of my exploration of Stellagama&amp;rsquo;s &lt;a href=&#34;https://drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt;,&#xA;I decided to make yet more ships.&lt;/p&gt;&#xA;&lt;h2 id=&#34;standard-stl-ships&#34;&gt;Standard STL Ships&lt;/h2&gt;&#xA;&lt;p&gt;These are some common smaller vessels used below.&lt;/p&gt;&#xA;&lt;h3 id=&#34;fighter&#34;&gt;Fighter&lt;/h3&gt;&#xA;&lt;p&gt;See &amp;ldquo;Defense Fighter&amp;rdquo;, FTLN p 148&lt;/p&gt;&#xA;&lt;h3 id=&#34;life-pod&#34;&gt;Life Pod&lt;/h3&gt;&#xA;&lt;p&gt;(I don&amp;rsquo;t know whether the standard ship builds include life pods, but I&amp;rsquo;m going&#xA;to include some.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Aliens</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/aliens/</link>
      <pubDate>Sun, 30 Jun 2024 21:16:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/aliens/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;p&gt;Below are the Alien species available in the Stellar Alliance setting,&#xA;converted into &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;class-i&#34;&gt;Class I&lt;/h2&gt;&#xA;&lt;p&gt;&amp;ldquo;Class I&amp;rdquo; species conform to the rules from page 15 of &lt;em&gt;FTL: Nomad&lt;/em&gt;.&#xA;Each listing provides a physical description, some cultural tendencies,&#xA;and finally the specific abilities (and inabilities) members of the species&#xA;exhibit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Technology: The Hypernet</title>
      <link>https://frank-mitchell.com/rpg/nomad-tech/hypernet/</link>
      <pubDate>Sun, 30 Jun 2024 07:31:06 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-tech/hypernet/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the XD6 System Reference Document by&#xA;Stellagama Publishing. This Reference is published under the Creative Commons&#xA;Attribution License v4.0. You can read more about this license here:&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34;&gt;https://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;2024-08-20: Extended Hypernet technology to the Early and Late Cosmic Ages.&lt;/p&gt;&#xA;&lt;p&gt;2025-04-02: Corrected math in &lt;a href=&#34;#hypernet-hub&#34;&gt;Hypernet Hub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;2025-10-26: Reword effect of additional Payload on &lt;a href=&#34;#hypernet-node&#34;&gt;Nodes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;2026-02-08: Sidebar on alternative Hypernet technologies.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;The Late Galactic Age sees the creation of the &amp;ldquo;Hypernet&amp;rdquo;,&#xA;a true galactic distributed network of &lt;a href=&#34;#hypernet-node&#34;&gt;Hypernet Nodes&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Technology: FTL Telegraphs</title>
      <link>https://frank-mitchell.com/rpg/nomad-tech/telegraph/</link>
      <pubDate>Sun, 30 Jun 2024 07:29:50 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-tech/telegraph/</guid>
      <description>Description and NOMAD rules for the FTL Telegram, a ship&amp;rsquo;s component that can send and receive short messages across interstellar distances.</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Ships of Alliance Space</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships/</link>
      <pubDate>Sun, 30 Jun 2024 07:19:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/ships/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS. See the &lt;a href=&#34;..&#34;&gt;enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;p&gt;Page references are to &lt;a href=&#34;https://www.drivethrurpg.com/en/product/491208/ftl-supplement-2-spacecraft-go&#34;&gt;&lt;em&gt;Spacecraft Go!&lt;/em&gt;&lt;/a&gt; (SCG)&#xA;or &lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; (FTLN).&lt;/p&gt;&#xA;&lt;h2 id=&#34;stellar-alliance-exploration-fleet&#34;&gt;Stellar Alliance Exploration Fleet&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Technology Age:&lt;/strong&gt; Early Galactic&lt;/p&gt;&#xA;&lt;p&gt;These are the three primary ship classes of the Exploration Fleet, plus two&#xA;shuttle classes.&#xA;The &lt;a href=&#34;../fleet/#alliance-merchant-fleet&#34;&gt;Merchant Fleet&lt;/a&gt;,&#xA;&lt;a href=&#34;../fleet/#alliance-peacekeeping-fleet&#34;&gt;Peacekeeping Fleet&lt;/a&gt;,&#xA;and various &lt;a href=&#34;../fleet/#solar-defense-fleet&#34;&gt;system defense fleets&lt;/a&gt;&#xA;have their own classes of ships.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: READ ME FIRST</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/readme/</link>
      <pubDate>Sat, 29 Jun 2024 07:33:35 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/readme/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-this&#34;&gt;What Is This?&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re reading this, someone (probably the author of this Web site)&#xA;asked you to play a character in a role playing game called&#xA;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; in his homebrew setting called the Stellar Alliance.&lt;/p&gt;&#xA;&lt;p&gt;This document will help you create a character appropriate to the setting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-do-i-start&#34;&gt;Where Do I Start?&lt;/h2&gt;&#xA;&lt;p&gt;First, it may help to read the &lt;a href=&#34;../background/&#34;&gt;Background&lt;/a&gt; of the setting,&#xA;to get a feel for what characters would fit into the Alliance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Fleets of the Alliance</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/fleet/</link>
      <pubDate>Sat, 29 Jun 2024 00:08:45 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/fleet/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; from Stellagama Publishing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;alliance-exploration-fleet&#34;&gt;Alliance Exploration Fleet&lt;/h2&gt;&#xA;&lt;p&gt;The Alliance Exploration Fleet explores new star systems, makes contact with&#xA;new civilizations, and pushes the boundaries of Alliance Space.&lt;/p&gt;&#xA;&lt;h3 id=&#34;exploration-fleet-ship-classes&#34;&gt;Exploration Fleet Ship Classes&lt;/h3&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;../ships/#stellar-alliance-exploration-fleet&#34;&gt;Ships of Alliance Space&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;exploration-fleet-ranks-and-uniforms&#34;&gt;Exploration Fleet Ranks and Uniforms&lt;/h3&gt;&#xA;&lt;p&gt;All crewmen aboard an Exploration Fleet starship belong to one of six services.&#xA;Each wears a color-coded uniform during their time in that service,&#xA;and each service has a slightly different rank structure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Background</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/background/</link>
      <pubDate>Sat, 29 Jun 2024 00:07:57 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/background/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;The Alliance started when four species &amp;ndash; Minervans, Nommos, Rephaim, and&#xA;Terans &amp;ndash; joined together in 2467 to found an interstellar government.&#xA;In the 26th century the Stellar Alliance spanned over three hundred worlds.&#xA;Its decentralized yet unified government, its advanced technology,&#xA;and its ideals have irrevocably changed this quadrant of the galaxy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: The Away Team</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/away-team/</link>
      <pubDate>Sat, 29 Jun 2024 00:07:23 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/away-team/</guid>
      <description>&lt;p&gt;&lt;strong&gt;WARNING: This is a WORK IN PROGRESS.  See &lt;a href=&#34;..&#34;&gt;the enclosing directory&lt;/a&gt;&#xA;for more about &lt;em&gt;NOMAD Stellar Alliance&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;NOMAD: Stellar Alliance&lt;/a&gt; series,&#xA;using &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;basics&#34;&gt;Basics&lt;/h2&gt;&#xA;&lt;h3 id=&#34;what-is-an-away-team&#34;&gt;What Is An Away Team?&lt;/h3&gt;&#xA;&lt;p&gt;An Away Team explores unknown planets and civilizations when scans from orbit&#xA;will not suffice.  &amp;ldquo;Space Exploration&amp;rdquo; is part of the Alliance Fleet&amp;rsquo;s full&#xA;name (Alliance Space Exploration and Peacekeeping Fleet), but the Alliance&#xA;explores more than space anomalies and solar systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NOMAD Stellar Alliance: Technology</title>
      <link>https://frank-mitchell.com/rpg/nomad-stellar-alliance/tech/</link>
      <pubDate>Sat, 29 Jun 2024 00:05:16 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/nomad-stellar-alliance/tech/</guid>
      <description>Technology Ages and specific technologies for the NOMAD version of the Stellar Alliance setting.</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Ship Generation, Part 1: Communication</title>
      <link>https://frank-mitchell.com/posts/ftl-nomad-ships-1/</link>
      <pubDate>Tue, 25 Jun 2024 10:45:00 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ftl-nomad-ships-1/</guid>
      <description>&lt;p&gt;::: note&#xA;CHANGED 2024-06-27:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Distinguish &lt;a href=&#34;#ftlmp&#34;&gt;FTL Message Protocol&lt;/a&gt; from &lt;a href=&#34;#hdrp&#34;&gt;Hypernet Protocol&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Add a section on &lt;a href=&#34;#ftl-telegraph-throughput&#34;&gt;FTL Telegraph Throughput&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Reorganized and expanded text.&lt;/li&gt;&#xA;&lt;li&gt;Miscellaneous other tweaks.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;CHANGED 2024-06-30:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Supersede this article with revised rules for the&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-tech/telegraph/&#34;&gt;FTL Telegraph&lt;/a&gt; and&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/nomad-tech/hypernet/&#34;&gt;Hypernet&lt;/a&gt;.&#xA;:::&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;As part of my exploration of Stellagama&amp;rsquo;s &lt;a href=&#34;https://drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt;,&#xA;I decided to make a few ships, or &amp;ldquo;ships&amp;rdquo;.&#xA;I&amp;rsquo;m not sure I&amp;rsquo;m doing it &lt;em&gt;quite&lt;/em&gt; right, and I think I&amp;rsquo;m breaking the rules&#xA;with the &lt;a href=&#34;#express-drone&#34;&gt;Express Drone&lt;/a&gt; and the&#xA;&lt;a href=&#34;#ftl-relay-pod&#34;&gt;FTL Relay Pod&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grand Unified FTL 1: Introduction</title>
      <link>https://frank-mitchell.com/rpg/grand-unified-ftl/1-introduction/</link>
      <pubDate>Tue, 25 Jun 2024 08:38:36 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/grand-unified-ftl/1-introduction/</guid>
      <description>&lt;p&gt;Part of the &lt;a href=&#34;..&#34;&gt;Grand Unified FTL&lt;/a&gt; series.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;WARNING:&lt;/strong&gt; this article may contain numbers.&lt;/p&gt;&#xA;&lt;p&gt;Science fiction authors (and some scientists) have proposed several methods&#xA;to allow humans and (as far as we know fictional) aliens to traverse the&#xA;vast distances between stars.  In this article I will categorize the various&#xA;methods, provide simple but specific ways to handle each method,&#xA;and at least sketch out system-independent mechanics that game designers&#xA;and tinkerers can incorporate into tabletop RPGs and hobby games.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More Thoughts on &#39;Coriolis: The Great Dark&#39;</title>
      <link>https://frank-mitchell.com/posts/coriolis-dark-2/</link>
      <pubDate>Fri, 21 Jun 2024 01:07:45 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/coriolis-dark-2/</guid>
      <description>&lt;p&gt;As I reflect on what little Free League has released about their upcoming&#xA;&lt;a href=&#34;https://www.kickstarter.com/projects/1192053011/coriolis-the-great-dark-rpg-explore-a-lost-horizon&#34;&gt;&lt;em&gt;Coriolis: The Great Dark&lt;/em&gt;&lt;/a&gt;, I find myself becoming apprehensive about&#xA;the new version of a game that became &amp;ldquo;obsolete&amp;rdquo; before I played it.&lt;/p&gt;&#xA;&lt;p&gt;Here are some nagging thoughts running through my head.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-great-shadowdark&#34;&gt;The Great Shadowdark?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Coriolis: The Third Horizon&lt;/em&gt; presented a cluster of 36 stars; the main book&#xA;and supplements detailed climates and cultures for most of them.&#xA;The Third Horizon therefore provided players a varied, vibrant setting with&#xA;numerous cultural, political, and religious factions with their own areas&#xA;of influence, ideologies, technological advances (and regressions), and&#xA;ultimate objectives.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Probabilities</title>
      <link>https://frank-mitchell.com/posts/ftl-nomad-prob/</link>
      <pubDate>Mon, 20 May 2024 22:16:41 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ftl-nomad-prob/</guid>
      <description>&lt;p&gt;(This article refers to &lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; by Stellagama Publishing.)&lt;/p&gt;&#xA;&lt;p&gt;::: note&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;2024-06-23:&lt;/em&gt; WHOLLY REWRITTEN to use a Python script rather than&#xA;&lt;a href=&#34;https://anydice.com&#34;&gt;https://anydice.com&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;2024-06-27:&lt;/em&gt; Minor corrections to the code and explanation.&#xA;:::&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Inevitably I wondered what the probability table for&#xA;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt; looked like.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-table&#34;&gt;The Table&lt;/h2&gt;&#xA;&lt;p&gt;And here it is:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;TN&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;Skill&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;-3D&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;-2D&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;-1D&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;+0D&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;+1D&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;+2D&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;+3D&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;6&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100.00&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100.00&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100.00&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100.00&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100.00&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100.00&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;100.00&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;5&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;80.38&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;86.81&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;92.59&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;97.22&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;99.54&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;99.92&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;99.99&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;4&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;4&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;56.65&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;67.98&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;80.09&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;91.67&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;98.15&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;99.61&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;99.92&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;5&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;34.84&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;47.84&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;64.35&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;83.33&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;94.91&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;98.46&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;99.52&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;6&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;19.41&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;30.56&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;47.69&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;72.22&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;89.35&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;95.99&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;98.50&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;7&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;9.43&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;17.36&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;31.94&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;58.33&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;80.56&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;90.97&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;95.78&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;8&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;0&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;4.22&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;9.03&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;19.44&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;41.67&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;68.06&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;82.64&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;90.57&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;9&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1.50&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;4.01&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;10.65&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;27.78&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;52.31&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;69.44&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;80.59&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;10&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;0.48&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1.54&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;5.09&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;16.67&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;35.65&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;52.16&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;65.16&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;11&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;0.08&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;0.39&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;1.85&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;8.33&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;19.91&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;32.02&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;43.35&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;12&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;0.01&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;0.08&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;0.46&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;2.78&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;7.41&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;13.19&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;19.62&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;the-code&#34;&gt;The Code&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;collections.abc&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; Callable, Collection, Mapping&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;fractions&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; Fraction&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;functools&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; partial&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;itertools&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; chain, product&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;tabulate&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NKEEP: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NBONUS: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NSIDES: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Evaluator &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Callable[[Collection[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;]], &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Histogram &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Mapping[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;, Fraction]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Table &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Collection[Collection[Fraction &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;keep_highest&lt;/span&gt;(roll: Collection[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;], nkeep: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;, low: &lt;span style=&#34;color:#008000&#34;&gt;bool&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;False&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ndice: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;len&lt;/span&gt;(roll)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; ndice &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; nkeep:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;sum&lt;/span&gt;(roll)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sroll &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;sorted&lt;/span&gt;(roll)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; low:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;sum&lt;/span&gt;(sroll[:nkeep])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;sum&lt;/span&gt;(sroll[&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;nkeep:])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;histogram&lt;/span&gt;(ndice: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;, nsides: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;, func: Evaluator) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; Histogram:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    hist: Histogram &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    die: &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [x &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; x &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;, nsides &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    incr: Fraction &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Fraction(&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;, nsides&lt;span style=&#34;color:#666&#34;&gt;**&lt;/span&gt;ndice)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; roll &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; product(die, repeat&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;ndice):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        result: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; func(roll)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; result &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; hist:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            hist[result] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Fraction(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        hist[result] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; hist[result] &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; incr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; hist&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;cumulative&lt;/span&gt;(h: Histogram) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; Histogram:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    result: Histogram &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    counter: Fraction &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Fraction(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; key &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;reversed&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;sorted&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;(h))):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        counter &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; h[key]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        result[key] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; counter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;format_pct&lt;/span&gt;(h: Histogram, i: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; Fraction &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; i &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; h:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; h[i] &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;skill&lt;/span&gt;(k: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; k &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; k &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;collate&lt;/span&gt;(hl: Collection[Histogram]) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; Table:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    allkeys: &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;sorted&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;(chain&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;from_iterable([&lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;(h) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; h &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; hl])))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; [[k, skill(k)] &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; [format_pct(h, k) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; h &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; hl] &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; k &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; allkeys]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;__name__&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    headers &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;TN&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Skill&amp;#34;&lt;/span&gt;] &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; [&lt;span style=&#34;color:#ba2121&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;{&lt;/span&gt;n&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;D&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; n &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;NBONUS, NBONUS &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    table &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; collate(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            cumulative(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                histogram(ntotal, NSIDES, partial(keep_highest, nkeep&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;NKEEP, low&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;True&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; ntotal &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;range&lt;/span&gt;(NKEEP &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; NBONUS, NKEEP, &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            cumulative(histogram(ntotal, NSIDES, partial(keep_highest, nkeep&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;NKEEP)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; ntotal &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;range&lt;/span&gt;(NKEEP, NKEEP &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; NBONUS &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(tabulate&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;tabulate(table, headers&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;headers, tablefmt&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;pipe&amp;#34;&lt;/span&gt;, floatfmt&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.2f&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;notes-on-the-code&#34;&gt;Notes on the Code&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;This code has zero doc strings or code comments.  Sorry.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;Faster Than Light: Nomad&#39; Character Generation</title>
      <link>https://frank-mitchell.com/posts/ftl-nomad-chargen/</link>
      <pubDate>Mon, 20 May 2024 12:40:13 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/ftl-nomad-chargen/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/479380/faster-than-light-nomad&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&lt;/a&gt; is the latest title from Stellagama Games.&#xA;It expands their &lt;a href=&#34;https://frank-mitchell.com/rpg/cepheus-quantum/&#34;&gt;Quantum Engine&lt;/a&gt; for space adventure&#xA;without relying on Cepheus or Traveller Open Gaming Content.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dice-mechanics&#34;&gt;Dice Mechanics&lt;/h2&gt;&#xA;&lt;p&gt;Like the vanilla Quantum Engine, &lt;em&gt;FTL: Nomad&lt;/em&gt; uses only six-sided dice (D).&#xA;The basic skill check is 2D + skill, 8 or more succeeds.&lt;/p&gt;&#xA;&lt;p&gt;Instead of fiddly modifications to the die roll or target number, FTL:N&#xA;uses &amp;ldquo;advantage&amp;rdquo; and &amp;ldquo;disadvantage&amp;rdquo; dice, rated also in ±&lt;em&gt;n&lt;/em&gt;D.&#xA;For example, if you have a net +1D on your die roll, you roll &lt;em&gt;three&lt;/em&gt; dice&#xA;and pick the highest two.  If you have -2D on your check, you roll &lt;em&gt;four&lt;/em&gt;&#xA;dice and pick the &lt;em&gt;lowest&lt;/em&gt; two.  And so on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>duplicate-files.py - 2024-04-07</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2024-04-07-py/</link>
      <pubDate>Sun, 07 Apr 2024 17:43:44 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2024-04-07-py/</guid>
      <description>&lt;p&gt;For an explanation, see the &lt;a href=&#34;../&#34;&gt;directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filespy&#34;&gt;&lt;code&gt;duplicate-files.py&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add type annotations&lt;/li&gt;&#xA;&lt;li&gt;Rework code for type safety.&lt;/li&gt;&#xA;&lt;li&gt;Ran code through &lt;code&gt;mypy&lt;/code&gt; and &lt;code&gt;pylint&lt;/code&gt;, and fixed &lt;em&gt;most&lt;/em&gt; problems.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;pylint&lt;/code&gt; objects to the hyphen in the name.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;pylint&lt;/code&gt; wants docstrings for all function.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Removed attempt to import &lt;code&gt;simplejson&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;usage: duplicate-files.py [-h] [-q, --quiet] [-v, --verbose]&#xA;                          [-o, --output FILE] [-j, --json] [-y, --yaml]&#xA;                          [-p, --pretty] [-z, --zero-length]&#xA;                          DIR [DIR ...]&#xA;&#xA;Find duplicate files in one or more directories.&#xA;&#xA;positional arguments:&#xA;  DIR                a directory to scan&#xA;&#xA;options:&#xA;  -h, --help         show this help message and exit&#xA;  -q, --quiet        run without printing to standard output.&#xA;  -v, --verbose      print extra information to standard output.&#xA;  -o, --output FILE  write to the given file (default: standard output)&#xA;  -j, --json         write output as JSON&#xA;  -y, --yaml         write output as YAML (default)&#xA;  -p, --pretty       &amp;#34;pretty-print&amp;#34; the output&#xA;  -z, --zero-length  include zero-length files&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;pathlib&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; Path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;itertools&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; combinations&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;argparse&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;filecmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;fnmatch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;YAML_ENABLED: &lt;span style=&#34;color:#008000&#34;&gt;bool&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;ImportError&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    YAML_ENABLED &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STD_EXCLUDES: &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# version control directories&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVSROOT&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.gitignore&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.svn&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# macosx-specific hidden files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.DS_Store&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.Apple*&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;._*&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# trash directories&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;Trash&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.Trash*&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;prunable&lt;/span&gt;(name: &lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;bool&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;any&lt;/span&gt;(fnmatch&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;fnmatch(name, pat) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; pat &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; STD_EXCLUDES)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;find_files&lt;/span&gt;(sizemap: &lt;span style=&#34;color:#008000&#34;&gt;dict&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;[Path]], name: &lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; Path) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    f: Path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;isinstance&lt;/span&gt;(name, Path):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        f &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        f &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Path(name)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable(f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;name):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_symlink():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_dir():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; child &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;iterdir():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            find_files(sizemap, child)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elif&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_file():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sz: &lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;stat()&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;st_size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; sz &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sizemap[sz]&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add(f)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sizemap[sz] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;((f,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;duplicate_files&lt;/span&gt;(file_i, file_j) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;bool&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; file_i &lt;span style=&#34;color:#666&#34;&gt;!=&lt;/span&gt; file_j \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_i&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;samefile(file_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; filecmp&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(file_i, file_j, shallow&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;add_to_dupsets&lt;/span&gt;(dupsets: &lt;span style=&#34;color:#008000&#34;&gt;dict&lt;/span&gt;[Path, &lt;span style=&#34;color:#008000&#34;&gt;frozenset&lt;/span&gt;[Path]], file_i: Path, file_j: Path) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_i &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; dupsets:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        dupsets[file_i] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;frozenset&lt;/span&gt;((file_i,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_j &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; dupsets:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        dupsets[file_j] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;frozenset&lt;/span&gt;((file_j,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    newset &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; dupsets[file_i] &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; dupsets[file_j]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; f &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; newset:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        dupsets[f] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; newset&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;compare_files&lt;/span&gt;(sizemap: &lt;span style=&#34;color:#008000&#34;&gt;dict&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;[Path]]) &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;]]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dupsets: &lt;span style=&#34;color:#008000&#34;&gt;dict&lt;/span&gt;[Path, &lt;span style=&#34;color:#008000&#34;&gt;frozenset&lt;/span&gt;[Path]] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; sz, ls &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;items():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; sz &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; file_i, file_j &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; combinations(ls, &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files(file_i, file_j):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                add_to_dupsets(dupsets, file_i, file_j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    superset: &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;frozenset&lt;/span&gt;[Path]] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;(dupsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    result: &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;]] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#008000&#34;&gt;sorted&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;(p) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; s) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; s &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; superset]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;make_argparser&lt;/span&gt;() &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; argparse&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;ArgumentParser:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; argparse&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;ArgumentParser(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    description&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;Find duplicate files in one or more directories.&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;dirs&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    metavar&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;DIR&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    nargs&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;+&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;a directory to scan&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#parser.add_argument(&amp;#39;-d, --from&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                metavar=&amp;#39;MAINDIR&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                dest=&amp;#39;canondir&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                help=&amp;#39;Compare other directories to this directory.&amp;#39;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-q, --quiet&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;quiet&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;run without printing to standard output.&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-v, --verbose&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;verbose&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;print extra information to standard output.&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-o, --output&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    metavar&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;FILE&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;outfile&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;write to the given file (default: standard output)&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; YAML_ENABLED:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-j, --json&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_const&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        const&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        default&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;write output as JSON&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-y, --yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_const&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        const&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        default&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;write output as YAML (default)&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-p, --pretty&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;pretty&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;&amp;#34;pretty-print&amp;#34; the output&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-z, --zero-length&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;zero&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;include zero-length files&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; parser&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;main&lt;/span&gt;() &lt;span style=&#34;color:#666&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sizemap: &lt;span style=&#34;color:#008000&#34;&gt;dict&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;[Path]] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    parser: argparse&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;ArgumentParser &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; make_argparser()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    args: argparse&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;Namespace &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse_args()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; dirname &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        find_files(sizemap, dirname)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    result: &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;]] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; compare_files(sizemap)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        zero: &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;[&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;(p) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap[&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        zero&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;append(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;)  &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# so remove-files will remove *all* files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;append(zero)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; YAML_ENABLED &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            indent &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            indent &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        out &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            json&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dumps(result, sort_keys&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;True&lt;/span&gt;, indent&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;indent)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        out &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            yaml&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(result,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    width&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;4096&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    explicit_start&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    explicit_end&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    canonical&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;outfile:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(out)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        outpath &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Path(args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;outfile)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        outpath&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write_text(out, encoding&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;__name__&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    main()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Thoughts on Coriolis: The Great Dark</title>
      <link>https://frank-mitchell.com/posts/coriolis-dark/</link>
      <pubDate>Wed, 03 Apr 2024 17:42:40 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/coriolis-dark/</guid>
      <description>&lt;p&gt;Free League Publishing have a &lt;a href=&#34;https://www.kickstarter.com/projects/1192053011/coriolis-the-great-dark-rpg-explore-a-lost-horizon&#34;&gt;kickstarter&lt;/a&gt; for a new version of &lt;em&gt;Coriolis&lt;/em&gt;&#xA;entitled &lt;em&gt;Coriolis: The Great Dark&lt;/em&gt;.  The setting and the rules differ from&#xA;&lt;em&gt;Coriolis: The Third Horizon&lt;/em&gt;, with only a few scattered callbacks.&lt;/p&gt;&#xA;&lt;p&gt;Free League has also said that their publishing and support of the original&#xA;game will end.  &lt;em&gt;The Great Dark&lt;/em&gt; is essentially &lt;em&gt;Coriolis&lt;/em&gt; 2.0, and&#xA;understandably they don&amp;rsquo;t want to sell both old and new editions.&#xA;They will announce an &amp;ldquo;open license for third party content&amp;rdquo;&#xA;for both games shortly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Physics Levels and Other Nonsense</title>
      <link>https://frank-mitchell.com/rpg/physics-levels/</link>
      <pubDate>Wed, 20 Mar 2024 01:42:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/physics-levels/</guid>
      <description>&lt;p&gt;Having always been fascinated by the idea of alternate worlds, I once worked&#xA;out parameters other than&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/openquest-mana/#variable-thaumic-level&#34;&gt;thaumic levels&lt;/a&gt;&#xA;to characterize different worlds (or different locations within a world).&#xA;Sadly I seem to have misplaced those notes, but here I recreate&#xA;&amp;ldquo;Physics Levels&amp;rdquo;, &amp;ldquo;Psi Levels&amp;rdquo;, and &amp;ldquo;Superscience Levels&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;physics-levels&#34;&gt;Physics Levels&lt;/h2&gt;&#xA;&lt;p&gt;Long before I encountered &lt;em&gt;The Strange&lt;/em&gt; I had an idea:&#xA;not only do alternate worlds&#xA;vary by magic quantity and quality but by the physical laws that govern them.&#xA;As far as I remember, I used the GURPS Mana Levels as a model.  Below are&#xA;the labels and the &lt;em&gt;highest&lt;/em&gt; &lt;a href=&#34;https://frank-mitchell.com/rpg/techlevels/&#34;&gt;Progress Levels or Tech Levels&lt;/a&gt;&#xA;in various systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fantasy Metals</title>
      <link>https://frank-mitchell.com/rpg/metals/</link>
      <pubDate>Sun, 17 Mar 2024 04:47:10 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/metals/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the System Reference Document 5.1&#xA;(&amp;ldquo;SRD 5.1&amp;rdquo;) by Wizards of the Coast LLC and available at&#xA;&lt;a href=&#34;https://dnd.wizards.com/resources/systems-reference-document&#34;&gt;https://dnd.wizards.com/resources/systems-reference-document&lt;/a&gt;.&#xA;The SRD 5.1 is licensed under the Creative Commons Attribution 4.0&#xA;International License available at&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/legalcode&#34;&gt;https://creativecommons.org/licenses/by/4.0/legalcode&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;This article summarizes rules related to common and not so common metals&#xA;in fantasy games and literature.  It presumes something close to Standard&#xA;Physics&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; in a particular fantasy world, despite other core assumptions,&#xA;e.g. the existence of magic or the prevalence of gold.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Toward a Ritual Magic System, Part 3: Lore Redux and Ritual Procedure</title>
      <link>https://frank-mitchell.com/posts/ritual-magic-3/</link>
      <pubDate>Wed, 28 Feb 2024 11:51:00 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/ritual-magic-3/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2024 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;lore-revisited&#34;&gt;Lore Revisited&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../ritual-magic-2/&#34;&gt;Last time&lt;/a&gt; I defined &lt;strong&gt;Lore&lt;/strong&gt; thus:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Low Magic 5e: Dwarfs</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/low-magic-dwarfs/</link>
      <pubDate>Wed, 21 Feb 2024 21:01:48 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/low-magic-dwarfs/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the System Reference Document 5.1&#xA;(“SRD 5.1”) by Wizards of the Coast LLC and available at&#xA;&lt;a href=&#34;https://dnd.wizards.com/resources/systems-reference-document&#34;&gt;https://dnd.wizards.com/resources/systems-reference-document&lt;/a&gt;.&#xA;The SRD 5.1 is licensed under the Creative Commons Attribution 4.0&#xA;International License available at&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/legalcode&#34;&gt;https://creativecommons.org/licenses/by/4.0/legalcode&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;dwarf-ancestry&#34;&gt;Dwarf Ancestry&lt;/h2&gt;&#xA;&lt;p&gt;Scholars consider Dwarfs&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; a distant sub-species of humanity, one shaped&#xA;by the necessities of a life spent substantially underground and perhaps by&#xA;deliberate tampering from the Eldren or Fey.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Low Magic 5e: Eldren</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/low-magic-eldren/</link>
      <pubDate>Wed, 21 Feb 2024 20:43:56 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/low-magic-eldren/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the System Reference Document 5.1&#xA;(“SRD 5.1”) by Wizards of the Coast LLC and available at&#xA;&lt;a href=&#34;https://dnd.wizards.com/resources/systems-reference-document&#34;&gt;https://dnd.wizards.com/resources/systems-reference-document&lt;/a&gt;.&#xA;The SRD 5.1 is licensed under the Creative Commons Attribution 4.0&#xA;International License available at&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/legalcode&#34;&gt;https://creativecommons.org/licenses/by/4.0/legalcode&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;&lt;strong&gt;CHANGED 2024-03-02:&lt;/strong&gt; Altered the Half-Bresailians.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CHANGED 2024-03-06:&lt;/strong&gt; Improved Ageless Eldren&amp;rsquo;s &lt;strong&gt;Flashback&lt;/strong&gt; ability.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CHANGED 2024-11-11:&lt;/strong&gt; Minor changes to &lt;a href=&#34;#languages&#34;&gt;Languages&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CHANGED 2025-02-20:&lt;/strong&gt; Helpful diagram of &lt;a href=&#34;#languages&#34;&gt;Languages&lt;/a&gt;, minor fixes.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;dms-note&#34;&gt;DM&amp;rsquo;s Note&lt;/h2&gt;&#xA;&lt;p&gt;The origin and destinies of the Eldren are intertwined with the forces&#xA;mortals call &amp;ldquo;magic&amp;rdquo;.  Therefore, DMs should consider carefully whether&#xA;to introduce them into their campaign.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Low Magic 5e: Nonhuman Ancestries</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/low-magic-species/</link>
      <pubDate>Tue, 20 Feb 2024 22:43:53 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/low-magic-species/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the System Reference Document 5.1&#xA;(“SRD 5.1”) by Wizards of the Coast LLC and available at&#xA;&lt;a href=&#34;https://dnd.wizards.com/resources/systems-reference-document&#34;&gt;https://dnd.wizards.com/resources/systems-reference-document&lt;/a&gt;.&#xA;The SRD 5.1 is licensed under the Creative Commons Attribution 4.0&#xA;International License available at&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/legalcode&#34;&gt;https://creativecommons.org/licenses/by/4.0/legalcode&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Inspired by &lt;a href=&#34;https://www.drivethrurpg.com/product/314622/Ancestry--Culture-An-Alternative-to-Race-in-5e&#34;&gt;&lt;em&gt;Ancestries and Cultures&lt;/em&gt;&lt;/a&gt;, I first thought I would devise&#xA;a set of interchangeable Ancestries and Cultures for a&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/low-magic-5e/&#34;&gt;&amp;ldquo;Low Magic 5e&amp;rdquo;&lt;/a&gt; setting I was working on.&#xA;I quickly ran into two problems:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Low Magic 5e: Cultures</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/low-magic-cultures/</link>
      <pubDate>Tue, 20 Feb 2024 20:35:38 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/low-magic-cultures/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the System Reference Document 5.1&#xA;(“SRD 5.1”) by Wizards of the Coast LLC and available at&#xA;&lt;a href=&#34;https://dnd.wizards.com/resources/systems-reference-document&#34;&gt;https://dnd.wizards.com/resources/systems-reference-document&lt;/a&gt;.&#xA;The SRD 5.1 is licensed under the Creative Commons Attribution 4.0&#xA;International License available at&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/legalcode&#34;&gt;https://creativecommons.org/licenses/by/4.0/legalcode&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Inspired by &lt;a href=&#34;https://www.drivethrurpg.com/product/314622/Ancestry--Culture-An-Alternative-to-Race-in-5e&#34;&gt;&lt;em&gt;Ancestries &amp;amp; Cultures&lt;/em&gt;&lt;/a&gt; I decided to separate &amp;ldquo;Races&amp;rdquo; in 5e&#xA;into an Ancestry and a Culture.  However, I wanted to make &amp;ldquo;Culture&amp;rdquo; more&#xA;sophisticated and meaningful than simply &amp;ldquo;Human&amp;rdquo;, &amp;ldquo;Orc&amp;rdquo;, etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Toward a Ritual Magic System, Part 2: Essence and Lore</title>
      <link>https://frank-mitchell.com/posts/ritual-magic-2/</link>
      <pubDate>Sat, 17 Feb 2024 11:52:39 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/ritual-magic-2/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2024 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../openquest-ritual/&#34;&gt;Several months ago&lt;/a&gt; I considered mechanics for a&#xA;ritual magic system in OpenQuest.  After doing some probability calculations&#xA;I decided the best system would roll a number of d6es equal to the character&amp;rsquo;s&#xA;&amp;ldquo;Essence&amp;rdquo;.  What is &amp;ldquo;Essence&amp;rdquo;?  Whatever I want it to be.&lt;/p&gt;</description>
    </item>
    <item>
      <title>House Rules for D&amp;D 5e</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/dnd5-rules/</link>
      <pubDate>Thu, 15 Feb 2024 11:37:39 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/dnd5-rules/</guid>
      <description>&lt;p&gt;::: note&#xA;ADDED 2024-06-14: &lt;a href=&#34;#action-points&#34;&gt;Action Points&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;ADDED 2024-07-24: &lt;a href=&#34;#multiclassing&#34;&gt;Multiclassing&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;ADDED 2024-08-15: &lt;a href=&#34;#flying&#34;&gt;Flying&lt;/a&gt;, &lt;a href=&#34;#grids&#34;&gt;Grids&lt;/a&gt;, &lt;a href=&#34;#light&#34;&gt;Light&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;ADDED 2024-08-16: &lt;a href=&#34;#sidekicks&#34;&gt;Sidekicks&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;ADDED 2024-08-21: Rating system in &lt;a href=&#34;#summary&#34;&gt;Summary&lt;/a&gt;,&#xA;extended &lt;a href=&#34;#races&#34;&gt;&amp;ldquo;Races&amp;rdquo;&lt;/a&gt; options.&lt;/p&gt;&#xA;&lt;p&gt;CHANGED 2024-09-30: Under &lt;a href=&#34;#alignments&#34;&gt;Alignments&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Renamed &amp;ldquo;D&amp;amp;D 5 Hard Mode Alignment&amp;rdquo; to &amp;ldquo;Hard Alignment&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Added &amp;ldquo;Corruption&amp;rdquo; option.&#xA;:::&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This page details house rules for any D&amp;amp;D 5e game I run, excluding those&#xA;using all the &lt;a href=&#34;https://frank-mitchell.com/rpg/nimble-rules/&#34;&gt;Nimble v1&lt;/a&gt; modifications to D&amp;amp;D 5e.&#xA;They are a work in progress.&lt;/p&gt;&#xA;&lt;h2 id=&#34;action-points&#34;&gt;Action Points&lt;/h2&gt;&#xA;&lt;p&gt;(Most of this comes from &lt;a href=&#34;https://nimble5e.com/&#34; title=&#34;Nimble 5e&#34;&gt;Nimble&lt;/a&gt;.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Low Magic 5e: Characters</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/low-magic-characters/</link>
      <pubDate>Thu, 15 Feb 2024 10:57:48 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/low-magic-characters/</guid>
      <description>&lt;p&gt;::: license&#xA;This work includes material taken from the System Reference Document 5.1&#xA;(“SRD 5.1”) by Wizards of the Coast LLC and available at&#xA;&lt;a href=&#34;https://dnd.wizards.com/resources/systems-reference-document&#34;&gt;https://dnd.wizards.com/resources/systems-reference-document&lt;/a&gt;.&#xA;The SRD 5.1 is licensed under the Creative Commons Attribution 4.0&#xA;International License available at&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/legalcode&#34;&gt;https://creativecommons.org/licenses/by/4.0/legalcode&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;low-magic-settings&#34;&gt;Low Magic Settings&lt;/h2&gt;&#xA;&lt;p&gt;Magic exists in a Low Magic setting, but it remains subtle, elusive, and&#xA;sometimes dark and dangerous.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-mundane&#34;&gt;The Mundane&lt;/h3&gt;&#xA;&lt;p&gt;So what do adventurers do in a Low Magic setting?  What humans have done&#xA;in every world and in every time: earn gold by unsavory means, fight wars,&#xA;rescue maidens&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; (usually for a price), eat, drink, and kill each&#xA;other over trifles.  A Low Magic world is like any other adventuring world,&#xA;only without the conveniences and safety of magic on command.&lt;/p&gt;</description>
    </item>
    <item>
      <title>D&amp;D Mundane Class Character Generation</title>
      <link>https://frank-mitchell.com/posts/dnd5-mundane-chargen/</link>
      <pubDate>Mon, 12 Feb 2024 17:20:44 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/dnd5-mundane-chargen/</guid>
      <description>&lt;p&gt;Recently I acquired &lt;a href=&#34;https://www.drivethrurpg.com/product/353582/Masters-of-the-Mundane-A-Collection-of-Character-Classes-for-LowMagic-Settings&#34;&gt;&lt;em&gt;Masters of the Mundane&lt;/em&gt;&lt;/a&gt;, a supplement with&#xA;non-magical classes that parallel the spellcasters of standard D&amp;amp;D 5e.&#xA;Since I can&amp;rsquo;t seem to &lt;a href=&#34;../unwritten-games/#low-magic-dd&#34;&gt;let go of this idea&lt;/a&gt;,&#xA;I thought I&amp;rsquo;d create a character using the &amp;ldquo;Scholar&amp;rdquo; class, which is&#xA;a &lt;em&gt;very&lt;/em&gt; rough parallel to the Wizard.&lt;/p&gt;&#xA;&lt;p&gt;Note that quoted text, below, comes from &lt;em&gt;Masters of the Mundane&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;nicodemus-torquatus&#34;&gt;Nicodemus Torquatus&lt;/h1&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Ancestry&lt;/th&gt;&#xA;          &lt;th&gt;Background&lt;/th&gt;&#xA;          &lt;th&gt;Class&lt;/th&gt;&#xA;          &lt;th&gt;Subclass&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Level&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;HD&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Max HP&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;AC&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Human&lt;/td&gt;&#xA;          &lt;td&gt;sage&lt;/td&gt;&#xA;          &lt;td&gt;Scholar&lt;/td&gt;&#xA;          &lt;td&gt;Arcanist&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;d8&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;24&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;12&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;attacks&#34;&gt;Attacks&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Weapon&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Attack&lt;/th&gt;&#xA;          &lt;th&gt;Dice&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Handaxe&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+0&lt;/td&gt;&#xA;          &lt;td&gt;1d6 slashing&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Light Crossbow&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td&gt;1d8 piercing&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Quarterstaff&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+0&lt;/td&gt;&#xA;          &lt;td&gt;1d6/1d8 bludgeoning&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;defenses&#34;&gt;Defenses&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Source&lt;/th&gt;&#xA;          &lt;th&gt;AC&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Leather&lt;/td&gt;&#xA;          &lt;td&gt;11&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Dex Mod&lt;/td&gt;&#xA;          &lt;td&gt;+1&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;TOTAL&lt;/td&gt;&#xA;          &lt;td&gt;12&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;ability-scores&#34;&gt;Ability Scores&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Str&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Dex&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Con&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Int&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Wis&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Cha&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Base&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;10&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;12&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;13&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;15&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;14&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;8&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Anc.&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&amp;ndash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&amp;ndash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&amp;ndash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&amp;ndash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&amp;ndash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&amp;ndash;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Score&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;11&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;13&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;14&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;16&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;15&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;9&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Mod.&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+0&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+2&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+2&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;-1&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;proficiencies&#34;&gt;Proficiencies&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Proficiency Bonus:&lt;/strong&gt; +2&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unwritten Games</title>
      <link>https://frank-mitchell.com/posts/unwritten-games/</link>
      <pubDate>Thu, 08 Feb 2024 03:38:36 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/unwritten-games/</guid>
      <description>&lt;p&gt;Warning: I&amp;rsquo;m going to be whining for this whole article.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s easy to come up with ideas. It&amp;rsquo;s hard to put in the work to turn the idea&#xA;into a final, finished form.  This is especially true for games, where an&#xA;initial playtest can completely upend a designer&amp;rsquo;s assumptions.&lt;/p&gt;&#xA;&lt;p&gt;Not that I&amp;rsquo;m a designer.  I&amp;rsquo;d have to finish something before I call myself&#xA;a game designer.  But I do want to finish something &amp;hellip; I just have too many&#xA;ideas of what that might be.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gridless Movement</title>
      <link>https://frank-mitchell.com/rpg/gridless-movement/</link>
      <pubDate>Sun, 04 Feb 2024 13:44:18 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/gridless-movement/</guid>
      <description>&lt;p&gt;D&amp;amp;D 5e assumes players and GMs run combats with miniatures or tokens and a&#xA;grid of 5&amp;rsquo; squares or movement measured in inches.&#xA;This becomes inconvenient if you want to run a game without a slick VTT&#xA;or perhaps entirely over Discord or voice chat.&lt;/p&gt;&#xA;&lt;p&gt;Below are some ideas to remove the 5&amp;rsquo; grid from D&amp;amp;D 5e &amp;ndash; or any other game&#xA;&amp;ndash; without sacrificing all the tactical elements of gameplay.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nimble Monsters</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/nimble-monsters/</link>
      <pubDate>Fri, 26 Jan 2024 13:18:28 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/nimble-monsters/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://nimblerpg.com&#34;&gt;Nimble&lt;/a&gt; booklet says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A DM can use any 5e compatible monster book or stat block, as written.&#xA;Only two small tweaks are made and can be done easily, on the fly:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Monster Attacks.&lt;/strong&gt; Like PCs, monsters simply roll their&#xA;damage dice + stat modifier, as usual. They miss on an attack&#xA;by rolling a 1 on their Primary Die, and crit by rolling the&#xA;maximum.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Monster AC.&lt;/strong&gt; Unlike PCs, monster armor is simplified into three&#xA;groups:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Luck Points</title>
      <link>https://frank-mitchell.com/rpg/luck-points/</link>
      <pubDate>Mon, 15 Jan 2024 02:00:27 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/luck-points/</guid>
      <description>&lt;p&gt;Note that these rules are a work in progress.&lt;/p&gt;&#xA;&lt;h2 id=&#34;inspirations&#34;&gt;Inspirations&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Luck Points&lt;/em&gt; represent the intervention of the Fates, the marvelous luck of&#xA;heroes, or something similar.  The GM should represent them with a distinctive&#xA;and non-edible token, e.g. poker chips, fake metal coins, or unusual dice&#xA;that can&amp;rsquo;t be confused with the players&amp;rsquo; dice.  The GM should have a large&#xA;supply of these tokens, &lt;em&gt;at least&lt;/em&gt; twice as many as he distributes to the&#xA;players at the start of each session.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Ecstasy of Gold: Money in RPGs</title>
      <link>https://frank-mitchell.com/rpg/money-in-rpgs/</link>
      <pubDate>Thu, 11 Jan 2024 21:49:09 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/money-in-rpgs/</guid>
      <description>&lt;h2 id=&#34;money-in-dd&#34;&gt;Money in D&amp;amp;D&lt;/h2&gt;&#xA;&lt;p&gt;For a while now I&amp;rsquo;ve been dissatisfied by the way&#xA;The World&amp;rsquo;s Most Popular&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Role-Playing Game(tm) has handled&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Commodity_money&#34; title=&#34;w:Commodity money&#34;&gt;commodity money&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In D&amp;amp;D, 1 gold piece (gp) equals 10 silver pieces (sp) equals 100 copper&#xA;pieces (cp).  Electrum pieces (ep) are worth 5 sp and platinum pieces (pp)&#xA;are worth 10 gp, but they&amp;rsquo;re not as common.  4th Edition tried to add&#xA;&amp;ldquo;astral diamonds&amp;rdquo; as a currency above platinum, but they never caught on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>House Rules for Nimble 5e v1</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/nimble-rules/</link>
      <pubDate>Fri, 22 Dec 2023 14:40:12 -0600</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/nimble-rules/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://nimble5e.com&#34;&gt;Nimble&lt;/a&gt;&lt;/em&gt; contains modifications to &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; 5th Edition rules&#xA;to simplify and streamline play.  Alas, a 32-page booklet or even a Web-based&#xA;FAQ cannot account for &lt;em&gt;every&lt;/em&gt; rule in the 300+ page &lt;em&gt;Player&amp;rsquo;s Handbook&lt;/em&gt;,&#xA;let alone &lt;em&gt;Xanathar&amp;rsquo;s Guide to Everything&lt;/em&gt;, &lt;em&gt;Tasha&amp;rsquo;s Cauldron of Everything&lt;/em&gt;,&#xA;and other non-SRD content.&lt;/p&gt;&#xA;&lt;p&gt;While the&#xA;&lt;a href=&#34;https://discord.com/channels/1163603714565734400/1176696850686955560&#34;&gt;Discord server&lt;/a&gt;&#xA;and eventually the &lt;a href=&#34;https://nimblerpg.com&#34;&gt;Web site&lt;/a&gt; hosts a FAQ for some of&#xA;the corner cases and non-SRD content not in the book, even &lt;em&gt;those&lt;/em&gt; sources&#xA;do not cover all cases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Character Generation in Nimble 5e</title>
      <link>https://frank-mitchell.com/posts/nimble-chargen/</link>
      <pubDate>Tue, 19 Dec 2023 21:48:39 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/nimble-chargen/</guid>
      <description>&lt;p&gt;Below is an example character using &lt;a href=&#34;https://nimblerpg.com&#34;&gt;&amp;ldquo;Nimble&amp;rdquo;&lt;/a&gt;, a set of&#xA;rules meant to streamline and simplify D&amp;amp;D 5e.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/iG7fz56PHJE?si=S_TIfE4NzV9DhLSQ&#34; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;fargrim-fireforge-nimble&#34;&gt;Fargrim Fireforge (&lt;em&gt;Nimble&lt;/em&gt;)&lt;/h1&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Ancestry&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/th&gt;&#xA;          &lt;th&gt;Background&lt;/th&gt;&#xA;          &lt;th&gt;Class&lt;/th&gt;&#xA;          &lt;th&gt;Subclass&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Level&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;HD&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Max HP*&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;AC Mod&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Hill Dwarf&lt;/td&gt;&#xA;          &lt;td&gt;Acolyte&lt;/td&gt;&#xA;          &lt;td&gt;Cleric&lt;/td&gt;&#xA;          &lt;td&gt;Light Domain&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;d8&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;28&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+6&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;* Including Dwarven Toughness, below&lt;/p&gt;&#xA;&lt;p&gt;::: sidebar&#xA;Because &lt;em&gt;Nimble&lt;/em&gt; removes to-hit rolls (see video and below),&#xA;the Armor Class Modifier &lt;em&gt;absorbs&lt;/em&gt; damage from a hit if the character&#xA;uses the &amp;ldquo;Block/Dodge&amp;rdquo; reaction.&#xA;:::&lt;/p&gt;</description>
    </item>
    <item>
      <title>D&amp;D YouTube Roundup 5: Alignment, West Marches, and Online</title>
      <link>https://frank-mitchell.com/posts/dnd-roundup-5/</link>
      <pubDate>Fri, 08 Dec 2023 21:27:22 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/dnd-roundup-5/</guid>
      <description>&lt;h2 id=&#34;alignment&#34;&gt;Alignment&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=MVp6Mu1dyF0&#34; title=&#34;YouTube&#34;&gt;Listen&lt;/a&gt; to a&#xA;calm, British voice explaining why the 3 alignments of &amp;ldquo;Classic&amp;rdquo; D&amp;amp;D&#xA;&amp;ndash; Lawful, Neutral, and Chaotic &amp;ndash; are superior to the 9 of AD&amp;amp;D, 3rd, and 5th.&lt;/p&gt;&#xA;&lt;p&gt;To summarize, using only those three allows for ambiguous or impulsive&#xA;moral choices while defining a &amp;ldquo;core personality&amp;rdquo; of rule-driven (religious or&#xA;not), flexible, or unreliable.  In reality most characters (and people)&#xA;are a mix of &amp;ldquo;good&amp;rdquo; and &amp;ldquo;evil&amp;rdquo; tendencies, and classifying them by the&#xA;&lt;em&gt;flexibility&lt;/em&gt; of their beliiefs more accurately models real behavior than&#xA;classifying everyone as Good, &amp;ldquo;Neutral&amp;rdquo;, or Evil all the time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The War of Sun and Light</title>
      <link>https://frank-mitchell.com/posts/theurgist-story/</link>
      <pubDate>Fri, 08 Dec 2023 18:47:41 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/theurgist-story/</guid>
      <description>&lt;p&gt;A story of Eordh.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-beginning&#34;&gt;A Beginning&lt;/h2&gt;&#xA;&lt;p&gt;Young people today hear the word &amp;ldquo;theurgist&amp;rdquo; and think &amp;ldquo;blasphemer&amp;rdquo;. &amp;ldquo;Heretic.&amp;rdquo;&#xA;&amp;ldquo;Sorcerer.&amp;rdquo;  But I am old, older than you can imagine, and I remember when&#xA;Theurgists commanded respect, reverence, gratitude sometimes.  We erected&#xA;Stelae in the wilderness to keep monsters out of human lands.  We barred the&#xA;way for invasions and barbarian raids. We tended sick and wounded commoners.&#xA;We advised lords on how to run their domains wisely and with kindness.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Artificer&#39;s Tale</title>
      <link>https://frank-mitchell.com/posts/artificer-story/</link>
      <pubDate>Fri, 08 Dec 2023 18:12:50 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/artificer-story/</guid>
      <description>&lt;p&gt;(Inspired by &lt;a href=&#34;https://docs.google.com/document/d/1rudRqzAG1yUAZykrGc_PxYvwtGg_Ctyud05V7dZOfmU&#34;&gt;&amp;ldquo;The Necromaton&amp;rdquo;&lt;/a&gt; by &lt;a href=&#34;https://youtu.be/X9s_Wf1-WU8?t=511&#34;&gt;Antonio DeMico&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-the-artificers-lament&#34;&gt;I. The Artificer&amp;rsquo;s Lament&lt;/h2&gt;&#xA;&lt;p&gt;Anaxandre Markiz Paluzarian was the greatest artificer of the Late Third Age.&lt;/p&gt;&#xA;&lt;p&gt;Anaxandre created many wonders and innovations of the High Tiriondean Empire,&#xA;including the Moving Walkways of Tirionde, the Clockwork Memory Doll,&#xA;the Cooling Apparatus of Duke Orthos, the Jeweled Songbird of Mithronde,&#xA;and the sadly underappreciated Aetheric Long Distance Distribution Engine.&#xA;Exactly how these devices worked has been lost to the centuries.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Gygax 75 Challenge Part 2: Region</title>
      <link>https://frank-mitchell.com/posts/g75-2-region/</link>
      <pubDate>Mon, 13 Nov 2023 23:09:59 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/g75-2-region/</guid>
      <description>&lt;h2 id=&#34;last-time-&#34;&gt;Last Time &amp;hellip;&lt;/h2&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;../g75-1-concept/&#34;&gt;a previous post&lt;/a&gt; I outlined the concept for an OSR&#xA;D&amp;amp;D world.  To summarize:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;As in older versions of D&amp;amp;D there are only three alignments:&#xA;Law, &lt;em&gt;Balance&lt;/em&gt;, and Chaos, plus the great Unaligned masses.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Humans dominate the world, with surviving enclaves of &amp;ldquo;Elder Peoples&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;:&#xA;Elves, Dwarves, and (technically) Halflings.&#xA;Other Elder Peoples and demi-human species may participate in human society,&#xA;e.g. the rare Antediluvians, the intimidating Lizardkin, and the unsettling&#xA;&amp;ldquo;planetouched&amp;rdquo; or Planars for short (a.k.a. &amp;ldquo;Tieflings&amp;rdquo; and &amp;ldquo;Asmimar&amp;rdquo;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>D&amp;D YouTube Roundup 4: Magic Numbers, Rules Light, Nimble</title>
      <link>https://frank-mitchell.com/posts/dnd-roundup-4/</link>
      <pubDate>Thu, 02 Nov 2023 00:50:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dnd-roundup-4/</guid>
      <description>&lt;p&gt;As I said &lt;a href=&#34;../dnd-roundup-3/&#34;&gt;before&lt;/a&gt;, I&amp;rsquo;ve been taking a deep dive into D&amp;amp;D&#xA;vlogging. Recently I found playing these videos at x1.5 speed shortens them&#xA;without losing information. Americans just talk slowly. If Jenna Coleman just&#xA;rerecorded all these videos they&amp;rsquo;d be much easier to listen to (never mind&#xA;watch).&lt;/p&gt;&#xA;&lt;p&gt;Really I wish these vloggers would write blogs instead, because I read faster&#xA;than most people talk.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-5e-dms-magic-number&#34;&gt;The 5e DM&amp;rsquo;s Magic Number(?)&lt;/h2&gt;&#xA;&lt;p&gt;Professor Dungeon Master (yet again) has an interesting video on the secret to&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=Pk4o-VOY8F0&#34; title=&#34;YouTube&#34;&gt;guesstimating target numbers&lt;/a&gt;&#xA;in D&amp;amp;D 5th edition.&lt;/p&gt;</description>
    </item>
    <item>
      <title>D&amp;D YouTube Roundup 3: 5e Hardcore Mode, Folk vs. Official, Math</title>
      <link>https://frank-mitchell.com/posts/dnd-roundup-3/</link>
      <pubDate>Sun, 29 Oct 2023 10:21:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dnd-roundup-3/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;../dnd-roundup/&#34;&gt;Once&lt;/a&gt; &lt;a href=&#34;../dnd-roundup-2/&#34;&gt;again&lt;/a&gt;, rather than work on the&#xA;&lt;a href=&#34;../g75-1-concept/&#34;&gt;Gygax 75 Challenge&lt;/a&gt;&#xA;I decided to watch some YouTube videos for D&amp;amp;D inspiration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;5e-hardcode-mode&#34;&gt;5e Hardcode Mode&lt;/h2&gt;&#xA;&lt;p&gt;After a YouTube review from, yes,&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=9ZP92GaTb84&#34; title=&#34;YouTube&#34;&gt;Professor Dungeon Master&lt;/a&gt;&#xA;I recently picked up &amp;ldquo;5e Hardcore Mode&amp;rdquo;.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;Other, written, reviews are sharply polarized between &amp;ldquo;this is garbage&amp;rdquo; and&#xA;&amp;ldquo;this is brilliant&amp;rdquo;.  One such criticism is a wall of text on RPG.net.&#xA;A second, or maybe the same one, is a wall of text on the &lt;em&gt;Giants in the&#xA;Playground&lt;/em&gt; forums.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Grimdark Age</title>
      <link>https://frank-mitchell.com/posts/the-grimdark-age/</link>
      <pubDate>Fri, 27 Oct 2023 02:09:28 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/the-grimdark-age/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;../g75-1-concept/&#34;&gt;a previous post&lt;/a&gt; I outlined a setting that has&#xA;gone through at least five ages, including the &amp;ldquo;Age of Confusion&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;../dnd-roundup-2/#deathbringer-rpg&#34;&gt;another post&lt;/a&gt; I whined about buying&#xA;a YouTuber&amp;rsquo;s two pages of rules for $4.  Not only was the content thin,&#xA;the grimdark setting just didn&amp;rsquo;t work for me.&lt;/p&gt;&#xA;&lt;p&gt;Through the weird alchemy of my brain, though, I somehow managed to plan out&#xA;how I might play out the &amp;ldquo;Age of Confusion&amp;rdquo; within these minimalist grimdark&#xA;rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>D&amp;D YouTube Roundup 2: Deathbringer RPG, Grimdark, Clerics</title>
      <link>https://frank-mitchell.com/posts/dnd-roundup-2/</link>
      <pubDate>Fri, 27 Oct 2023 01:47:59 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dnd-roundup-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;../dnd-roundup/&#34;&gt;Last time&lt;/a&gt; I linked to a few videos by&#xA;DungeonCraft&amp;rsquo;s &amp;ldquo;Professor Dungeon Master&amp;rdquo;.&#xA;Lest anyone think I&amp;rsquo;m an unqualified fan, I don&amp;rsquo;t always agree with him.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deathbringer-rpg&#34;&gt;Deathbringer RPG&lt;/h2&gt;&#xA;&lt;p&gt;I bought PDM&amp;rsquo;s &amp;ldquo;Deathbringer RPG&amp;rdquo; for $4, which works out to $1 per page.  The&#xA;first page is an introduction and an explanation on how to fold the next two&#xA;pages, printed back-to-back, into a tri-fold pamphlet.  The last page is a&#xA;larger version of the character sheet included in the pamphlet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>D&amp;D YouTube Roundup: DCC Review, Faster Combat, and More</title>
      <link>https://frank-mitchell.com/posts/dnd-roundup/</link>
      <pubDate>Tue, 24 Oct 2023 13:17:26 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dnd-roundup/</guid>
      <description>&lt;p&gt;Because of the Gygax 75 Challenge I set myself and a D&amp;amp;D 5e game that&amp;rsquo;s&#xA;(hopefully) getting off the ground, I&amp;rsquo;ve been watching various D&amp;amp;D-related&#xA;YouTube videos.  (Yeah, that&amp;rsquo;s the reason.)  Below I&amp;rsquo;m going to discuss&#xA;a few memorable ones.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dungeon-crawl-classics&#34;&gt;Dungeon Crawl Classics&lt;/h2&gt;&#xA;&lt;p&gt;This &lt;a href=&#34;https://www.youtube.com/watch?v=GJK5Vg07ktU&#34; title=&#34;YouTube&#34;&gt;YouTube review&lt;/a&gt; of&#xA;&lt;em&gt;Dungeon Crawl Classics RPG&lt;/em&gt; (DCC RPG) is tough but fair.  The highlights:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;DCC &amp;ldquo;is an engine of &amp;hellip; danger, triumph, and hilarity&amp;rdquo;.  It&amp;rsquo;s more&#xA;D&amp;amp;D than official D&amp;amp;D itself.&lt;/li&gt;&#xA;&lt;li&gt;Negatives:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DMs need experience before they tackle DCC.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Zocci dice&amp;rdquo; &amp;ndash; d3, d5, d7, etc. &amp;ndash; are atmospheric but not&#xA;statistically different from &amp;ldquo;orthodox&amp;rdquo; polyhedral dice.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;The core book could be split into a Rulebook and a Spellbook,&#xA;since spells take up at least a page for the highly variable and&#xA;random effects.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Positives(?):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Magic is unique, dangerous, and darkly funny when it backfires.&lt;/li&gt;&#xA;&lt;li&gt;The zero-level funnel filters randomly generated peasants into&#xA;a few cherished survivors.&lt;/li&gt;&#xA;&lt;li&gt;The artwork and rules evoke the older editions of D&amp;amp;D.&lt;/li&gt;&#xA;&lt;li&gt;DCC has a huge amount of fan-generated and official settings, adventures,&#xA;and variant or supplementary rules.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Ultimately DCC shies away from coddling PCs like special snowflakes who can&amp;rsquo;t&#xA;be allowed to die.  In DCC dungeon-delving is dangerous and potentially fatal.&#xA;Conversely, rolling up another character is pretty fast, especially&#xA;when starting at 0th level.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On Classic D&amp;D</title>
      <link>https://frank-mitchell.com/posts/on-classic-dnd/</link>
      <pubDate>Thu, 19 Oct 2023 01:33:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/on-classic-dnd/</guid>
      <description>&lt;p&gt;In the &amp;ldquo;Basic D&amp;amp;D&amp;rdquo; a.k.a. &amp;ldquo;Classic D&amp;amp;D&amp;rdquo; rules I prefer, players choose&#xA;from only seven classes: Fighter (or Warrior), Magic-User (or Wizard),&#xA;Priest (or Cleric), Rogue (or Thief), Dwarf, Elf, and Halfling.&#xA;(Yes, the latter three are &lt;em&gt;races&lt;/em&gt; (or properly &lt;em&gt;species&lt;/em&gt;) but also &lt;em&gt;classes&lt;/em&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;DCC, &lt;em&gt;Into the Unknown&lt;/em&gt;, &lt;em&gt;Labyrinth Lord&lt;/em&gt;, &lt;em&gt;Old School Essentials&lt;/em&gt;, etc.&#xA;all have just four human classes plus Dwarf, Elf, and Halfling.&#xA;(Third parties have written additional classes for all these games.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;)&#xA;Obviously D&amp;amp;D 5e has many more classes, and separaces species from class.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Adventurers&#39; Guild</title>
      <link>https://frank-mitchell.com/posts/adventurers-guild/</link>
      <pubDate>Tue, 17 Oct 2023 16:24:11 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/adventurers-guild/</guid>
      <description>&lt;p&gt;::: note&#xA;UPDATED 2023-10-22: Clarify text, fix typos.&lt;/p&gt;&#xA;&lt;p&gt;UPDATED 2024-02-27: Added text about &amp;ldquo;wizards&amp;rsquo; guilds&amp;rdquo; in low magic settings.&lt;/p&gt;&#xA;&lt;p&gt;UPDATED 2025-02-11: Fix more typos.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;As noted in &lt;a href=&#34;../g75-1-concept/&#34;&gt;&amp;ldquo;The Gygax 75 Challenge Part 1&amp;rdquo;&lt;/a&gt; I&amp;rsquo;m fond&#xA;of the TTRPG and JRPG trope of &amp;ldquo;adventurers&amp;rsquo; guilds&amp;rdquo;: a meeting place and&#xA;clearing house for all fetch quests and monster hunts in a kingdom.&#xA;However, stereotypical &amp;ldquo;Adventurers&amp;rsquo; Guilds&amp;rdquo; bear little relation to&#xA;medieval guilds.  While little in a fantasy RPG bears any resemblance&#xA;to historical medieval norms, it might behoove us to borrow from the&#xA;origin, purpose, and structure of medieval guilds.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Gygax 75 Challenge Part 1: Concept</title>
      <link>https://frank-mitchell.com/posts/g75-1-concept/</link>
      <pubDate>Sat, 30 Sep 2023 10:17:00 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/g75-1-concept/</guid>
      <description>&lt;p&gt;Instead of &lt;a href=&#34;http://nanowrimo.org&#34;&gt;NaNoWriMo&lt;/a&gt;, I&amp;rsquo;ll be doing this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-the-gygax-75-challenge&#34;&gt;What is the &amp;ldquo;Gygax 75 Challenge&amp;rdquo;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://rayotus.itch.io/gygax75&#34;&gt;&amp;ldquo;The Gygax 75 Challenge&amp;rdquo;&lt;/a&gt; is both the&#xA;title and premise of a PDF by Ray Otus.  To quote the website:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This workbook is based on an article written by Gary Gygax in 1975, less&#xA;than 12 months after D&amp;amp;D was released. It encapsulates his thinking at the&#xA;time about how to get your own D&amp;amp;D campaign world started. I have taken his&#xA;general advice and parsed it out into achievable, bite-sized prompts &amp;amp; goals&#xA;for a week-by-week program.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Warp Ships</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/warp/</link>
      <pubDate>Sat, 23 Sep 2023 15:48:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/warp/</guid>
      <description>&lt;p&gt;Part of a series on the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An Alcubierre Ring (a.k.a. &amp;ldquo;Warp Drive&amp;rdquo;) generates a bubble of space time&#xA;(the &amp;ldquo;warp bubble&amp;rdquo;) which carries the ship along the interface between normal&#xA;space and hyperspace at superluminal velocities.&lt;/p&gt;&#xA;&lt;p&gt;::: sidebar&#xA;These sidebars translate the text to specific rules for the &lt;em&gt;n&lt;/em&gt;D6-based&#xA;&lt;a href=&#34;../rules-minisix/&#34;&gt;Mini-Six&lt;/a&gt; and various 2D6-based systems like&#xA;&lt;a href=&#34;../rules-quantum/&#34;&gt;Cepheus Quantum&lt;/a&gt;, Quantum Starfarer, and Cepheus Deluxe.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;warp-travel&#34;&gt;Warp Travel&lt;/h2&gt;&#xA;&lt;p&gt;The realspace speed of a warp-powered starship depends on its Warp Factor (WF).&#xA;WF 0 can attain speeds up to 20% the speed of light &lt;em&gt;C&lt;/em&gt;; warp ships use this&#xA;effect to replace conventional maneuver drives.  WF 1 is light speed.  Each WF&#xA;above 1 multiplies speed by a factor of about 5.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Quantum Rules</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/rules-quantum/</link>
      <pubDate>Sat, 23 Sep 2023 15:21:13 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/rules-quantum/</guid>
      <description>&lt;p&gt;Part of a series on the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This game incorporates text from &lt;a href=&#34;https://frank-mitchell.com/rpg/cepheus-quantum/&#34;&gt;Cepheus Quantum&lt;/a&gt; by Stellagama Publishing.&#xA;It is therefore licensed under the&#xA;&lt;a href=&#34;https://creativecommons.org/licenses/by-sa/4.0/&#34;&gt;Creative Commons Attribution Share-Alike International License 4.0&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-basic-game-mechanic&#34;&gt;The Basic Game Mechanic&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Throw 2d6:&lt;/strong&gt; throw two six-sided dice and add the results together, add the&#xA;skill modifier, and compare to difficulty. If the total equals or exceeds&#xA;the difficulty number, you succeed. Otherwise, you fail. Skill notation:&#xA;&amp;ldquo;throw &lt;strong&gt;Technical 6+&lt;/strong&gt;&amp;rdquo; = throw two dice, add them together and add the&#xA;&lt;strong&gt;Technical&lt;/strong&gt; skill, and if the total equals or exceeds 6, you succeed.&#xA;If you lack a skill, throw at -1 penalty (i.e., subtract 1 from the throw).&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Ships of Alliance Space (Quantum)</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/ships-quantum/</link>
      <pubDate>Thu, 07 Sep 2023 08:46:51 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/ships-quantum/</guid>
      <description>&lt;p&gt;Part of a series about the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; These rules are a work in progress.&lt;/p&gt;&#xA;&lt;p&gt;These rules supplement those in &lt;a href=&#34;../rules-quantum/&#34;&gt;Quantum Rules&lt;/a&gt;&#xA;and &lt;a href=&#34;../warp/&#34;&gt;Warp Ships&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ship-weapon-systems&#34;&gt;Ship Weapon Systems&lt;/h2&gt;&#xA;&lt;p&gt;Except for Exo-Beam weapons, only half a ship&amp;rsquo;s conventional weapons&#xA;(rounded up) can fire at any one target.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Code&lt;/th&gt;&#xA;          &lt;th&gt;Direct Weapon&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;TL&lt;/th&gt;&#xA;          &lt;th&gt;Damage&lt;/th&gt;&#xA;          &lt;th&gt;Depletion&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;EB&lt;/td&gt;&#xA;          &lt;td&gt;Exo-Beam&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6+&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../warp/#exo-beams&#34;&gt;&lt;em&gt;varies&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;GV&lt;/td&gt;&#xA;          &lt;td&gt;Grav Beam&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;4+&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../warp/#grav-beams&#34;&gt;&lt;em&gt;special&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;HP&lt;/td&gt;&#xA;          &lt;td&gt;Heavy Particle Beam&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;5+&lt;/td&gt;&#xA;          &lt;td&gt;Super-Heavy&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;LL&lt;/td&gt;&#xA;          &lt;td&gt;Pulse Laser&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;4+&lt;/td&gt;&#xA;          &lt;td&gt;Light&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;ML&lt;/td&gt;&#xA;          &lt;td&gt;Missile Launcher&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3+&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../warp/#warp-missiles&#34;&gt;&lt;em&gt;varies&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;varies&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;PP&lt;/td&gt;&#xA;          &lt;td&gt;Particle Beam&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;5+&lt;/td&gt;&#xA;          &lt;td&gt;Heavy&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;RG&lt;/td&gt;&#xA;          &lt;td&gt;Rail Gun&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3+&lt;/td&gt;&#xA;          &lt;td&gt;Heavy&lt;/td&gt;&#xA;          &lt;td&gt;2D6&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;ships-of-the-stellar-alliance&#34;&gt;Ships of the Stellar Alliance&lt;/h2&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;../fleet/#ship-classes&#34;&gt;Ship Classes&lt;/a&gt; for descriptions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Into the Unknown Character Generation</title>
      <link>https://frank-mitchell.com/posts/into-the-unknown-chargen/</link>
      <pubDate>Thu, 07 Sep 2023 03:44:20 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/into-the-unknown-chargen/</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://www.drivethrurpg.com/browse/pub/13311/O5R-Games&#34;&gt;Into the Unknown&lt;/a&gt;&lt;/em&gt; uses D&amp;amp;D 5th Edition rules to recreate Basic/Expert D&amp;amp;D&#xA;rules from the 1980s.  It comes as five distinct booklets (harking back to&#xA;Original D&amp;amp;D), two of which are meant for DMs.  Quoting from the description:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;How is this different from B/X or 5e?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Into the Unknown&lt;/em&gt; is based on 5th edition of the world&amp;rsquo;s most popular&#xA;roleplaying game and is fully compatible with it to the extent that you can&#xA;easily create a 5th edition character and use him in a game of&#xA;&lt;em&gt;Into the Unknown&lt;/em&gt; and vice versa, without any conversion.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hard Alignments for D&amp;D 5, OSR, and other RPGs</title>
      <link>https://frank-mitchell.com/rpg/dnd5e/dnd-hard-alignment/</link>
      <pubDate>Tue, 05 Sep 2023 14:23:32 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/dnd5e/dnd-hard-alignment/</guid>
      <description>&lt;p&gt;::: note&#xA;This article is based on &lt;a href=&#34;https://frank-mitchell.com/posts/alignment-hard-mode/&#34;&gt;&amp;ldquo;Alignment Hard Mode&amp;rdquo;&lt;/a&gt;&#xA;and &lt;a href=&#34;https://frank-mitchell.com/posts/frankenverse-dnd/&#34;&gt;&amp;ldquo;Frankenverse in D&amp;amp;D 5: Old School Alignments&amp;rdquo;&lt;/a&gt;,&#xA;which itself relies on rules by Lynn Willis, Jason Durall, and Ben Monroe.&#xA;See the &lt;a href=&#34;#bibliography&#34;&gt;Bibliography&lt;/a&gt; for details.&lt;/p&gt;&#xA;&lt;p&gt;It is still a work in progress.&lt;/p&gt;&#xA;&lt;p&gt;2024-09-13: Use &amp;ldquo;True Neutral&amp;rdquo; as the adjective for an adherent of Balance.&lt;/p&gt;&#xA;&lt;p&gt;2025-04-14: Move list of gods to a new &lt;a href=&#34;../dnd-hard-alignment-gods/&#34;&gt;document&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;2025-04-17: Replace the term DM with &amp;ldquo;Referee&amp;rdquo;.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;This article proposes an &amp;ldquo;alignment system with teeth&amp;rdquo; for D&amp;amp;D.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Frankenverse in D&amp;D 5: Chess Pieces in the Cosmic Struggle</title>
      <link>https://frank-mitchell.com/posts/frankenverse-dnd-pieces/</link>
      <pubDate>Mon, 04 Sep 2023 21:33:05 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/frankenverse-dnd-pieces/</guid>
      <description>&lt;p&gt;This continues the &lt;a href=&#34;../frankenverse-dnd/&#34;&gt;&amp;ldquo;Frankenverse in D&amp;amp;D 5&amp;rdquo;&lt;/a&gt; series.&#xA;Having replaced the Great Wheel cosmology&#xA;&lt;a href=&#34;../frankenverse-dnd-planes&#34;&gt;with my own&lt;/a&gt;,&#xA;I now redefine the celestials, fiends, and other residents of the Outer Planes&#xA;in the new yet eternal chess game between Law and Chaos.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Influences include Steve Jackson Games&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/In_Nomine_(role-playing_game)&#34; title=&#34;w:In Nomine (role-playing game)&#34;&gt;In Nomine&lt;/a&gt;,&#xA;some YouTube videos and supplements from &amp;ldquo;Pointy Hat&amp;rdquo; (Antonio Demico),&#xA;a little bit of Kevin Crawford&amp;rsquo;s OSR RPG &lt;em&gt;&lt;a href=&#34;https://www.drivethrurpg.com/product/185960/Godbound-A-Game-of-Divine-Heroes-Deluxe-Edition&#34;&gt;Godbound&lt;/a&gt;&lt;/em&gt;,&#xA;the approach to divinity in &lt;a href=&#34;https://www.drivethrurpg.com/product/257176/Primal-Order-Collection-BUNDLE&#34;&gt;The Primal Order&lt;/a&gt;,&#xA;and of course shallow knowledge of angelology, demonology, Gnostic theology,&#xA;and other real-world religions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Frankenverse in D&amp;D 5: The Planes</title>
      <link>https://frank-mitchell.com/posts/frankenverse-dnd-planes/</link>
      <pubDate>Sat, 02 Sep 2023 00:08:24 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/frankenverse-dnd-planes/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;../frankenverse-dnd/&#34;&gt;a prior article&lt;/a&gt; I began adapting D&amp;amp;D 5e to a new&#xA;cosmology with only the alignments of Law, Chaos, and Balance (plus Unaligned).&#xA;Here I outline a new cosmology for these reduced alignments based on the&#xA;&lt;a href=&#34;../frankenverse/&#34;&gt;Uncounted Worlds&lt;/a&gt;, a.k.a. the Frankenverse.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;Below is the Uncounted Worlds model with the Astral Plane and Corporeal Worlds&#xA;from another perspective.&lt;/p&gt;&#xA;&lt;p&gt;The diagram highlights the Corporeal World of &amp;ldquo;Eordh&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;,&#xA;the liminal Ethereal Plane, Shadow Plane, and Faerie Realm,&#xA;a few other Corporeal Worlds, the Astral Plane,&#xA;and a few demi-planes:&#xA;the Infernal Realms, the Supernal Realms, two Divine Realms, and Jinnistan.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Frankenverse in D&amp;D 5: Old School Alignments</title>
      <link>https://frank-mitchell.com/posts/frankenverse-dnd/</link>
      <pubDate>Fri, 01 Sep 2023 23:11:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/frankenverse-dnd/</guid>
      <description>&lt;p&gt;Following on from &lt;a href=&#34;../alignment-heresy/&#34;&gt;previous&lt;/a&gt;&#xA;&lt;a href=&#34;../alignment-redux/&#34;&gt;alignment&lt;/a&gt;&#xA;&lt;a href=&#34;../alignment-hard-mode/&#34;&gt;posts&lt;/a&gt;,&#xA;I&amp;rsquo;d like to present a D&amp;amp;D 5e cosmology based partly on the&#xA;&lt;a href=&#34;../frankenverse/&#34;&gt;Frankenverse&lt;/a&gt; and partly on elements of &lt;a href=&#34;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_(1974)&#34; title=&#34;w:Dungeons &amp;amp; Dragons (1974)&#34;&gt;Original&lt;/a&gt; D&amp;amp;D,&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_Basic_Set&#34; title=&#34;w:Dungeons &amp;amp; Dragons Basic Set&#34;&gt;Basic&lt;/a&gt; / &lt;a href=&#34;https://rpgmuseum.fandom.com/wiki/Dungeons_%26_Dragons_BECMI_edition&#34;&gt;BECMI&lt;/a&gt; D&amp;amp;D, and the D&amp;amp;D &lt;a href=&#34;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_Rules_Cyclopedia&#34; title=&#34;w:Rules Cyclopedia&#34;&gt;&lt;em&gt;Rules Cyclopedia&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_(1974)&#34; title=&#34;w:Dungeons &amp;amp; Dragons (1974)&#34;&gt;Original&lt;/a&gt; D&amp;amp;D had only three alignments &amp;ndash; Law, Neutrality, and Chaos &amp;ndash;&#xA;just as in the works of Michael Moorcock.&lt;/li&gt;&#xA;&lt;li&gt;Clerics didn&amp;rsquo;t need gods in &lt;a href=&#34;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_(1974)&#34; title=&#34;w:Dungeons &amp;amp; Dragons (1974)&#34;&gt;Original&lt;/a&gt; D&amp;amp;D and some editions of &lt;a href=&#34;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_Basic_Set&#34; title=&#34;w:Dungeons &amp;amp; Dragons Basic Set&#34;&gt;Basic&lt;/a&gt;.&#xA;They followed either Law (clerics) or Chaos (anti-clerics).&lt;/li&gt;&#xA;&lt;li&gt;In &lt;a href=&#34;https://rpgmuseum.fandom.com/wiki/Dungeons_%26_Dragons_BECMI_edition&#34;&gt;BECMI&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Dungeons_%26_Dragons_Rules_Cyclopedia&#34; title=&#34;w:Rules Cyclopedia&#34;&gt;RC&lt;/a&gt;&#xA;players could elevate their characters to Immortals (gods)&#xA;implying that the gods of one age were the heroes of a prior age.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-four-alignments&#34;&gt;The Four Alignments&lt;/h2&gt;&#xA;&lt;p&gt;The four alignments in this multiverse are Balance, Chaos, Law, and Unaligned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alignment Hard Mode</title>
      <link>https://frank-mitchell.com/posts/alignment-hard-mode/</link>
      <pubDate>Tue, 29 Aug 2023 05:13:06 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/alignment-hard-mode/</guid>
      <description>&lt;h2 id=&#34;alignment-huh-what-is-it-good-for&#34;&gt;Alignment? Huh! What Is It Good For?&lt;/h2&gt;&#xA;&lt;p&gt;A long time ago I wrote &lt;a href=&#34;../alignment-heresy/&#34;&gt;two&lt;/a&gt;&#xA;&lt;a href=&#34;../alignment-redux/&#34;&gt;posts&lt;/a&gt; about D&amp;amp;D&amp;rsquo;s notion of &amp;ldquo;alignment&amp;rdquo;.&#xA;Recently some YouTube videos about D&amp;amp;D 5e started talking about alignment,&#xA;and I just had to post about it.&#xA;(I thought I was out &amp;hellip;)&lt;/p&gt;&#xA;&lt;p&gt;The other posts may not have made this explicit, but let me say this for&#xA;the record:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Alignment makes an interesting premise for a world or multiverse in which&#xA;cosmic forces vie for dominance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>D&amp;D 5 Character Generation</title>
      <link>https://frank-mitchell.com/posts/dnd5e-chargen/</link>
      <pubDate>Fri, 25 Aug 2023 14:27:36 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dnd5e-chargen/</guid>
      <description>&lt;p&gt;I have yet to play D&amp;amp;D 5th edition.&lt;/p&gt;&#xA;&lt;p&gt;Thus, to experience what a majority of modern roleplayers have experienced&#xA;already, I&amp;rsquo;m going to walk through my creation of a D&amp;amp;D 5e character.&lt;/p&gt;&#xA;&lt;h2 id=&#34;making-a-character&#34;&gt;Making a Character&lt;/h2&gt;&#xA;&lt;h3 id=&#34;concept&#34;&gt;Concept&lt;/h3&gt;&#xA;&lt;p&gt;In a D&amp;amp;D 4e mini-campaign I played a Tiefling Warlord&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.  5th doesn&amp;rsquo;t&#xA;have warlords, so I decided on a paladin instead, because a Tiefling Paladin&#xA;struck me as funny and because Charisma is a secondary Paladin characteristic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DCC RPG Character Generation</title>
      <link>https://frank-mitchell.com/posts/dccrpg-chargen/</link>
      <pubDate>Wed, 23 Aug 2023 11:29:33 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dccrpg-chargen/</guid>
      <description>&lt;h2 id=&#34;what-is-dcc-rpg&#34;&gt;What is DCC RPG?&lt;/h2&gt;&#xA;&lt;p&gt;In brief, the Dungeon Crawl Classics RPG is an Old School Rules reimagining&#xA;of D&amp;amp;D Basic Edition from the 1970s and 1980s with a lot more randomness.&lt;/p&gt;&#xA;&lt;p&gt;The publisher, Goodman Games, provides a &lt;a href=&#34;https://goodman-games.com/wp-content/uploads/2023/05/2023_DCC_QSR_completeLinks_ScreenRes.pdf&#34;&gt;quickstart&lt;/a&gt;, from which I drew&#xA;&lt;em&gt;most&lt;/em&gt; of the following.  (I also own the full rules in PDF.)&lt;/p&gt;&#xA;&lt;h3 id=&#34;major-differences&#34;&gt;Major Differences&lt;/h3&gt;&#xA;&lt;p&gt;The aforementioned Quickstart draws these comparisons with D&amp;amp;D 5th Edition:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DCC RPG does not use proficiency bonuses, advantage&#xA;and disadvantage, specific skills, or spell slots.&lt;/li&gt;&#xA;&lt;li&gt;Instead of advantage and disadvantage, a player might&#xA;roll a die with more sides (a larger die) or one with fewer&#xA;sides (a smaller die) depending on if circumstances&#xA;favor or hinder them. You could roll a 1d12 to hit an&#xA;opponent if conditions aren’t in your favor, but you also&#xA;might roll a 30-sided die to attack if you’re in a position&#xA;of superiority!&lt;/li&gt;&#xA;&lt;li&gt;Ability points and even race are randomly determined&#xA;rather than chosen. While this might sound limiting, in&#xA;practice it’s been observed that players often end up&#xA;with characters they never could have imagined on their&#xA;own and love these unexpected heroes.&lt;/li&gt;&#xA;&lt;li&gt;Classes and races are one and the same. You are a wizard or an elf.&lt;/li&gt;&#xA;&lt;li&gt;There are only seven classes in DCC RPG.&lt;/li&gt;&#xA;&lt;li&gt;There are only three saving throws (Fortitude, Reflex,&#xA;and Will) and these are not ability saves.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;DCC RPG does not have prestige classes&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;, attacks of opportunity,&#xA;feats, or skill points&lt;sup id=&#34;fnref1:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#xA;&lt;li&gt;There are no backgrounds in DCC RPG, but there are&#xA;occupations which might suggest what your character&#xA;did before becoming an adventurer. These occupations&#xA;suggest rather than codify what types of knowledge and&#xA;talents a character possesses.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generally, like those earliest editions, the game defines a character&amp;rsquo;s&#xA;adventuring abilities and leaves everything else up to &amp;ldquo;roleplaying&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Frankenverse</title>
      <link>https://frank-mitchell.com/posts/frankenverse/</link>
      <pubDate>Fri, 21 Jul 2023 12:27:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/frankenverse/</guid>
      <description>&lt;p&gt;The &amp;ldquo;Frankenverse&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; is what I&amp;rsquo;m calling the multiverse in which I set my&#xA;homebrew settings (and fiction, if I ever finish any of that).  While I&#xA;tried &lt;a href=&#34;./plane-configurations.pdf&#34;&gt;various other concepts (PDF)&lt;/a&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&#xA;I finally settled on the ones below.&lt;/p&gt;&#xA;&lt;h2 id=&#34;structure-of-the-multiverse&#34;&gt;Structure of the Multiverse&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-five-layers&#34;&gt;The Five Layers&lt;/h3&gt;&#xA;&lt;p&gt;The larger Multiverse has five layers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;worlds-and-planes-1.svg&#34; alt=&#34;Causal, Psychic, Astral, and Corporeal&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;the-causal-plane&#34;&gt;The Causal Plane&lt;/h4&gt;&#xA;&lt;p&gt;The Causal Plane &amp;ndash; along with any hypothesized &amp;ldquo;higher&amp;rdquo; planes &amp;ndash;&#xA;is an incomprehensible place where time and space have no meaning.&#xA;It&amp;rsquo;s said that mortal minds touching this plane briefly produces&#xA;precognition, retrocognition, and more esoteric forms of ESP,&#xA;and that more than brief contact brings madness.&#xA;Some religions believe that beings closest to the Creator live here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Elf Game Again, And What Comes Next</title>
      <link>https://frank-mitchell.com/posts/elf-game-again/</link>
      <pubDate>Fri, 21 Jul 2023 12:07:35 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/elf-game-again/</guid>
      <description>&lt;p&gt;Over July 4th I started thinking about &lt;a href=&#34;https://frank-mitchell.com/tags/elf-game&#34;&gt;&amp;ldquo;The Elf Game&amp;rdquo;&lt;/a&gt; again.&#xA;For those who came in late, thanks for coming, and &amp;ldquo;The Elf Game&amp;rdquo; is basically&#xA;my take on Classic D&amp;amp;D if elves were the focus and humans just a race class.&lt;/p&gt;&#xA;&lt;p&gt;I suspect what prompted this outbreak was &lt;a href=&#34;https://www.drivethrurpg.com/product/185960/Godbound-A-Game-of-Divine-Heroes-Deluxe-Edition&#34;&gt;Godbound&lt;/a&gt;, Sine Nomine&amp;rsquo;s &amp;ldquo;old&#xA;school&amp;rdquo; game of demigods in a broken world.  Among other achievements&#xA;Godbound introduced a classless variant of Classic D&amp;amp;D &lt;em&gt;without&lt;/em&gt; an awkward&#xA;skill system grafted on.  Instead it uses &amp;ldquo;Facts&amp;rdquo;, freeform text that grants&#xA;bonuses to attribute rolls for tasks and situations mentioned in a Fact.&#xA;It&amp;rsquo;s Fate Aspects, &lt;em&gt;Barbarians of Lemuria&lt;/em&gt; Careers, &lt;em&gt;Shadow of the Demon&#xA;Lord&lt;/em&gt; Occupations, Risus Cliches, and PDQ Qualities all rolled into one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shadow Vale: The Setting</title>
      <link>https://frank-mitchell.com/posts/shadow-vale-setting/</link>
      <pubDate>Fri, 21 Jul 2023 11:54:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/shadow-vale-setting/</guid>
      <description>&lt;p&gt;This is the larger setting of &lt;a href=&#34;../shadow-vale-system/&#34;&gt;&amp;ldquo;Shadow Vale&amp;rdquo;&lt;/a&gt;.&#xA;A future post &lt;em&gt;may&lt;/em&gt; drill down into Shadow Vale itself.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;the-three-realms&#34;&gt;The Three Realms&lt;/h1&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not certain whether the Three Realms, a.k.a. &amp;ldquo;Otherworld&amp;rdquo;&#xA;is a Corporeal World, a Demiplane, or something else entirely.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./worlds-and-planes-2.svg&#34; alt=&#34;The Three Realms&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;While it appears to be a single contiguous albeit dimension-defying planet,&#xA;it in reality consists of three distinct worlds:&#xA;the &lt;a href=&#34;#the-supernal-realm&#34;&gt;Supernal Realm&lt;/a&gt;,&#xA;the &lt;a href=&#34;#the-shadow-vale&#34;&gt;Shadow Vale&lt;/a&gt;,&#xA;and the &lt;a href=&#34;#the-infernal-realm&#34;&gt;Infernal Realm&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-supernal-realm&#34;&gt;The Supernal Realm&lt;/h2&gt;&#xA;&lt;p&gt;Inside the Outer Wall lies a lush, rolling land of forests and farms.&#xA;Most &lt;a href=&#34;#supernals&#34;&gt;Supernal&lt;/a&gt;s &amp;ndash; the inhabitants of this realm &amp;ndash; lead a bucolic life.&#xA;Only a few Supernals pass the trials that permit them to serve&#xA;the &lt;a href=&#34;#paragons&#34;&gt;Paragon&lt;/a&gt;s, godlike masters of this realm,&#xA;and the &lt;a href=&#34;#tetrarchs&#34;&gt;Tetrarch&lt;/a&gt;s, its creators.&#xA;Despite the seemingly endless landscape,&#xA;inhabitants always have two landmarks:&#xA;the dark Outer Wall always visible around the edge,&#xA;and the shining Citadel of the Tetrarchs at the center&#xA;protected by the transparent Inner Wall.&lt;/p&gt;</description>
    </item>
    <item>
      <title>XTIDL</title>
      <link>https://frank-mitchell.com/projects/far-future/xtidl/</link>
      <pubDate>Sun, 16 Jul 2023 20:44:23 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/xtidl/</guid>
      <description>&lt;p&gt;Until I can spec this out properly, I&amp;rsquo;ll just quote from&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/unwanted-software-thoughts-syndrome/&#34;&gt;&amp;ldquo;Unwanted Software Thoughts Syndrome&amp;rdquo;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;type-interface-definition-language-tidl&#34;&gt;Type Interface Definition Language (TIDL)&lt;/h2&gt;&#xA;&lt;p&gt;Originally I wrote:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An IDL that is essentially the datatype and interface parts of the&#xA;full &lt;a href=&#34;https://frank-mitchell.com/projects/far-future/teufel-notes/&#34;&gt;Teufel&lt;/a&gt; language, with an accompanying code generator.&#xA;It will generate stub and skeleton code in C much like CORBA.&#xA;An extension will generate skeleton code for modules in Ruby, Lua,&#xA;Python, and other scripting languages, not unlike SWIG.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TPP</title>
      <link>https://frank-mitchell.com/projects/future/tpp/</link>
      <pubDate>Wed, 12 Jul 2023 12:13:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/future/tpp/</guid>
      <description>&lt;p&gt;Until I can spec this out properly, I&amp;rsquo;ll quote an old post:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;TPP stands for either Text Pre-Parser or Template Pre-Parser.&#xA;The original design derived from the C pre-processor and a simplified&#xA;&lt;a href=&#34;http://www.gobosoft.com/eiffel/gobo/portability/gepp.html&#34;&gt;Eiffel version&lt;/a&gt;.&#xA;Having encountered &lt;a href=&#34;http://www.stringtemplate.org&#34;&gt;StringTemplate&lt;/a&gt;, however,&#xA;I thought of doing a Lua interpretation of that instead.&#xA;(Maybe with a more readable syntax.)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;preprocessor&#34;&gt;Preprocessor&lt;/h2&gt;&#xA;&lt;h3 id=&#34;conditionals&#34;&gt;Conditionals&lt;/h3&gt;&#xA;&lt;p&gt;Leaving aside operator precedence for a moment, this is the EBNF for&#xA;all conditional expressions in an &lt;code&gt;ifdef&lt;/code&gt; and &lt;code&gt;ifndef&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lua-CSP</title>
      <link>https://frank-mitchell.com/projects/far-future/luacsp/</link>
      <pubDate>Wed, 12 Jul 2023 12:13:28 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/luacsp/</guid>
      <description>&lt;p&gt;Until I can spec this out properly, I&amp;rsquo;ll just quote an old post:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.lua.org/pil&#34;&gt;&lt;em&gt;Programming in Lua&lt;/em&gt;, 4th Edition&lt;/a&gt; ended&#xA;with an example of multiple Lua interpreters, each in its own OS thread,&#xA;sending text messages to each other.&#xA;I can refine that into a module for &amp;ldquo;Channels&amp;rdquo;, &amp;ldquo;Messages&amp;rdquo;, and&#xA;&amp;ldquo;Processes&amp;rdquo; (POSIX or C11 threads, since Lua already has cooperative&#xA;single-process Threads).&#xA;Combined with a non-blocking IO module one could implement any kind&#xA;of server with worker threads or chained stages: HTTP, message queue,&#xA;pub/sub, etc.&#xA;All you&amp;rsquo;d need are the underlying modules and some Lua scripts.&#xA;(Maybe a configuration file to tie it all together.)&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>luaenv</title>
      <link>https://frank-mitchell.com/projects/far-future/luaenv/</link>
      <pubDate>Wed, 12 Jul 2023 12:13:13 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/luaenv/</guid>
      <description>&lt;p&gt;::: note&#xA;UPDATED 2024-11-08: see &lt;a href=&#34;#update-2024-11-08&#34;&gt;below&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;UPDATED 2024-11-09: see &lt;a href=&#34;#update-2024-11-09&#34;&gt;below&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Until I can spec this out fully, I&amp;rsquo;m just going to quote my original blurb:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Even though &lt;a href=&#34;http://www.lua.org&#34;&gt;Lua&lt;/a&gt; was intended as an embedded language,&#xA;its standalone interpreter makes testing modules much easier. However,&#xA;testing against multiple versions of Lua isn&amp;rsquo;t exactly straightforward.&#xA;&lt;a href=&#34;https://luarocks.org/&#34;&gt;luarocks&lt;/a&gt;, a module manager similar to Ruby Gems,&#xA;hard-codes the path to Lua not only in config files but the &lt;code&gt;luarocks&lt;/code&gt; script&#xA;itself. Worse, Lua&amp;rsquo;s module loader assumes Lua is installed in &lt;code&gt;/usr/local&lt;/code&gt;&#xA;on Unix systems. Users can override the search path in the standlone&#xA;interpreter by setting an environment variable, and within the interpreter one&#xA;can change &lt;code&gt;package.path&lt;/code&gt; and &lt;code&gt;package.cpath&lt;/code&gt;. It might be simpler, though,&#xA;to change those defaults to the directory in which Lua is installed&#xA;&amp;ndash; found once in &lt;em&gt;luaconfig.h&lt;/em&gt; &amp;ndash; and then compile the interpreter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TypeLib</title>
      <link>https://frank-mitchell.com/projects/far-future/typelib/</link>
      <pubDate>Wed, 12 Jul 2023 01:52:51 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/typelib/</guid>
      <description>&lt;p&gt;Until I can spec this out properly, I&amp;rsquo;ll just quote from&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/unwanted-software-thoughts-syndrome/&#34;&gt;&amp;ldquo;Unwanted Software Thoughts Syndrome&amp;rdquo;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;TypeLib is essentially&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A library of other useful data structures, probably developed as a&#xA;side effect of &lt;a href=&#34;../mstring/&#34;&gt;M-Strings&lt;/a&gt; and using similar memory&#xA;managed techniques.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>A Non-Review of the Vaesen RPG</title>
      <link>https://frank-mitchell.com/posts/vaesen-nonreview/</link>
      <pubDate>Sat, 01 Jul 2023 17:47:58 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/vaesen-nonreview/</guid>
      <description>&lt;p&gt;Earlier articles have covered the Free League Publishing RPG&#xA;&lt;a href=&#34;https://freeleaguepublishing.com/en/games/vaesen/&#34;&gt;&lt;em&gt;Vaesen&lt;/em&gt;&lt;/a&gt;:&#xA;random comments on the&#xA;&lt;a href=&#34;../vaesen-preview/&#34;&gt;preview&lt;/a&gt; and nearly complete&#xA;&lt;a href=&#34;../vaesen-alpha-comments/&#34;&gt;alpha&lt;/a&gt;,&#xA;a walkthrough of &lt;a href=&#34;../vaesen-chargen/&#34;&gt;character generation&lt;/a&gt;,&#xA;a (too?) detailed analysis of&#xA;&lt;a href=&#34;../yet-more-year-zero-again/&#34;&gt;difficulty factors&lt;/a&gt;,&#xA;and some very broad&#xA;&lt;a href=&#34;../year-zero-chargen/#system-comparisons&#34;&gt;comparisons&lt;/a&gt;&#xA;with other YZE games.&lt;/p&gt;&#xA;&lt;p&gt;In mid-2021 I said&#xA;&lt;a href=&#34;../vaesen-chargen/#next-time&#34;&gt;this&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;hellip; I&amp;rsquo;ll give an overview of the system and drill down on what&#xA;I think are the most interesting bits:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;establishing and enhancing a Headquarters&lt;/li&gt;&#xA;&lt;li&gt;the structure of adventures, or Mysteries as the book calls them.&lt;/li&gt;&#xA;&lt;li&gt;how vaesen work, mechanically and thematically&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is that article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Non-Review of the Mutant Year Zero RPG</title>
      <link>https://frank-mitchell.com/posts/myz-nonreview/</link>
      <pubDate>Sat, 01 Jul 2023 09:04:50 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/myz-nonreview/</guid>
      <description>&lt;p&gt;::: note&#xA;As the cliché goes, this non-review wasn&amp;rsquo;t so much finished as&#xA;abandoned.  Apologies.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Previously I said &lt;a href=&#34;../year-zero-chargen/#final-comments&#34;&gt;this&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Mutant Year Zero would probably be next [favorite] as the progenitor&#xA;of the rest. Post-apocalyptic settings with &amp;ldquo;mutants&amp;rdquo; have become a&#xA;little cliché, but MYZ has solid mechanics and a larger game of&#xA;rebuilding civilization.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Since I&amp;rsquo;ve referred to &lt;em&gt;Mutant Year Zero&lt;/em&gt; as one of the RPGs I might&#xA;want to play (or if necessary run) at some point,&#xA;I may neeed to drill down into what it is and what I like about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>D100 Opposed Rolls</title>
      <link>https://frank-mitchell.com/posts/d100-opposed-rolls/</link>
      <pubDate>Wed, 28 Jun 2023 14:05:30 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/d100-opposed-rolls/</guid>
      <description>&lt;p&gt;::: note&#xA;2024-03-24: Fix bug in code and tables, explain all die rolling algorithms&#xA;in plain English.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;After the terrible code I wrote in &lt;a href=&#34;../openquest-ritual/&#34;&gt;a previous post&lt;/a&gt;&#xA;I wanted to see if a) if I could still write less ugly code and b) what&#xA;the opposed roll &amp;ldquo;resistance table&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; would look like for other&#xA;d100 systems.&lt;/p&gt;&#xA;&lt;p&gt;I therefore set out to calculate opposed rolls for the four major extant&#xA;d100 systems that I know about:&#xA;&lt;em&gt;Basic Roleplaying&lt;/em&gt; (Chaosium),&#xA;&lt;em&gt;Call of Cthulhu&lt;/em&gt; 7th ed (Chaosium),&#xA;&lt;em&gt;Mythras&lt;/em&gt; (Design Mechanism),&#xA;and &lt;em&gt;OpenQuest&lt;/em&gt; (D101 Games).&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Keep It Simple ...</title>
      <link>https://frank-mitchell.com/posts/openquest-simpler/</link>
      <pubDate>Mon, 26 Jun 2023 16:25:09 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-simpler/</guid>
      <description>&lt;p&gt;As I look over what I&amp;rsquo;ve written &lt;a href=&#34;../openquest-magic/&#34;&gt;here&lt;/a&gt; and in my private&#xA;notes I&amp;rsquo;m struck by how much work I&amp;rsquo;ll have to do for the settings I&amp;rsquo;ve&#xA;defined so far:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Nearly everything needs &lt;a href=&#34;../openquest-magic/#alchemy&#34;&gt;alchemy&lt;/a&gt;, &lt;a href=&#34;../openquest-magic/#artificing&#34;&gt;artificing&lt;/a&gt;, or &lt;a href=&#34;../openquest-magic/#ritual-magic&#34;&gt;ritual&lt;/a&gt; systems.&#xA;So far I&amp;rsquo;ve &lt;a href=&#34;../openquest-ritual/&#34;&gt;yet to define them&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Many settings need further systems because I originally defined them for&#xA;other games in and out of the d100 family.  &lt;a href=&#34;https://www.drivethrurpg.com/product/128323/Magic-World&#34;&gt;&lt;em&gt;Magic World&lt;/em&gt;&lt;/a&gt; for&#xA;example assumes magic (&amp;ldquo;sorcery&amp;rdquo;) is rare and disturbing, so that&#xA;leaves out all of &lt;a href=&#34;../openquest/#grigoria&#34;&gt;&amp;ldquo;Grigoria&amp;rdquo;&lt;/a&gt;.&#xA;&lt;a href=&#34;../openquest/#world-of-qi&#34;&gt;&amp;ldquo;World of Qi&amp;rdquo;&lt;/a&gt; started as a setting for&#xA;&lt;a href=&#34;../world-of-qi/&#34;&gt;a custom system&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Toward A Ritual Magic System</title>
      <link>https://frank-mitchell.com/posts/openquest-ritual/</link>
      <pubDate>Mon, 26 Jun 2023 08:32:27 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-ritual/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2023 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;If anyone besides me got anything out of&#xA;&lt;a href=&#34;../openquest-magic/&#34;&gt;&amp;ldquo;OpenQuest: Other Magic&amp;rdquo;&lt;/a&gt; it&amp;rsquo;s that I need to develop&#xA;systems for Ritual Magic and Making Magic Stuff (Alchemy/Artificing/Herbology)&#xA;ASAP. (&lt;a href=&#34;#why&#34;&gt;Why, you ask?&lt;/a&gt;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Metered Thaums (a.k.a. Limited Mana)</title>
      <link>https://frank-mitchell.com/posts/openquest-mana/</link>
      <pubDate>Tue, 13 Jun 2023 11:28:47 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-mana/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2023 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;2023-06-27: Renamed Mana to Thaum(s), Limited Mana to Metered Thaums,&#xA;and Mana Meter to Thaum-o-meter.  I&amp;rsquo;m not sorry.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Other Magic</title>
      <link>https://frank-mitchell.com/posts/openquest-magic/</link>
      <pubDate>Tue, 13 Jun 2023 05:43:25 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-magic/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2023 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;MODIFIED 2023-06-19: New and revised explanations of&#xA;&lt;a href=&#34;#making&#34;&gt;Alchemy and Artificing&lt;/a&gt;,&#xA;&lt;a href=&#34;#herb-lore&#34;&gt;Herb Lore&lt;/a&gt;,&#xA;&lt;a href=&#34;#ritual-magic&#34;&gt;Ritual Magic&lt;/a&gt;,&#xA;&lt;a href=&#34;#witchcraft&#34;&gt;Witchcraft&lt;/a&gt;,&#xA;&lt;a href=&#34;#zanathar-religions&#34;&gt;Zanathari Religion&lt;/a&gt;,&#xA;and &lt;a href=&#34;#magic-systems-and-rules&#34;&gt;Magic Systems and Rules&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Non-Review of Tunnels &amp; Trolls</title>
      <link>https://frank-mitchell.com/posts/tnt-nonreview/</link>
      <pubDate>Mon, 12 Jun 2023 12:45:54 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/tnt-nonreview/</guid>
      <description>&lt;p&gt;This is an introduction to &lt;em&gt;Tunnels &amp;amp; Trolls&lt;/em&gt; I wrote for players back in 2011.&#xA;I&amp;rsquo;ve updated it for the latest edition.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-troll-world&#34;&gt;Setting: Troll World&lt;/h2&gt;&#xA;&lt;p&gt;Ken St. Andre created T&amp;amp;T in 1975 after deciding D&amp;amp;D&amp;rsquo;s combat was too&#xA;complicated, and he could write his own.  T&amp;amp;T uses only six-sided dice &amp;ndash;&#xA;sometimes a lot &amp;ndash; and eschews tactical combat for quicker resolution.&lt;/p&gt;&#xA;&lt;p&gt;T&amp;amp;T doesn&amp;rsquo;t take itself too seriously.  Most notably, spells have silly names&#xA;like &amp;ldquo;Take That You Fiend!&amp;rdquo; (TTYF, a basic attack spell) or &amp;ldquo;Poor Baby&amp;rdquo; (a&#xA;basic healing spell).  While Serious Role Players may have problems with that&#xA;&amp;ndash; after all, pretending to be wizards and elves is serious business &amp;ndash; one&#xA;might need a vacation in Trollworld after fighting Chaos and foul sorcery in&#xA;the Dung Ages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tunnels &amp; Trolls House Rules</title>
      <link>https://frank-mitchell.com/rpg/tnt-house-rules/</link>
      <pubDate>Mon, 12 Jun 2023 09:51:37 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/tnt-house-rules/</guid>
      <description>&lt;p&gt;Here are some house rules I put together for a game back in 2011.&lt;/p&gt;&#xA;&lt;p&gt;This is a work in progress; my notes from back then are a mess&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, so as I&#xA;dig up new ones (or come up with something today) I&amp;rsquo;ll add them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;character-generation&#34;&gt;Character Generation&lt;/h2&gt;&#xA;&lt;p&gt;There are three ways to generate characteristics.&lt;/p&gt;&#xA;&lt;h3 id=&#34;roll-dice-in-order&#34;&gt;Roll Dice In Order&lt;/h3&gt;&#xA;&lt;p&gt;The 8th Edition specifies this method: roll 3d6 using the TARO&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; rule&#xA;for all attributes in order: STR, CON, DEX, SPD, &amp;hellip;  Then apply Kindred&#xA;multipliers and continue with character generation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mini Six Bare Knuckle Edition (v. 0.7 RC2)</title>
      <link>https://frank-mitchell.com/rpg/minisix-bke/</link>
      <pubDate>Sun, 11 Jun 2023 15:40:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/minisix-bke/</guid>
      <description>&lt;h2 id=&#34;editors-note&#34;&gt;Editor&amp;rsquo;s Note&lt;/h2&gt;&#xA;&lt;p&gt;This is the complete text of &amp;ldquo;Mini Six: Bare Knuckle Edition&amp;rdquo; as downloaded&#xA;from &lt;a href=&#34;https://docs.google.com/document/d/1lWqfrbbJDfPxqFaUWbPpQm-LTJqK6xBN8iD83xWHQRo/edit&#34;&gt;Google Docs&lt;/a&gt; on 2023-06-10.  My only changes were to add&#xA;Markdown and whitespace and to make minor spelling and formatting fixes&#xA;as needed.  If this copy does not accurately reflect the original text&#xA;I take full responsibility.&lt;/p&gt;&#xA;&lt;p&gt;As Antipaladin Games publishes new versions I will update this text with&#xA;the differences.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ndash; Frank Mitchell&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;mini-six-bare-knuckle-edition&#34;&gt;Mini Six: Bare Knuckle Edition&lt;/h1&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Version 0.7 RC2&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cepheus Quantum</title>
      <link>https://frank-mitchell.com/rpg/cepheus-quantum/</link>
      <pubDate>Fri, 09 Jun 2023 19:33:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/cepheus-quantum/</guid>
      <description>&lt;h2 id=&#34;editors-note&#34;&gt;Editor&amp;rsquo;s Note&lt;/h2&gt;&#xA;&lt;p&gt;This document attempts to preserve the text of&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/product/280143/Cepheus-Quantum-Revised-Edition&#34;&gt;&amp;ldquo;Cepheus Quantum Revised Edition&amp;rdquo;&lt;/a&gt;&#xA;but with necessary formatting changes for Markdown and some small&#xA;spelling and punctuation differences.  Any divergences from the original&#xA;text that change the meaning are the fault of the editor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Frank Mitchell&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;The following text is published under the &lt;a href=&#34;https://creativecommons.org/licenses/by-sa/4.0/&#34;&gt;Creative Commons&#xA;Attribution-ShareAlike International License (CC BY-SA 4.0)&lt;/a&gt; by&#xA;Stellagama Publishing.  See &lt;a href=&#34;#legal&#34;&gt;LEGAL&lt;/a&gt;, below.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;cepheus-quantum&#34;&gt;Cepheus Quantum&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Revised Edition&lt;/strong&gt; by &lt;em&gt;Stellagama Publishing&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>In Praise of Tunnels &amp; Trolls</title>
      <link>https://frank-mitchell.com/posts/praise-tnt/</link>
      <pubDate>Thu, 08 Jun 2023 02:47:40 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/praise-tnt/</guid>
      <description>&lt;p&gt;::: note&#xA;2024-03-06: Minor corrections&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;A few (thousand?) words about this game.&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-old&#34;&gt;It&amp;rsquo;s Old&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s the second oldest RPG ever printed.  Allegedly.  I suspect some&#xA;tiny forgotten homebrew D&amp;amp;D may have beaten it to &amp;ldquo;press&amp;rdquo;.  But for&#xA;now we&amp;rsquo;ll stipulate it&amp;rsquo;s second oldest.&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-not-popular&#34;&gt;It&amp;rsquo;s Not Popular&lt;/h2&gt;&#xA;&lt;p&gt;T&amp;amp;T has never been as popular as D&amp;amp;D (nothing has been), or even as&#xA;popular as &lt;em&gt;RuneQuest&lt;/em&gt; (second most popular in the Long Long Ago).&#xA;Maybe it&amp;rsquo;s too weird.  Maybe the early T&amp;amp;T editions had too many&#xA;D&amp;amp;D-isms like levels that made it seem like a cheap knock-off.&#xA;Maybe Flying Buffalo never had the luck or business savvy to parley&#xA;their game into a household name.  Maybe they had too many irons&#xA;in the fire with a play-by-mail business back in the day.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Warp Ships in Mini-Six</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/ship-rules-minisix/</link>
      <pubDate>Tue, 06 Jun 2023 19:08:16 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/ship-rules-minisix/</guid>
      <description>&lt;p&gt;Part of a series about the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; These rules are a work in progress.&lt;/p&gt;&#xA;&lt;p&gt;The following rules supplement or supersede those of &lt;a href=&#34;https://frank-mitchell.com/rpg/minisix-bke/&#34;&gt;Mini-Six&lt;/a&gt;&#xA;and/or &lt;a href=&#34;../warp/&#34;&gt;Warp Ships&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;warp-ships-as-mini-six-vehicles&#34;&gt;Warp Ships as Mini-Six Vehicles&lt;/h2&gt;&#xA;&lt;p&gt;To convert &lt;a href=&#34;../ships-quantum/&#34;&gt;Quantum statistics for ships&lt;/a&gt; to Mini-Six&amp;rsquo;s&#xA;Vehicle rules, cross-reference the Quantum value(s) to the corresponding&#xA;Mini-Six value, as noted in the table below.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Mini-Six&lt;/th&gt;&#xA;          &lt;th&gt;Derived From&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Skill&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;always&lt;/em&gt; &lt;strong&gt;Pilot&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Scale&lt;/td&gt;&#xA;          &lt;td&gt;Size&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Body&lt;/td&gt;&#xA;          &lt;td&gt;Armor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Maneuverability (MNV)&lt;/td&gt;&#xA;          &lt;td&gt;Agility&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Move&lt;/td&gt;&#xA;          &lt;td&gt;Agility&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Crew&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;unchanged&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Psg&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;unchanged&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Weapons&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;see below&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Cargo&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;undefined&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;For more about vehicle statistics, see the full &lt;a href=&#34;https://frank-mitchell.com/rpg/minisix-bke/#vehicles&#34;&gt;Vehicle&lt;/a&gt; rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tech Levels: A Comparison</title>
      <link>https://frank-mitchell.com/rpg/techlevels/</link>
      <pubDate>Tue, 06 Jun 2023 16:20:14 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/techlevels/</guid>
      <description>&lt;p&gt;::: note&#xA;2024-06-23: Added &lt;a href=&#34;#ftln&#34;&gt;&lt;em&gt;Faster Than Light: Nomad&lt;/em&gt;&amp;rsquo;s Technological Ages&lt;/a&gt;&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s impossible to know the future, but various science fiction and multi-genre&#xA;games have tried.  Below are seven radically different &amp;ldquo;Technology Level&amp;rdquo; or&#xA;&amp;ldquo;Progress Level&amp;rdquo; systems from six different tabletop role playing games&#xA;and one guy who just thinks about them a lot.&lt;/p&gt;&#xA;&lt;h2 id=&#34;d20&#34;&gt;d20 Modern Progress Levels&lt;/h2&gt;&#xA;&lt;p&gt;From the d20 Future SRD.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;PL&lt;/th&gt;&#xA;          &lt;th&gt;Title&lt;/th&gt;&#xA;          &lt;th&gt;Key Technologies&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;Stone Age&lt;/td&gt;&#xA;          &lt;td&gt;fire, textiles, domestication, agriculture&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Bronze/Iron Age&lt;/td&gt;&#xA;          &lt;td&gt;metal working, communication, empires&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;Middle Ages&lt;/td&gt;&#xA;          &lt;td&gt;printing, sea travel, middle class&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;Age of Reason&lt;/td&gt;&#xA;          &lt;td&gt;&amp;ldquo;science&amp;rdquo;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;Industrial Age&lt;/td&gt;&#xA;          &lt;td&gt;steam, electricity&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;Information Age&lt;/td&gt;&#xA;          &lt;td&gt;computers, fission, internal combustion engine&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;Fusion Age&lt;/td&gt;&#xA;          &lt;td&gt;fusion power, intra-solar travel, cyberwear, gene-splicing&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;7&lt;/td&gt;&#xA;          &lt;td&gt;Gravity Age&lt;/td&gt;&#xA;          &lt;td&gt;&amp;ldquo;gravity induction reactor&amp;rdquo;, star drives&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;Energy Age&lt;/td&gt;&#xA;          &lt;td&gt;&amp;ldquo;power plants the size of marbles&amp;rdquo;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;9&lt;/td&gt;&#xA;          &lt;td&gt;&amp;ldquo;beyond reach or comprehension&amp;rdquo;&lt;/td&gt;&#xA;          &lt;td&gt;subatomic assembly, folding space, time travel&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;verdict-on-d20-pls&#34;&gt;Verdict on d20 PLs&lt;/h3&gt;&#xA;&lt;p&gt;Progress Levels give equal attention to past and future&#xA;eras, but lack detail.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: The Midlands</title>
      <link>https://frank-mitchell.com/posts/openquest-midland/</link>
      <pubDate>Tue, 06 Jun 2023 14:03:06 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-midland/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2023 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;MODIFIED 2023-06-13: Moved notes on magic to &lt;a href=&#34;../openquest-magic/&#34;&gt;a new post&lt;/a&gt;.&#xA;:::&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Mini-Six Rules</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/rules-minisix/</link>
      <pubDate>Fri, 02 Jun 2023 23:27:26 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/rules-minisix/</guid>
      <description>&lt;p&gt;Part of a series about the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;These rules extend &lt;a href=&#34;https://frank-mitchell.com/rpg/minisix-bke/&#34;&gt;Mini-Six&lt;/a&gt; Bare Knuckle edition.&#xA;Unless superseded by the rules below or in the&#xA;&lt;a href=&#34;../ship-rules-minisix&#34;&gt;ship rules&lt;/a&gt;,&#xA;all rules in that document save &lt;a href=&#34;https://frank-mitchell.com/rpg/minisix-bke/#freeform-magic&#34;&gt;&amp;ldquo;Freeform Magic&amp;rdquo;&lt;/a&gt; are in effect.&lt;/p&gt;&#xA;&lt;h2 id=&#34;character-generation&#34;&gt;Character Generation&lt;/h2&gt;&#xA;&lt;p&gt;Below are the allowed skills and Perks in games set in the Stellar Alliance.&lt;/p&gt;&#xA;&lt;h3 id=&#34;skill-list&#34;&gt;Skill List&lt;/h3&gt;&#xA;&lt;dl&gt;&#xA;&lt;dt&gt;&lt;strong&gt;Might&lt;/strong&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;Brawling*, Close Combat*, Knife*, Lift, Stamina, Staff*, Sword*&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;strong&gt;Agility&lt;/strong&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;Athletics, Bow*, BFG*, Drive, Dodge*, Exo-Gun*, Gunnery*, Pickpocket,&#xA;Pilot, Pistol*, Rifle*, Stealth, Throwing*&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;strong&gt;Wits&lt;/strong&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;History, Computer, Language, Medicine, Navigation, Pick Locks, Repair,&#xA;Search, Science, Tracking&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;strong&gt;Charm&lt;/strong&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;Command, Courage, Diplomacy, Persuasion, Seduce, Streetwise&lt;/dd&gt;&#xA;&lt;/dl&gt;&#xA;&lt;p&gt;* denotes a combat skill; no specializations allowed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: The Polar Continent</title>
      <link>https://frank-mitchell.com/posts/openquest-polar/</link>
      <pubDate>Fri, 02 Jun 2023 20:43:28 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest-polar/</guid>
      <description>&lt;p&gt;::: license&#xA;This work is based on the OpenQuest System Resource Document (found at&#xA;&lt;a href=&#34;https://openquestrpg.com/srd&#34;&gt;https://openquestrpg.com/srd&lt;/a&gt;), a D101 Games product developed, authored by&#xA;Newt Newport with Paul Mitchener. OpenQuest System Resource Document&#xA;© 2021 by Newt Newport with Paul Mitchener is licensed under Attribution&#xA;4.0 International. To view a copy of this license, visit&#xA;&lt;a href=&#34;http://creativecommons.org/licenses/by/4.0/&#34;&gt;http://creativecommons.org/licenses/by/4.0/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following text is © 2023 by Frank Mitchell. All rights reserved.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The following refers to a prior article on&#xA;&lt;a href=&#34;../openquest/&#34;&gt;OpenQuest&lt;/a&gt;,&#xA;some D100 games listed &lt;a href=&#34;https://frank-mitchell.com/rpg/magic-in-d100/#annotated-bibliography&#34;&gt;here&lt;/a&gt;,&#xA;&lt;em&gt;and&lt;/em&gt; some &lt;a href=&#34;../openquest/#bibliography&#34;&gt;non-D100 games&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: The Away Team</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/away-team/</link>
      <pubDate>Fri, 02 Jun 2023 12:09:32 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/away-team/</guid>
      <description>&lt;p&gt;Part of a series about the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;basics&#34;&gt;Basics&lt;/h2&gt;&#xA;&lt;h3 id=&#34;what-is-an-away-team&#34;&gt;What Is An Away Team?&lt;/h3&gt;&#xA;&lt;p&gt;An Away Team explores unknown planets and civilizations when scans from orbit&#xA;will not suffice.  &amp;ldquo;Space Exploration&amp;rdquo; is part of the Alliance Fleet&amp;rsquo;s full&#xA;name (Alliance Space Exploration and Peacekeeping Fleet), but the Alliance&#xA;explores more than space anomalies and solar systems.&lt;/p&gt;&#xA;&lt;h3 id=&#34;who-is-on-an-away-team&#34;&gt;Who Is On An Away Team?&lt;/h3&gt;&#xA;&lt;p&gt;The Captain or Executive Officer assigns junior officers or crewmen&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;with a broad range of skills.  Typically this includes:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Background</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/background/</link>
      <pubDate>Tue, 30 May 2023 02:24:52 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/background/</guid>
      <description>&lt;p&gt;Part of a series about the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;The Alliance started when four species &amp;ndash; Minervans, Nommos, Rephaim, and&#xA;Terans &amp;ndash; joined together in 2467 to found an interstellar government.&#xA;In the 26th century the Stellar Alliance spanned over three hundred worlds.&#xA;Its decentralized yet unified government, its advanced technology,&#xA;and its ideals have irrevocably changed this quadrant of the galaxy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;history&#34;&gt;History&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-solar-alliance&#34;&gt;The Solar Alliance&lt;/h3&gt;&#xA;&lt;p&gt;In the twenty-fourth century the Earth Commonwealth, the Republic of Mars,&#xA;and the Union of Outer Planets put their differences aside to form the&#xA;Solar Alliance.  This required a great deal of work to harmonize three&#xA;legal systems.  This new alliance guaranteed the rights of parahumans,&#xA;genetically enhanced sapient animals (&amp;ldquo;uplifts&amp;rdquo;), and artificial general&#xA;intelligences (&amp;ldquo;Synthetics&amp;rdquo;).  The Outer Planets shared their&#xA;technologies to synthesize food which abolished hunger on Earth, Earth&#xA;shared its biological diversity to enhance the life support of Outer Planets&#xA;colonies, and Mars shared its terraforming expertise to improve the&#xA;environments of Earth and the Outer Planets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Fleets of the Alliance</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/fleet/</link>
      <pubDate>Tue, 30 May 2023 02:24:52 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/fleet/</guid>
      <description>&lt;p&gt;Part of a series about the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-alliance-exploration-fleet&#34;&gt;The Alliance Exploration Fleet&lt;/h2&gt;&#xA;&lt;p&gt;All crewmen aboard an Exploration Fleet starship belong to one of six services.&#xA;Each wears a color-coded uniform during their time in that service,&#xA;and each service has a slightly different rank structure.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Command&lt;/strong&gt; (violet)&#xA;officers not only command a ship.  They conduct diplomatic&#xA;missions, first contacts, and negotiations between hostile parties.&#xA;Command staff usually did tours through other services before they&#xA;underwent grueling instruction in motivational psychology, ethnology,&#xA;diplomacy, tactics, strategy, and political science.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Stellar Alliance: Technology</title>
      <link>https://frank-mitchell.com/rpg/stellar-alliance/tech/</link>
      <pubDate>Tue, 30 May 2023 02:24:52 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/stellar-alliance/tech/</guid>
      <description>&lt;p&gt;Part of a series about the &lt;a href=&#34;..&#34;&gt;Stellar Alliance&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tech-levels&#34;&gt;Tech Levels&lt;/h2&gt;&#xA;&lt;p&gt;Tech Levels often help members of one civilization understand the&#xA;difference in technology in another civilization.  Alliance legislation&#xA;has referred to the scheme below, but other authorities have defined&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/techlevels/&#34;&gt;other schemes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;dl&gt;&#xA;&lt;dt&gt;&lt;strong&gt;TL:&lt;/strong&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;Tech Level, a rough guide to the technological capabilities of a civilization&#xA;and the sophistication of their artifacts.&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;strong&gt;RTL:&lt;/strong&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;Relative Tech Levels, i.e. difference between the average for interstellar&#xA;civilizations and a particular TL.&lt;/dd&gt;&#xA;&lt;/dl&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;TL&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;RTL&lt;/th&gt;&#xA;          &lt;th&gt;Description&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Earth History / &lt;em&gt;Other Civilizations&lt;/em&gt;&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;0&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;-5&lt;/td&gt;&#xA;          &lt;td&gt;Stone Age&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;lt; -3000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;-4&lt;/td&gt;&#xA;          &lt;td&gt;Bronze Age, Iron Age, Medieval&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;-3000 &amp;hellip; 1450&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;-3&lt;/td&gt;&#xA;          &lt;td&gt;Age of Sail, Industrial Age&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;1450 &amp;hellip; 1950&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;-2&lt;/td&gt;&#xA;          &lt;td&gt;Information Age, Space Age&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;1950 &amp;hellip; 2200&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;4&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;-1&lt;/td&gt;&#xA;          &lt;td&gt;Interplanetary Age&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2100&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; &amp;hellip; 2300&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;5&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;Interstellar Age&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2300 &amp;hellip; 2400&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+1&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;&lt;strong&gt;Alliance Age&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2400 &amp;hellip; ????&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;7&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+2&lt;/td&gt;&#xA;          &lt;td&gt;Transhuman Age&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;../background/#rivals-and-mysteries&#34;&gt;&lt;em&gt;Transhuman Commonwealth&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;8&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+3&lt;/td&gt;&#xA;          &lt;td&gt;Teletransport Age&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;../background/#the-taelian-incident&#34;&gt;(&lt;em&gt;Outer Ones&lt;/em&gt;?)&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;9&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+4&lt;/td&gt;&#xA;          &lt;td&gt;Sufficiently Advanced Technology&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;../background/#the-first&#34;&gt;&lt;em&gt;Dominion of the First&lt;/em&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;10&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;+5&lt;/td&gt;&#xA;          &lt;td&gt;Weakly Godlike Entities&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;em&gt;Ylem Wraiths&lt;/em&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;::: sidebar&#xA;Purely hypothetically, if a GM needed a random TL they could just throw&#xA;2D6-2 for a TL or 5dF for an RTL.&#xA;:::&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenQuest: Rekindling the Flame</title>
      <link>https://frank-mitchell.com/posts/openquest/</link>
      <pubDate>Mon, 29 May 2023 12:37:27 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/openquest/</guid>
      <description>&lt;p&gt;::: note&#xA;MODIFIED 2023-06-11: Added &lt;a href=&#34;#godsplat&#34;&gt;Godsplat&lt;/a&gt; and &lt;a href=&#34;#orclands&#34;&gt;Orclands&lt;/a&gt;,&#xA;updated &lt;a href=&#34;#kutheria&#34;&gt;Kutheria&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Recently I discovered both the third edition of&#xA;&lt;a href=&#34;https://d101games.com/product/openquest-3rd-edition/&#34;&gt;OpenQuest&lt;/a&gt;&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/product/347827/OpenQuest-3rd-Edition&#34;&gt;(dtrpg)&lt;/a&gt;&#xA;and the&#xA;&lt;a href=&#34;https://d101games.com/product/openquest-system-resource-document/&#34;&gt;OpenQuest SRD&lt;/a&gt;.&#xA;Having had a long history with &lt;em&gt;RuneQuest&lt;/em&gt; and &lt;em&gt;Basic Roleplaying&lt;/em&gt;,&#xA;it rekindled my desire to do something with a d100 system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;history&#34;&gt;History&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;OpenQuest&lt;/em&gt; began as an adaptation of Mongoose&amp;rsquo;s OGL &amp;ldquo;Runic SRD&amp;rdquo; for its&#xA;version of &lt;em&gt;RuneQuest&lt;/em&gt; in the mid-2000s.&#xA;&lt;em&gt;OpenQuest&lt;/em&gt;&amp;rsquo;s author, Newt Newport, wanted something&#xA;simpler to run, reminiscent of &lt;em&gt;RuneQuest II&lt;/em&gt; in 1978.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A World of Qi: Notes</title>
      <link>https://frank-mitchell.com/posts/world-of-qi-notes/</link>
      <pubDate>Tue, 23 May 2023 19:50:54 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/world-of-qi-notes/</guid>
      <description>&lt;p&gt;Here are some bits and pieces from &lt;a href=&#34;../world-of-qi/&#34;&gt;&amp;ldquo;A World of Qi&amp;rdquo;&lt;/a&gt;&#xA;that I cut for length, but felt compelled to write here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;A Note on Numbers:&lt;/em&gt; Most are pretty speculative.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Earth Qi probably tops out at 10 or 12, since it represents dice rolled&#xA;to avoid death, among other things.&lt;/li&gt;&#xA;&lt;li&gt;Basic Qi &amp;ndash; Fire, Metal, Water, Wood &amp;ndash; and Chaos represent pools of points&#xA;expended to fuel effects or neutralize damage.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Middle World creatures have natural Qi comparable to their Earth Qi.&lt;/li&gt;&#xA;&lt;li&gt;Lower World creatures can store and channel Chaos to fuel their spells.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Subtle Qi &amp;ndash; Light, Shadow, and Aether &amp;ndash; represent dice rolled to resist&#xA;damage or generate power for effects, much like Earth Qi.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All corporeal conscious beings have Aether Qi equal to their Earth Qi.&lt;/li&gt;&#xA;&lt;li&gt;Upper World spirits have Light and Shadow Qi only.&lt;/li&gt;&#xA;&lt;li&gt;True Demons are composed entirely of Chaos energy.&lt;/li&gt;&#xA;&lt;li&gt;Some Spirits use their Aether Qi directly to influence the Aether Qi&#xA;of other beings.  True Demons and Upper World spirits are immune.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;creatures-of-the-middle-world&#34;&gt;Creatures of The Middle World&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Species&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Earth Qi&lt;/th&gt;&#xA;          &lt;th&gt;Other Qi&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Animal&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1 .. 12&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Beast Folk&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3 .. 9&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Human&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3 .. 6&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Adept&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6 .. 9&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;one of&lt;/em&gt; Fire, Metal, Water, Wood&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Alchemist&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3 .. 9&lt;/td&gt;&#xA;          &lt;td&gt;alchemical preparations and artifacts&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Hero&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6 .. 12&lt;/td&gt;&#xA;          &lt;td&gt;Fire, Metal, Water, Wood&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Paragon&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6 .. 12&lt;/td&gt;&#xA;          &lt;td&gt;Earth talents&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Saint&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6 .. 12&lt;/td&gt;&#xA;          &lt;td&gt;Light&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, Shadow&lt;sup id=&#34;fnref1:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Sorcerer&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3 .. 9&lt;/td&gt;&#xA;          &lt;td&gt;sorcery pool&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Spirit-Touched&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3 .. 9&lt;/td&gt;&#xA;          &lt;td&gt;Aether talents&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Magical Animal&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1 .. 9&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;one of&lt;/em&gt; Fire, Metal, Water, Wood&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Monster&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Chaos&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- of Sorcery&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;9 .. 18&lt;/td&gt;&#xA;          &lt;td&gt;&lt;em&gt;possibly powers&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Spirit Folk&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Gnome&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3 .. 9&lt;/td&gt;&#xA;          &lt;td&gt;Metal&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Ifrit&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;9 .. 15&lt;/td&gt;&#xA;          &lt;td&gt;Fire&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;- Kitsune&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6 .. 12&lt;/td&gt;&#xA;          &lt;td&gt;Wood&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Undead&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2 .. 12&lt;/td&gt;&#xA;          &lt;td&gt;Aether &lt;em&gt;or&lt;/em&gt; Chaos&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;animals&#34;&gt;Animals&lt;/h3&gt;&#xA;&lt;p&gt;Normal animals lack reasoning and language ability.  Innumerable species&#xA;abound in nature, while civilization domesticates only a handful of species:&#xA;horses, riding birds, oxen, chickens, and dogs.&#xA;(Cats aren&amp;rsquo;t truly domesticated.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>A World of Qi</title>
      <link>https://frank-mitchell.com/posts/world-of-qi/</link>
      <pubDate>Sat, 13 May 2023 20:11:15 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/world-of-qi/</guid>
      <description>&lt;p&gt;This is a sketch of an RPG system and setting I&amp;rsquo;ve been toying with for a while.&#xA;For now I&amp;rsquo;m abandoning it rather than finishing it, but maybe it will inspire&#xA;some hypothetical reader.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;In a possibly Asian-influenced fantasy world, a minority of humans&#xA;use a multi-faceted power called Qi to battle monsters,&#xA;create magical artifacts, and work miracles.&lt;/p&gt;&#xA;&lt;h2 id=&#34;types-of-qi&#34;&gt;Types of Qi&lt;/h2&gt;&#xA;&lt;p&gt;In the Middle World &amp;ndash; the world in which mortal beings live &amp;ndash; there are&#xA;five types of Qi:&lt;/p&gt;</description>
    </item>
    <item>
      <title>ELTN For Lua (Work in Progress)</title>
      <link>https://frank-mitchell.com/projects/eltn-lua/</link>
      <pubDate>Wed, 12 Apr 2023 15:41:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/eltn-lua/</guid>
      <description>&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;As indicated in &lt;a href=&#34;../eltn-c/&#34;&gt;ELTN-C&lt;/a&gt;, we intend to keep the Lua API for&#xA;ELTN as simple as possible.  We therefore will implement only the&#xA;following functions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;eltn.parse&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;eltn.parse_file&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;eltn.emit&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;eltn.error&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;documentation&#34;&gt;Documentation&lt;/h2&gt;&#xA;&lt;h3 id=&#34;eltnparse&#34;&gt;&lt;code&gt;eltn.parse&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;eltn.parse&lt;/strong&gt;(&lt;em&gt;eltn_string&lt;/em&gt;) =&amp;gt; &lt;em&gt;eltn_table&lt;/em&gt; | &lt;code&gt;nil&lt;/code&gt;, &lt;em&gt;error&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Converts a string of ELTN text into (usually) nested tables.&#xA;If the ELTN text is malformed or invalid, returns nil with an&#xA;error string.&lt;/p&gt;&#xA;&lt;h3 id=&#34;eltnparse_file&#34;&gt;&lt;code&gt;eltn.parse_file&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;eltn.parse_file&lt;/strong&gt;(&lt;em&gt;filename&lt;/em&gt;) =&amp;gt; &lt;em&gt;eltn_table&lt;/em&gt; | &lt;code&gt;nil&lt;/code&gt;, &lt;em&gt;error&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Opens a file of ELTN text and parses it into (usually) nested tables.&#xA;If the ELTN text is malformed or invalid, returns nil with an&#xA;error string.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ELTN in C (Work in Progress)</title>
      <link>https://frank-mitchell.com/projects/eltn-c/</link>
      <pubDate>Wed, 12 Apr 2023 15:41:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/eltn-c/</guid>
      <description>&lt;p&gt;This project will create a C library to parse and emit &lt;a href=&#34;https://frank-mitchell.com/projects/eltn/&#34;&gt;ELTN&lt;/a&gt; text.&#xA;It will then provide wrappers for various languages including Lua, Python,&#xA;and Ruby.&lt;/p&gt;&#xA;&lt;h2 id=&#34;design&#34;&gt;Design&lt;/h2&gt;&#xA;&lt;p&gt;The ELTN parser is a pull parser similar to the &lt;a href=&#34;https://frank-mitchell.com/projects/java/jsonpp/&#34;&gt;JSON Parser&lt;/a&gt;&#xA;implemented in Java.  The Buffer object takes in text, either&#xA;passed directly or read through a callback, and stores it in an expandable&#xA;ring buffer.  When the Parser is queried for the next event, it asks the&#xA;the Lexer for tokens, which prompts the Lexer to read characters from the&#xA;Buffer and transforms individual characters into tokens which the Parser&#xA;then interprets into events.&lt;/p&gt;</description>
    </item>
    <item>
      <title>JSON in C</title>
      <link>https://frank-mitchell.com/projects/future/json-c/</link>
      <pubDate>Wed, 12 Apr 2023 15:41:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/future/json-c/</guid>
      <description>&lt;p&gt;This project will create a C library to parse and emit &lt;a href=&#34;https://json.org&#34;&gt;JSON&lt;/a&gt;.&#xA;It will then provide wrappers for various languages including Lua, Python,&#xA;and Ruby.&lt;/p&gt;&#xA;&lt;h2 id=&#34;design&#34;&gt;Design&lt;/h2&gt;&#xA;&lt;p&gt;Since there are so many C JSON parsers already, this one will try to do things&#xA;a little differently:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It will offer a &amp;ldquo;pull parser&amp;rdquo; interface modeled after &lt;a href=&#34;https://frank-mitchell.com/projects/java/jsonpp/&#34;&gt;JSONPP&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The implementation will attempt to avoid allocation and leaks in general.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;api&#34;&gt;API&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#bc7a00&#34;&gt;&amp;lt;stdbool.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#bc7a00&#34;&gt;&amp;lt;stdint.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;enum&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    SYNTAX_ERROR &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    START_STREAM,   &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* initial state before parsing */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    START_ARRAY,    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read `[` */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    END_ARRAY,      &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read `]` */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    START_OBJECT,   &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read `{` */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    END_OBJECT,     &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read `}` */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    KEY_NAME,       &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read key for Object */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    VALUE_NULL,     &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read `null` */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    VALUE_TRUE,     &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read `true` */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    VALUE_FALSE,    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read `false` */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    VALUE_NUMBER,   &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read JSON Number */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    VALUE_STRING,   &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* read JSON String */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    END_STREAM      &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/* reached final state */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} Json_Event;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;struct&lt;/span&gt; _Json_Pull_Parser Json_Pull_Parser;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * A convenience type for a single byte character.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Per the JSON spec, the parser can only parse ASCII characters.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;char&lt;/span&gt;    &lt;span style=&#34;color:#b00040&#34;&gt;byte_t&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * A convernience type for a byte in a UTF-8 sequence.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;uint8_t&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;utf8_t&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * A callback to fetch more characters from a file, file descriptor, socket,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * or anything else.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * `data` is the same pointer passed into `Json_Pull_Parser_new()`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * When the function returns, the client should return new bytes to parse, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * and set `*sizptr` to the number of bytes pointed to.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The parser checks that all characters are in the ASCII range.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Buffer management is the client routine&amp;#39;s responsibility, perhaps in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * conjunction with the `data` ptr.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;byte_t&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; (&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;Json_Reader)(&lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; data, &lt;span style=&#34;color:#b00040&#34;&gt;size_t&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;sizptr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Create a new parser at `*pptr`, reading in characters with `r` and `d`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_new&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;pptr, Json_Reader r, &lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; d);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Advance to the next significant token in the input.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_do_next&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The type of the last event parsed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Json_Event &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_event&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Whether the parser is currently processing a JSON Array.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;bool&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_in_array&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Whether the parser is currently processing a JSON Object.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;bool&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_in_object&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The number value of the last event parsed, if that event was VALUE_NUMBER,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * or NULL otherwise.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Clients should copy the value before the next call to &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * `Json_Pull_Parser_do_next()` or this value will be overwritten.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;double_t&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_number&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The string value of the last event parsed, or NULL if the last event&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * was not KEY_NAME, VALUE_STRING, or VALUE_NUMBER.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The result converts all Unicode and other escape sequences to UTF-8 bytes.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Clients should copy the string before the next call to &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * `Json_Pull_Parser_do_next()` or this value will be overwritten.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;utf8_t&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_string&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Acquire another reference to this parser, so that a call to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * `Json_Pull_Parser_release()` doesn&amp;#39;t immediately destroy the parser.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_retain&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * End parsing and release the memory held by this parser, if no other&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * client &amp;#34;retains&amp;#34; it.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;JSONPP_API&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Json_Pull_Parser_release&lt;/span&gt;(Json_Pull_Parser&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;pptr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;wrappers&#34;&gt;Wrappers&lt;/h2&gt;&#xA;&lt;p&gt;Wrappers will use native I/O to construct a tree of native equivalents&#xA;to JSON Arrays and Objects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ELTN Pull Parser in Java (Work in Progress)</title>
      <link>https://frank-mitchell.com/projects/java/eltnpp/</link>
      <pubDate>Wed, 12 Apr 2023 15:36:00 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/java/eltnpp/</guid>
      <description>&lt;p&gt;This is the working interface for an &lt;a href=&#34;https://frank-mitchell.com/projects/eltn/&#34;&gt;ELTN&lt;/a&gt; &lt;a href=&#34;https://docs.oracle.com/cd/E19159-01/819-3669/bnbdy/index.html&#34;&gt;Pull Parser&lt;/a&gt;.&#xA;Source code is available at &lt;a href=&#34;https://github.com/frank-mitchell-com/eltnpp&#34;&gt;https://github.com/frank-mitchell-com/eltnpp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;See also the &lt;a href=&#34;https://frank-mitchell.com/projects/java/jsonpp&#34;&gt;JSON Pull Parser&lt;/a&gt; and &lt;a href=&#34;https://frank-mitchell.com/projects/eltn-c/&#34;&gt;ELTNC&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;api&#34;&gt;API&lt;/h2&gt;&#xA;&lt;h3 id=&#34;event&#34;&gt;Event&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;package&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;com.frank_mitchell.eltnpp&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Events representing the major semantic elements of an ELTN file. See the &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * &amp;lt;a href=&amp;#34;https://frank-mitchell.com/projects/eltn/&amp;#34;&amp;gt;ELTN Specification&amp;lt;/a&amp;gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * @author Frank Mitchell&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;enum&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;EltnEvent&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Invalid ELTN syntax.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;ERROR,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Before first ELTN element&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;STREAM_START,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Comment (`--`...)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;COMMENT,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Definition name assignment outside a table (...`=`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;DEF_NAME,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Start of ELTN array (`[`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;TABLE_START,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * End of ELTN array (`]`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;TABLE_END,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * String key in an ELTN table (...`=` or `[`...`]=`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;TABLE_KEY_STRING,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Number key in an ELTN table (`[`...`]=`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;TABLE_KEY_NUMBER,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Integer key in an ELTN table (`[`...`]=`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;TABLE_KEY_INTEGER,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * ELTN nil (`nil`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;VALUE_NIL,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * ELTN Boolean `false`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;VALUE_FALSE,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * ELTN Boolean `true`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;VALUE_TRUE,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * ELTN integer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;VALUE_INTEGER,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * ELTN number&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;VALUE_NUMBER,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * ELTN string (`&amp;#34;`...`&amp;#34;`)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;VALUE_STRING,&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * After last ELTN element&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;STREAM_END&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;pull-parser&#34;&gt;Pull Parser&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;package&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;com.frank_mitchell.eltnpp&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;java.io.IOException&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * A pull parser for an ELTN (Extended Lua Table Notation) document.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * See the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * &amp;lt;a href=&amp;#34;https://frank-mitchell.com/projects/eltn/&amp;#34;&amp;gt;ELTN Specification&amp;lt;/a&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * for more information.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * @author Frank Mitchell&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;EltnPullParser&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Checks whether the underlying stream has more ELTN elements.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return whether the stream has more ELTN elements.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IOException if the character source could not be read.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;boolean&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;hasNext&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Advances to the next significant ELTN element in the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * underlying stream.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IOException if the character source could not be read.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;next&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Get the event parsed by the most recent call to {@link #next()}.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return most recently parsed event.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;EltnEvent&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getEvent&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Get code for this error.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * If {@link getEvent()} is not {@link EltnEvent#ERROR},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * this method will return {@link EltnError#OK}.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the current error code, if any.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;EltnError&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getError&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Gets the raw text associated with the current event,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * minus any surrounding whitespace.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Every event has associated text, although&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_START} will only return &amp;#34;{&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_END} will only return &amp;#34;}&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * and {@link EltnEvent#STREAM_START} and {@link EltnEvent#STREAM_END}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * will only return &amp;#34;&amp;#34;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * This can be especially useful on errors.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return text associated with this event.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;CharSequence&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getText&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Get the current text&amp;#39;s offset in the character stream, if available.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * This will be a number greater or equal to 0 indicating the number of&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * characters processed before the beginning of the text shown in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link #getText()}.  Thus the first character is at offset 0.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return an offset &amp;amp;ge; 0, or -1 if not available.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @see #getText()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getTextOffset&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Get the current text&amp;#39;s line number, if available.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * This will be a number greater than 0 indicating the number of&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * newline sequences processed before the text shown in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link #getText()}, plus 1.  Thus the first character is at line 1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return an offset &amp;amp;gt; 0, or -1 if not available.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @see #getText()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @see #getTextOffset()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getTextLineNumber&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Get the current text&amp;#39;s column number, if available.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * This will be a number greater than 0 indicating the number of&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * characters processed since the last newline sequence, including&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * the first character of {@link #getText()}, plus 1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Thus the first character in any line is in column 1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return an offset &amp;amp;gt; 0, or -1 if not available.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @see #getText()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @see #getTextLineNumber()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getTextColumnNumber&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Indicates if the enclosing value is a ELTN Table.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * If this object is currently processing the contents of a ELTN Table,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * this method will return {@code true}.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return {@code true} if the enclosing value is a ELTN Table.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;boolean&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;isInTable&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Gets the value associated with the current event.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * On {@link EltnEvent#DEF_NAME},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * the result is the ELTN string value for the key.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * On {@link EltnEvent#TABLE_KEY_STRING} or {@link EltnEvent#VALUE_STRING},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * the result is the ELTN string value with all escape sequences&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * converted to their character values.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * On {@link EltnEvent#TABLE_KEY_NUMBER}, {@link EltnEvent#VALUE_NUMBER}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_INTEGER}, or {@link EltnEvent#VALUE_INTEGER}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * the result is the string value&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * of the number in its original form (decimal or hexadecimal).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * On {@link EltnEvent#VALUE_TRUE}, {@link EltnEvent#VALUE_FALSE},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * or {@link EltnEvent#VALUE_NIL} the result is &amp;#34;true&amp;#34;, &amp;#34;false&amp;#34;, pr &amp;#34;nil&amp;#34;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Otherwise the method throws an exception.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the string for the current value&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IllegalStateException if the current event has no string value.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;String&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getString&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Gets the numeric value associated with the current event.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * If {@link #getEvent()} is&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_INTEGER}, {@link EltnEvent#VALUE_INTEGER},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_NUMBER} or {@link EltnEvent#VALUE_NUMBER},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * this method returns an unspecified subclass of Number.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Otherwise this method throws an exception.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the value of the current ELTN Number&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IllegalStateException if the current event is not a number.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Number&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getNumber&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Gets a {@code boolean} value for the current event.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * If {@link #getEvent()} is {@link EltnEvent#VALUE_TRUE} or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#VALUE_FALSE}, this method returns the value.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * If {@link #getEvent()} is {@link EltnEvent#VALUE_NIL},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * this method returns false.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Otherwise this method returns true.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * This method emulates the convention in Lua that in a Boolean test&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * statement, a value of &amp;lt;em&amp;gt;nil&amp;lt;/em&amp;gt; or &amp;lt;em&amp;gt;&amp;gt;false&amp;lt;/em&amp;gt; counts as false.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the Boolean value of the current ELTN object&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;boolean&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getBoolean&lt;/span&gt;()&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;switch&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;(getEvent())&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;case&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;VALUE_FALSE:&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;case&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;VALUE_NIL:&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;false&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;default&lt;/span&gt;:&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;true&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Indicates the depth of nested tables at the current point in the ELTN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * document. The Definition Table is at depth 0.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the depth of nested tables.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getDepth&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Gets the key or definition at the current point in the ELTN document.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * On {@link EltnEvent#DEF_NAME}, {@link EltnEvent#TABLE_KEY_INTEGER},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_NUMBER}, or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_STRING} this is the current key text.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * On {@link EltnEvent#TABLE_START}, {@link EltnEvent#VALUE_FALSE},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#VALUE_INTEGER}, {@link EltnEvent#VALUE_NIL},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#VALUE_NUMBER}, [@link EltnEvent#VALUE_STRING}, or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#VALUE_TRUE}, this is the most recently seen key, or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * the implied key if not preceded by a key or definition name. On&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_END}, this is the key to which the closed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * table belongs. On other events it is undefined.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the key or definition name currently being set.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;CharSequence&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getCurrentKeyText&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * The event type that created {@link #getCurrentKeyText()}. It will be&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * one of {@link EltnEvent#DEF_NAME},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_INTEGER}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_NUMBER}, or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * {@link EltnEvent#TABLE_KEY_STRING}.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the type of the current key.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @see #getCurrentKeyText()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;EltnEvent&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getCurrentKeyType&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * The concatenation of keys or definition names from the top level&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * to the current point in the document. Each element that is an&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * identifier save the first will be preceded by a dot.  Each other&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * element will be enclosed in square brackets and, if a string,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * single or double quotes, with escape characters marking unprintable&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * characters.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return the path of all current keys.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;CharSequence&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;getCurrentPath&lt;/span&gt;();&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;pull-parser-factory&#34;&gt;Pull Parser Factory&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;package&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;com.frank_mitchell.eltnpp&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;com.frank_mitchell.codepoint.CodePointSource&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;com.frank_mitchell.codepoint.CodePoint&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;java.io.IOException&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;java.io.InputStream&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;java.io.Reader&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;java.nio.charset.Charset&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;java.nio.charset.StandardCharsets&lt;/span&gt;;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Factory for a {@link EltnPullParser}.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Each factory creates an ELTN parser for a stream of ELTN text.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Text may be ASCII, UTF-8, UTF-16, or an arbitrary encoding.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * @author Frank Mitchell&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;public&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;EltnPullParserFactory&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Creates a parser to process UTF-16 characters.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * In other words, a stream of Java {@code char}s.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @param reader a stream of UTF-16 chars.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return a parser for the reader.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IOException if the reader throws an exception.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;EltnPullParser&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;createParser&lt;/span&gt;(Reader&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;reader)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;createParser(CodePoint.&lt;span style=&#34;color:#7d9029&#34;&gt;getSource&lt;/span&gt;(reader,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;StandardCharsets.&lt;span style=&#34;color:#7d9029&#34;&gt;UTF_16&lt;/span&gt;));&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Creates a parser to process UTF-8 characters.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @param stream a stream of UTF-8 bytes.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return a parser for the stream.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IOException if the stream throws an exception.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;EltnPullParser&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;createUtf8Parser&lt;/span&gt;(InputStream&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;stream)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;createParser(stream,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;StandardCharsets.&lt;span style=&#34;color:#7d9029&#34;&gt;UTF_8&lt;/span&gt;);&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Creates a parser to process bytes in the specified encoding.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @param stream a stream of bytes.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @param cs a character encoding.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return a parser for the stream.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IOException if the stream throws an exception.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;EltnPullParser&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;createParser&lt;/span&gt;(InputStream&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;stream,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;Charset&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;cs)&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;createParser(CodePoint.&lt;span style=&#34;color:#7d9029&#34;&gt;getSource&lt;/span&gt;(stream,&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;cs));&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * Creates a parser to process a stream of Unicode code points.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @param source a stream of code points.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @return a parser for the reader.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     * @throws IOException if the stream throws an exception.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;     */&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bbb&#34;&gt;    &lt;/span&gt;EltnPullParser&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;createParser&lt;/span&gt;(CodePointSource&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;source)&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;throws&lt;/span&gt;&lt;span style=&#34;color:#bbb&#34;&gt; &lt;/span&gt;IOException;&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;span style=&#34;color:#bbb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;error&#34;&gt;Error&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The implementation will add more codes as it progresses,&#xA;ideally one per specific parse error.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CodePoint</title>
      <link>https://frank-mitchell.com/projects/java/codepoint/</link>
      <pubDate>Fri, 31 Mar 2023 14:42:50 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/java/codepoint/</guid>
      <description>&lt;p&gt;::: note&#xA;Excerpted and expanded from &lt;a href=&#34;../jsonpp/&#34;&gt;JSONPP&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;A simple API to abstract out Unicode code points&#xA;from the underlying source &amp;ndash; &lt;code&gt;Reader&lt;/code&gt;s / &lt;code&gt;Writer&lt;/code&gt;s,&#xA;&lt;code&gt;InputStream&lt;/code&gt;s / &lt;code&gt;OutputStream&lt;/code&gt;s,&#xA;&lt;code&gt;CharSequence&lt;/code&gt;s / &lt;code&gt;StringBuffer&lt;/code&gt;s,&#xA;even a &lt;code&gt;java.nio.ByteBuffer&lt;/code&gt; of ASCII, Latin-1, or UTF-8 bytes &amp;ndash; took on&#xA;a life of its own.  Since I planned other parser projects, I split it off&#xA;into its own library called &amp;ldquo;CodePoint&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;design&#34;&gt;Design&lt;/h2&gt;&#xA;&lt;h3 id=&#34;provider&#34;&gt;Provider&lt;/h3&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://refactoring.guru/design-patterns/facade&#34;&gt;facade&lt;/a&gt; called &lt;code&gt;CodePoint&lt;/code&gt; hides the exact classes used to wrap I/O&#xA;classes and buffers.  &lt;code&gt;CodePoint&lt;/code&gt; notionally&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; calls the&#xA;&lt;a href=&#34;https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html&#34;&gt;Service Loader&lt;/a&gt; to load an implementation of its two primary methods,&#xA;&lt;a href=&#34;#source&#34;&gt;&lt;code&gt;getSource()&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;#sink&#34;&gt;&lt;code&gt;getSink()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Faster Than Light Communications</title>
      <link>https://frank-mitchell.com/rpg/ftl-comms/</link>
      <pubDate>Tue, 28 Mar 2023 13:26:47 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/ftl-comms/</guid>
      <description>&lt;p&gt;As of this writing I&amp;rsquo;m working on a longer article on faster-than-light&#xA;&lt;em&gt;travel&lt;/em&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. For now let&amp;rsquo;s tackle a simpler aspect of star-spanning&#xA;science fiction games and fiction: communications across light-years.&#xA;All those I could think of break down to the following cases.&lt;/p&gt;&#xA;&lt;h2 id=&#34;none&#34;&gt;None&lt;/h2&gt;&#xA;&lt;p&gt;In Classic &lt;em&gt;Traveller&lt;/em&gt; no &amp;ldquo;FTL radio&amp;rdquo; exists.  One of the rulebooks likened&#xA;it to the Age of Sail wherein all communications required a courier.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Coriolis&lt;/em&gt; has the same trope: no EM communications can cross the portals&#xA;between star systems. The mass media outlets of Kua have to ship their&#xA;broadcasts to other worlds on the equivalent of hard drives. Aiwas or Hamura&#xA;might see &amp;ldquo;broadcasts&amp;rdquo; a day or two late; Menkar might see one weeks late,&#xA;if at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>In Which I Rant About Intellectualism</title>
      <link>https://frank-mitchell.com/posts/intellectualism/</link>
      <pubDate>Thu, 23 Mar 2023 18:21:21 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/intellectualism/</guid>
      <description>&lt;p&gt;Normally this blog stays away from politics for fear that some employer&#xA;may not want to hire me for my non-mainstream opinions. Since employers&#xA;don&amp;rsquo;t seem to want to hire me and AI is going to render me obsolete&#xA;real soon now, screw it.&lt;/p&gt;&#xA;&lt;p&gt;This &lt;a href=&#34;https://www.theatlantic.com/ideas/archive/2023/03/intellectualism-crisis-american-racism/673480/?utm_source=copy-link&amp;amp;utm_medium=social&amp;amp;utm_campaign=share&#34;&gt;article&lt;/a&gt; from the Atlantic talks about &amp;ldquo;intellectuals&amp;rdquo; diminishing&#xA;any attempt to connect history to the present day.  Back in my college days&#xA;before the fall of the Berlin Wall &amp;ndash; I&amp;rsquo;m old, hey? &amp;ndash; I remember a long,&#xA;frustrating, and fruitless discussion at a &amp;ldquo;party&amp;rdquo; with a conservative&#xA;who took exception to Steven Jay Gould&amp;rsquo;s attempts to connect prior instances&#xA;of &amp;ldquo;bad science&amp;rdquo; to modern examples of racism, sexism, and religion-based&#xA;intolerance.  After several loops around his circular logic I finally had&#xA;to agree to every one of his talking points just to extricate myself from&#xA;the conversation.  I felt like a poltitical prisoner forced to confess his&#xA;recidivist ways, or a heretic recanting in public.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exported Objects</title>
      <link>https://frank-mitchell.com/projects/far-future/expobj/</link>
      <pubDate>Tue, 21 Mar 2023 17:47:50 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/expobj/</guid>
      <description>&lt;p&gt;Exported Objects&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; (ExO) allows programmers to define &amp;ldquo;objects&amp;rdquo; in C&#xA;and use them in any scripting language or environment with an ExO binding.&#xA;Initially that will include &lt;a href=&#34;https://lua.org/&#34;&gt;Lua&lt;/a&gt;, &lt;a href=&#34;https://python.org/&#34;&gt;Python&lt;/a&gt;, &lt;a href=&#34;https://ruby-lang.org/&#34;&gt;Ruby&lt;/a&gt;, and a standalone&#xA;runtime similar to &lt;a href=&#34;https://en.wikipedia.org/wiki/Objective-C&#34;&gt;Objective-C&lt;/a&gt; usable from plain C.&lt;/p&gt;&#xA;&lt;h2 id=&#34;concepts&#34;&gt;Concepts&lt;/h2&gt;&#xA;&lt;p&gt;In this document, we use the following definitions:&lt;/p&gt;&#xA;&lt;dl&gt;&#xA;&lt;dt&gt;&lt;dfn&gt;Class&lt;/dfn&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;Informally, all objects with the same structure and functions. Formally:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;An &lt;a href=&#34;#meta-object-protocol&#34;&gt;&lt;code&gt;E_Class&lt;/code&gt;&lt;/a&gt; structure that records the&#xA;constructor, destructor, and other functions that instances respond to.&lt;/li&gt;&#xA;&lt;li&gt;The set of Objects with the same &lt;code&gt;E_Class&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;dfn&gt;Domain&lt;/dfn&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;A region of memory containing interconnected &lt;em&gt;objects&lt;/em&gt; (q.v.)&#xA;Exported Objects divides a system into multiple domains, each lying in&#xA;another process, thread-local (or global) memory, or the memory used by&#xA;an interpreter or compiled runtime.&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;dfn&gt;export&lt;/dfn&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;To provide an &lt;em&gt;object&lt;/em&gt;(q.v.) to another &lt;em&gt;Domain&lt;/em&gt; (q.v.), either explcitly&#xA;via &lt;code&gt;E_Domain_export(name, obj)&lt;/code&gt; or implicitly by returning it as a result&#xA;from a function.&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;dfn&gt;object&lt;/dfn&gt;&lt;/dt&gt;&#xA;&lt;dd&gt;any structure with private state and functions to manipulate that state.&lt;/dd&gt;&#xA;&lt;dt&gt;&lt;dfn&gt;Object&lt;/dfn&gt; (capital-O)&lt;/dt&gt;&#xA;&lt;dd&gt;an object that is registered as an instance of a Class.&lt;/dd&gt;&#xA;&lt;/dl&gt;&#xA;&lt;h3 id=&#34;domains&#34;&gt;Domains&lt;/h3&gt;&#xA;&lt;p&gt;All Exported Objects live in a &amp;ldquo;domain&amp;rdquo;.  Environments that define domain&#xA;boundaries include:&lt;/p&gt;</description>
    </item>
    <item>
      <title>CSymbol</title>
      <link>https://frank-mitchell.com/projects/fmcbase/csymbol/</link>
      <pubDate>Mon, 20 Mar 2023 05:41:09 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/fmcbase/csymbol/</guid>
      <description>&lt;p&gt;To represent character encoding names in &lt;a href=&#34;https://frank-mitchell.com/projects/far-future/mstring/&#34;&gt;M-Strings&lt;/a&gt; I created&#xA;a small API inspired by &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol&#34;&gt;JavaScript Symbols&lt;/a&gt;.  After some thought&#xA;I realized it was only loosely related to M-Strings and could be useful in&#xA;other contexts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;symbols&#34;&gt;Symbols&lt;/h2&gt;&#xA;&lt;p&gt;Symbols are unique, &lt;a href=&#34;https://en.wikipedia.org/wiki/String_interning&#34;&gt;intern&lt;/a&gt;ed values.&#xA;They&amp;rsquo;re used for significant and often-used strings like&#xA;character encoding names, HTTP method names, function and variable names, etc.&lt;/p&gt;&#xA;&lt;p&gt;Symbols &lt;em&gt;cannot&lt;/em&gt; be used like C strings. Instead use&#xA;&lt;code&gt;C_Symbol_as_cstring(sym)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;api&#34;&gt;API&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#bc7a00&#34;&gt;&amp;lt;stdbool.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#bc7a00&#34;&gt;&amp;lt;syst/types.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#bc7a00&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;utf8_t&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * A unique value sometimes tied to a string value.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The mapping to strings, if any, resides in a thread-safe global hashtable.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;typedef&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;struct&lt;/span&gt; _C_Symbol&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; C_Symbol;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Determines whether `p` is a C_Symbol.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The implementation checks whether `p` is in the right memory range instead&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * of dereferencing it, in case it points to an invalid memory location.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;bool&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;is_C_Symbol&lt;/span&gt;(&lt;span style=&#34;color:#b00040&#34;&gt;void&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; p);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Return a new Symbol value unique in the current instance of the host program.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The value isn&amp;#39;t guaranteed to be unique across all parallel or future&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * instances in memory.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The Symbol has no corresponding string value.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C_Symbol &lt;span style=&#34;color:#00f&#34;&gt;C_Symbol_new&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Return a Symbol value unique in current memory, indexed by `cstr`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Since `cstr` is a C string, it cannot contain embedded nulls.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * By convention, symbols don&amp;#39;t contain whitespace or non-printable characters,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * but this is not a hard and fast rule.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C_Symbol &lt;span style=&#34;color:#00f&#34;&gt;C_Symbol_for_cstring&lt;/span&gt;(&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;char&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; cstr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Return a Symbol value unique in current memory, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * indexed by a UTF-8 string of length &amp;#39;len&amp;#39; starting at `uptr`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The string may contain embedded nulls.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * By convention, symbols don&amp;#39;t contain whitespace or non-printable characters,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * but this is not a hard and fast rule.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C_Symbol &lt;span style=&#34;color:#00f&#34;&gt;C_Symbol_for_utf8_string&lt;/span&gt;(&lt;span style=&#34;color:#b00040&#34;&gt;size_t&lt;/span&gt; len, &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;utf8_t&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; uptr);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The value of the string used to create the symbol.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * This is a copy of the string passed into `C_Symbol_for_cstring`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * or `C_Symbol_for_utf8_string` with embedded nulls replaced with &amp;#39;\xC0\x80&amp;#39;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * &amp;#34;&amp;#34; if the symbol was created by `C_Symbol_new`,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * or NULL if the symbol value is invalid (e.g. another type of object).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#b00040&#34;&gt;char&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;C_Symbol_as_cstring&lt;/span&gt;(C_Symbol sym);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;/**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * Copy the first `len` bytes of the string used to create `sym` into `buf`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The string may contain embedded nulls.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * The return value will be the number of UTF-8 bytes written to `buf`;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * if 0 the symbol has no corresponding string value,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; * and if negative `sym` is not a C_Symbol.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt; */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#b00040&#34;&gt;ssize_t&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;C_Symbol_as_utf8_string&lt;/span&gt;(C_Symbol sym, &lt;span style=&#34;color:#b00040&#34;&gt;size_t&lt;/span&gt; len, &lt;span style=&#34;color:#b00040&#34;&gt;utf8_t&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; buf);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Statiki</title>
      <link>https://frank-mitchell.com/projects/far-future/statiki/</link>
      <pubDate>Fri, 17 Mar 2023 15:24:19 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/statiki/</guid>
      <description>&lt;p&gt;Quoting from &lt;a href=&#34;https://frank-mitchell.com/posts/unwanted-software-thoughts-syndrome/#instiki&#34;&gt;here&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Several years ago, I began using&#xA;&lt;a href=&#34;https://github.com/parasew/instiki/&#34;&gt;Instiki&lt;/a&gt; to record RPG-related ideas,&#xA;bits of constructed languages, and notional computer projects like these.&#xA;The project went through multiple revisions, including a change of database&#xA;and a port to Rails.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;UPDATE: Since I wrote this, the new version runs on Ruby 3.x.&#xA;However I still have to start up a whole new server, and edit only through&#xA;the Wiki editor page.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Statiki&amp;rdquo; mimics a wiki, but with statically generated HTML pages I can&#xA;browse directly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>M-String</title>
      <link>https://frank-mitchell.com/projects/far-future/mstring/</link>
      <pubDate>Fri, 17 Mar 2023 07:49:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/mstring/</guid>
      <description>&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;&#xA;&lt;p&gt;The M-String library provides C with two features present in higher-level&#xA;languages:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;strings that are full-featured objects.&lt;/li&gt;&#xA;&lt;li&gt;memory management.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Right now memory management is limited to said strings, but a future release&#xA;will provide a general Memory Manager that can handle arbitrary blocks of&#xA;memory.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;  The author chose strings as a test case because&#xA;a garbage collector for strings is almost trivial,&#xA;the lack of memory-managed strings was a particular pain point of the author&amp;rsquo;s,&#xA;and if the interface between managed and un-managed code worked for ubiquitous&#xA;strings it would work for anything.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CConv</title>
      <link>https://frank-mitchell.com/projects/fmcbase/cconv/</link>
      <pubDate>Thu, 16 Mar 2023 17:49:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/fmcbase/cconv/</guid>
      <description>&lt;p&gt;While planning various future&#xA;projects I identified a need for some even more basic portable utilities.&#xA;Both need an API to convert characters from one character set to another.&lt;/p&gt;&#xA;&lt;h2 id=&#34;front-end&#34;&gt;Front End&lt;/h2&gt;&#xA;&lt;h3 id=&#34;utf-encodings&#34;&gt;UTF Encodings&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;cconv_is_ascii&lt;/code&gt; checks the first &lt;code&gt;sz&lt;/code&gt; bytes in &lt;code&gt;buf&lt;/code&gt; and returns &lt;code&gt;TRUE&lt;/code&gt;&#xA;if they are all ≤ 127, &lt;code&gt;FALSE&lt;/code&gt; otherwise.&lt;/p&gt;&#xA;&lt;p&gt;All &lt;code&gt;cconv_utf&lt;/code&gt;&lt;em&gt;m&lt;/em&gt;&lt;code&gt;_to_&lt;/code&gt;&lt;em&gt;n&lt;/em&gt;&lt;code&gt;_length&lt;/code&gt; functions&#xA;calculate how many UTF-&lt;em&gt;n&lt;/em&gt; characters the given UTF-&lt;em&gt;m&lt;/em&gt; characters will produce.&#xA;Incomplete codepoints won&amp;rsquo;t be counted.&#xA;&lt;code&gt;(*csz)&lt;/code&gt;, if given, is set to the number of input characters&#xA;contributed to the count of characters that would be written.&#xA;Using these functions will aid in sizing output buffers correctly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CPort</title>
      <link>https://frank-mitchell.com/projects/future/cport/</link>
      <pubDate>Thu, 16 Mar 2023 17:49:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/future/cport/</guid>
      <description>&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;&#xA;&lt;p&gt;CPort stands for both C Portability and Character Ports.&#xA;As the overloaded name suggests, its goal is to provide an API to read and&#xA;write streams of Unicode code points on any platform that supports C,&#xA;even embedded and non-standard platforms that cannot use &lt;code&gt;&amp;lt;stdio.h&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;concepts&#34;&gt;Concepts&lt;/h2&gt;&#xA;&lt;h3 id=&#34;ports&#34;&gt;Ports&lt;/h3&gt;&#xA;&lt;p&gt;A &lt;dfn&gt;port&lt;/dfn&gt; provides a stream of characters.&#xA;An &lt;dfn&gt;input port&lt;/dfn&gt; provides an incoming stream for an application to read;&#xA;an &lt;dfn&gt;output port&lt;/dfn&gt; provides an outgoing stream to which an application&#xA;may write.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CTable</title>
      <link>https://frank-mitchell.com/projects/fmcbase/ctable/</link>
      <pubDate>Thu, 16 Mar 2023 17:49:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/projects/fmcbase/ctable/</guid>
      <description>&lt;p&gt;::: note&#xA;MODIFIED 2023-07-23: As coding began I hit upon a radical simplification&#xA;of the &lt;code&gt;C_Table&lt;/code&gt; interface.  Expect more over the next few weeks.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;While planning other&#xA;projects I identified a need for some more basic portable utilities.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../csymbol/&#34;&gt;&lt;code&gt;C_Symbol&lt;/code&gt;&lt;/a&gt; needs a simple but solid hashtable&#xA;implementation.  To avoid unnecessary dependencies, we will provide our own.&lt;/p&gt;&#xA;&lt;p&gt;The table accepts three types of keys:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &lt;code&gt;void *&lt;/code&gt; compared by pointer value.&lt;/li&gt;&#xA;&lt;li&gt;A &lt;code&gt;const char *&lt;/code&gt; compared by string value (&lt;code&gt;strcmp&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;A &lt;code&gt;C_Userdata&lt;/code&gt; struct compared by binary equivalence or a custom&#xA;comparison function.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Values may likewise include an unmanaged &lt;code&gt;void *&lt;/code&gt;,&#xA;an unmanaged &lt;code&gt;const char*&lt;/code&gt;,&#xA;or managed &lt;code&gt;C_Userdata&lt;/code&gt; structs stored and retrieved by deep copy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos 6</title>
      <link>https://frank-mitchell.com/posts/music-videos-6/</link>
      <pubDate>Tue, 14 Mar 2023 14:23:00 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos-6/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m avoiding something, so it must be time for another Music Videos post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;batman-the-animated-series&#34;&gt;Batman: The Animated Series&lt;/h2&gt;&#xA;&lt;p&gt;Having presented a few selections from Howard and Zimmer&amp;rsquo;s bat-music&#xA;&lt;a href=&#34;../music-videos-5/#the-dark-knight-trilogy&#34;&gt;last time&lt;/a&gt;,&#xA;I thought I&amp;rsquo;d spotlight the work of Shirley Walker and her team on&#xA;&lt;em&gt;Batman: The Animated Series&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Luckily I found a&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLSBpRMBOTLNfJeWsncBFnIUMcHOmx6sec&#34;&gt;YouTube playlist&lt;/a&gt;&#xA;of the whole six volume collection of B:TAS episode soundtracks.&#xA;(Which I also own.)  Some have called B:TAS the best kids&amp;rsquo; cartoon ever made,&#xA;and Walker&amp;rsquo;s scores &amp;ndash; a mix of gritty noirish jazz and sweeping&#xA;Wagnerian orchestral motifs &amp;ndash; contributed to its darkly heroic atmosphere.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tiny Project List</title>
      <link>https://frank-mitchell.com/projects/tiny-list/</link>
      <pubDate>Fri, 10 Mar 2023 07:28:46 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/tiny-list/</guid>
      <description>&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.manning.com/books/tiny-c-projects&#34;&gt;&lt;em&gt;Tiny C Projects&lt;/em&gt;&lt;/a&gt;&#xA;presents a good idea for any language:&#xA;write small applications in a language to practice techniques for bigger ones.&#xA;Below is a list of &amp;ldquo;tiny&amp;rdquo; projects I &lt;em&gt;may&lt;/em&gt; pursue to&#xA;brush up skills in languages I know well (e.g. C, Python, Ruby),&#xA;get up to speed in languages I don&amp;rsquo;t know as well (e.g. JavaScript, &lt;a href=&#34;https://en.wikipedia.org/wiki/C%2B%2B20&#34; title=&#34;C++20&#34;&gt;modern C++&lt;/a&gt;),&#xA;or learn languages I don&amp;rsquo;t know at all (e.g. Go, &lt;a href=&#34;https://julialang.org/&#34; title=&#34;The Julia Programming Language&#34;&gt;Julia&lt;/a&gt;, &lt;a href=&#34;https://www.rust-lang.org/&#34; title=&#34;Rust Programming Language&#34;&gt;Rust&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Relearning Python #2: duplicate-files.py</title>
      <link>https://frank-mitchell.com/posts/relearning-python-2/</link>
      <pubDate>Tue, 07 Mar 2023 21:15:27 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/relearning-python-2/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;../relearning-python-1/&#34;&gt;last&lt;/a&gt; post, we wrote a&#xA;&lt;a href=&#34;https://frank-mitchell.com/projects/duplicate-files/2023-03-02-py/&#34;&gt;rough cut&lt;/a&gt; of a Python&#xA;script to list duplicated files in one or more directories.&#xA;In this post we have added command-line options, output options,&#xA;and some internal improvements.&lt;/p&gt;&#xA;&lt;h2 id=&#34;improvements&#34;&gt;Improvements&lt;/h2&gt;&#xA;&lt;p&gt;Last time I said I&amp;rsquo;d do the following:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Parsing command-line options with &lt;code&gt;argparse&lt;/code&gt; or something else.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;[&amp;hellip;]&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Write results to a file instead of STDOUT.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Installing &lt;code&gt;pyyaml&lt;/code&gt; to generate (pretty-printed) YAML or JSON as desired.&lt;/p&gt;</description>
    </item>
    <item>
      <title>duplicate-files.py - 2023-03-07</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2023-03-07-py/</link>
      <pubDate>Tue, 07 Mar 2023 17:48:21 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2023-03-07-py/</guid>
      <description>&lt;p&gt;For an explanation, see the &lt;a href=&#34;../&#34;&gt;directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Highlighting shows changes from the &lt;a href=&#34;../2023-03-02-py/&#34;&gt;previous version&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filespy&#34;&gt;&lt;code&gt;duplicate-files.py&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add command-line options comparable to the &lt;a href=&#34;../&#34;&gt;Ruby version&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Redirect output to a file.&lt;/li&gt;&#xA;&lt;li&gt;Convert results to YAML or &amp;ldquo;pretty-printed&amp;rdquo; JSON.&lt;/li&gt;&#xA;&lt;li&gt;Optionally include zero-length files in output.&lt;/li&gt;&#xA;&lt;li&gt;Assorted optimizations and Pythonicization.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;usage: duplicate-files.py [-h] [-q, --quiet] [-v, --verbose]&#xA;                          [-o, --output FILE] [-j, --json] [-y, --yaml]&#xA;                          [-p, --pretty] [-z, --zero-length]&#xA;                          DIR [DIR ...]&#xA;&#xA;Find duplicate files in one or more directories.&#xA;&#xA;positional arguments:&#xA;  DIR                a directory to scan&#xA;&#xA;options:&#xA;  -h, --help         show this help message and exit&#xA;  -q, --quiet        run without printing to standard output.&#xA;  -v, --verbose      print extra information to standard output.&#xA;  -o, --output FILE  write to the given file (default: standard output)&#xA;  -j, --json         write output as JSON&#xA;  -y, --yaml         write output as YAML (default)&#xA;  -p, --pretty       &amp;#34;pretty-print&amp;#34; the output&#xA;  -z, --zero-length  include zero-length files&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;pathlib&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; Path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;itertools&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; combinations&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;argparse&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;filecmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;fnmatch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;simplejson&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;as&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;ImportError&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;global&lt;/span&gt; yaml_enabled&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#d2413a;font-weight:bold&#34;&gt;ImportError&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;    yaml_enabled &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;    yaml_enabled &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;STD_EXCLUDES &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# version control directories&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVSROOT&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.gitignore&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.svn&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# macosx-specific hidden files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.DS_Store&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.Apple*&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;._*&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# trash directories&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;Trash&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.Trash*&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;prunable&lt;/span&gt;(name):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;any&lt;/span&gt;(fnmatch&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;fnmatch(name, pat) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; pat &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; STD_EXCLUDES)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;find_files&lt;/span&gt;(sizemap, name):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;isinstance&lt;/span&gt;(name, Path):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;        f &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;        f &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Path(name)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable(f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;name): &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# TODO: Check we have permissions &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_symlink(): &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_dir():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; child &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;iterdir():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;            find_files(sizemap, child)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elif&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_file():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;        sz &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;stat()&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;st_size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; sz &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;            sizemap[sz]&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add(f)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;            sizemap[sz] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;((f,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;duplicate_files&lt;/span&gt;(file_i, file_j):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;     &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; file_i &lt;span style=&#34;color:#666&#34;&gt;!=&lt;/span&gt; file_j \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_i&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;samefile(file_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; filecmp&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(file_i, file_j, shallow&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;add_to_dupsets&lt;/span&gt;(dupsets, file_i, file_j):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_i &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; dupsets:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;        dupsets[file_i] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;frozenset&lt;/span&gt;((file_i,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_j &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; dupsets:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;        dupsets[file_j] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;frozenset&lt;/span&gt;((file_j,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;    newset &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; dupsets[file_i] &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; dupsets[file_j]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; f &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; newset:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;        dupsets[f] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; newset&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;compare_files&lt;/span&gt;(sizemap):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;    dupsets &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; sz, ls &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;items():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; sz &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;: &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; file_i, file_j &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; combinations(ls, &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files(file_i, file_j):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;                add_to_dupsets(dupsets, file_i, file_j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;    superset &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;(dupsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#008000&#34;&gt;sorted&lt;/span&gt;(s) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; s &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; superset]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;    result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;make_argparser&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;    parser &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; argparse&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;ArgumentParser(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;                    description&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;Find duplicate files in one or more directories.&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;dirs&amp;#39;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;                    metavar&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;DIR&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;                    nargs&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;+&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;a directory to scan&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#parser.add_argument(&amp;#39;-d, --from&amp;#39;, &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                metavar=&amp;#39;MAINDIR&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                dest=&amp;#39;canondir&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                help=&amp;#39;Compare other directories to this directory.&amp;#39;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-q, --quiet&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;quiet&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;run without printing to standard output.&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-v, --verbose&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;verbose&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;print extra information to standard output.&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-o, --output&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;                    metavar&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;FILE&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;outfile&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;write to the given file (default: standard output)&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; yaml_enabled: &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;        parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-j, --json&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;                        action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_const&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;                        const&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;                        default&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;                        dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;                        help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;write output as JSON&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;        parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-y, --yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;                        action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_const&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;                        const&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;                        default&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;                        dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;                        help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;write output as YAML (default)&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-p, --pretty&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;pretty&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;&amp;#34;pretty-print&amp;#34; the output&amp;#39;&lt;/span&gt;)     &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;    parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add_argument(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-z, --zero-length&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;                    action&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;store_true&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;                    dest&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;zero&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;                    help&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;include zero-length files&amp;#39;&lt;/span&gt;)    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; parser&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;convert_results&lt;/span&gt;(result):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; [[&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;(p) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; ls] &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; ls &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; result]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;    sizemap &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;    parser &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; make_argparser()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;    args &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parser&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse_args()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; dirname &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;        find_files(sizemap, dirname)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; compare_files(sizemap)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;146&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;        zero &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;(p) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap[&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;        zero&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;)  &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# so remove-files will remove *all* files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;        result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add(zero)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; yaml_enabled &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;154&lt;/span&gt;&lt;span&gt;            indent &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;155&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;156&lt;/span&gt;&lt;span&gt;            indent &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;157&lt;/span&gt;&lt;span&gt;        out &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;158&lt;/span&gt;&lt;span&gt;            json&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dumps(result, sort_keys&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;True&lt;/span&gt;, indent&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;indent, &lt;span style=&#34;color:#008000&#34;&gt;cls&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;PathEncoder)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;159&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;160&lt;/span&gt;&lt;span&gt;        out &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;161&lt;/span&gt;&lt;span&gt;            yaml&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(convert_results(result),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;162&lt;/span&gt;&lt;span&gt;                    width&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;4096&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;163&lt;/span&gt;&lt;span&gt;                    explicit_start&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;164&lt;/span&gt;&lt;span&gt;                    explicit_end&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;165&lt;/span&gt;&lt;span&gt;                    canonical&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;166&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;167&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;outfile:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;168&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(out)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;169&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;170&lt;/span&gt;&lt;span&gt;        outpath &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; Path(args&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;outfile)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;171&lt;/span&gt;&lt;span&gt;        outpath&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write_text(out, encoding&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;172&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;173&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;PathEncoder&lt;/span&gt;(json&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;JSONEncoder):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;174&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;default&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;self&lt;/span&gt;, obj):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;175&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;isinstance&lt;/span&gt;(obj, Path):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;176&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;str&lt;/span&gt;(obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;177&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Let the base class default method raise the TypeError&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;178&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; json&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;JSONEncoder&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;default(&lt;span style=&#34;color:#008000&#34;&gt;self&lt;/span&gt;, obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;179&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;180&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;__name__&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;181&lt;/span&gt;&lt;span&gt;    run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>duplicate-files.rb - 2023-03-07</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2023-03-07-rb/</link>
      <pubDate>Tue, 07 Mar 2023 17:48:14 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2023-03-07-rb/</guid>
      <description>&lt;p&gt;For an explanation see the &lt;a href=&#34;../&#34;&gt;directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Highlighting shows changes from the &lt;a href=&#34;../2023-03-02-rb/&#34;&gt;previous version&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filesrb&#34;&gt;&lt;code&gt;duplicate-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PRUNE list of directories now regular expressions and constant.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;Use &lt;code&gt;Pathname&lt;/code&gt; objects to implement file queries and sort by path elements,&#xA;not ASCII sort order (e.g. &amp;lsquo;-&amp;rsquo; before &amp;lsquo;/&amp;rsquo;).&lt;/li&gt;&#xA;&lt;li&gt;Reimplement &lt;code&gt;append_duplicates&lt;/code&gt; to use &lt;code&gt;Array#combination&lt;/code&gt;, like its&#xA;younger Python cousin.&lt;/li&gt;&#xA;&lt;li&gt;Remove progress bar, replace with Spinner.&lt;/li&gt;&#xA;&lt;li&gt;Only generate performance data when output path provided.&lt;/li&gt;&#xA;&lt;li&gt;Deprecate &lt;code&gt;-d&lt;/code&gt;, reimplement by post-processing the results list.&lt;/li&gt;&#xA;&lt;li&gt;BUG FIX: Make option arguments mandatory.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -d, --from DIR                   Compare arguments to files from DIR (deprecated)&#xA;    -o, --output OUTFILE             Write standard output to OUTFILE&#xA;    -j, --json                       Write output as JSON&#xA;    -y, --yaml                       Write output as YAML (default)&#xA;    -p, --[no-]pretty                Pretty-print output&#xA;    -P, --perf-data DIR              Write performance data to DIR&#xA;    -z, --[no-]zero                  Include zero-length files&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;find&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;fileutils&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;pathname&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;rational&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;tempfile&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# List of file patterns to prune in search&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Version Control directories and files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#b68&#34;&gt;/CVS/&lt;/span&gt;, &lt;span style=&#34;color:#b68&#34;&gt;/CVSROOT/&lt;/span&gt;, &lt;span style=&#34;color:#b68&#34;&gt;/\.git/&lt;/span&gt;, &lt;span style=&#34;color:#b68&#34;&gt;/\.gitignore/&lt;/span&gt;, &lt;span style=&#34;color:#b68&#34;&gt;/\.svn/&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Trash folders, usually off user or media root directories&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#b68&#34;&gt;/Trash/&lt;/span&gt;, &lt;span style=&#34;color:#b68&#34;&gt;/\.Trash.*/&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Apple Mac metadata files and folders&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#b68&#34;&gt;/\.DS_Store/&lt;/span&gt;, &lt;span style=&#34;color:#b68&#34;&gt;/\._.*/&lt;/span&gt;, &lt;span style=&#34;color:#b68&#34;&gt;/\.Apple.*/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Unfortunate artifact of transition between Ruby 1.9 and 2.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;const_defined?(&lt;span style=&#34;color:#19177c&#34;&gt;:Encoding&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Encoding&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Simple class to manage an ASCII spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;\\&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;(io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;start&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;            start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;stop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt; &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;prunable?&lt;/span&gt;(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;basename(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;       &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=~&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Recurse through array of `dirs` and produce Hash of all files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;files_by_size&lt;/span&gt;(fmap, dirs, spinner&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dirs) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;            path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;encode!(&lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;                fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;            fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;Pathname&lt;/span&gt;(path)&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;            spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;update &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; spinner&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Compare each file in `paths` and append lists of equal files to `fmap`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_duplicates&lt;/span&gt;(result, paths, progress, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;    idsets &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; { k &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt; } }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;    paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;keys&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;combination(&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_i, path_j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; path_i&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist? &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; path_j&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist? \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; path_i&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;realpath &lt;span style=&#34;color:#666&#34;&gt;!=&lt;/span&gt; path_j&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;realpath &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;lt;&amp;#34;&lt;/span&gt;, path_i, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;                          &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;gt; and &amp;lt;&amp;#34;&lt;/span&gt;, path_j, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;gt; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;FileUtils&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;            progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;update &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; progress&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;    idsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;uniq&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;s&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;keys&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;    result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `fmap` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# `fmap` is a map of files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_all_dupes&lt;/span&gt;(result, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; progress&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;    fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each_pair &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;size, paths&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;            append_duplicates(result, paths, progress, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;stop &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; progress&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Struct&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Options&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:info&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:verbose&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:canondir&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:dirs&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:io&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:format&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:pretty&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:perfdir&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:zero&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;parse_options&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;    config &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;                            &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;    outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;146&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--from DIR&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Compare arguments to files from DIR (deprecated)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-o&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--output OUTFILE&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write standard output to OUTFILE&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;f&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;            outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(f, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;154&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;155&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--json&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as JSON&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;156&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;157&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;158&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--yaml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as YAML (default)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;159&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;160&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;161&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-p&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]pretty&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Pretty-print output&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;162&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;163&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;164&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-P&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--perf-data DIR&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;165&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write performance data to DIR&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;166&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;167&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;168&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-z&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]zero&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Include zero-length files&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;169&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;170&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;171&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;172&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;173&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (outfile &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;174&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;175&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;176&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;177&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;178&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;179&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;180&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;log_perf_data&lt;/span&gt;(perfdir, info, data)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;181&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;182&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;perf-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;strftime(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;%Y-%m-%d-%H%M%S-%N&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;183&lt;/span&gt;&lt;span&gt;        path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;184&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; perfdir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;185&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mktmpdir(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;dfperf&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;186&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;187&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;188&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mkdir(perfdir, &lt;span style=&#34;color:#666&#34;&gt;755&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;189&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;190&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_path, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;191&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;192&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# TODO: check that file doesn&amp;#39;t already exist.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;193&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;open(path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;file&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;194&lt;/span&gt;&lt;span&gt;            file&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(data))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;195&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;196&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;197&lt;/span&gt;&lt;span&gt;           &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Wrote performance data to &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;198&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;199&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt;  &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;200&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Cannot log performance data: &amp;#34;&lt;/span&gt;, msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;201&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;202&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;203&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;204&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;205&lt;/span&gt;&lt;span&gt;    opts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parse_options&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;206&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;207&lt;/span&gt;&lt;span&gt;    spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;208&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;209&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#34;&lt;/span&gt;, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ... &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;210&lt;/span&gt;&lt;span&gt;        spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Spinner&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;211&lt;/span&gt;&lt;span&gt;        spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;212&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;213&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;214&lt;/span&gt;&lt;span&gt;    time_start &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;215&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;216&lt;/span&gt;&lt;span&gt;    fmap &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;217&lt;/span&gt;&lt;span&gt;    files_by_size(fmap, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs, spinner)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;218&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;219&lt;/span&gt;&lt;span&gt;        files_by_size(fmap, &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;, spinner)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;220&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;221&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;222&lt;/span&gt;&lt;span&gt;    time_search &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;223&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;224&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; spinner &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;225&lt;/span&gt;&lt;span&gt;        spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;stop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;226&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;227&lt;/span&gt;&lt;span&gt;        count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;228&lt;/span&gt;&lt;span&gt;        fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each_value &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;229&lt;/span&gt;&lt;span&gt;            count &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; v&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;230&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;231&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Found &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; files in &amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;232&lt;/span&gt;&lt;span&gt;                      fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; size groups.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;233&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;234&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;235&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;236&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing files ... &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;237&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;238&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;239&lt;/span&gt;&lt;span&gt;    time_before_compare &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;240&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;241&lt;/span&gt;&lt;span&gt;    results &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;242&lt;/span&gt;&lt;span&gt;    append_all_dupes(results, fmap, opts, spinner)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;243&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;244&lt;/span&gt;&lt;span&gt;    time_compare &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;245&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;246&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;247&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;248&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;249&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;250&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;251&lt;/span&gt;&lt;span&gt;        zerofiles &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;keys&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;clone&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;252&lt;/span&gt;&lt;span&gt;        zerofiles &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Pathname&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;253&lt;/span&gt;&lt;span&gt;        zerofiles&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;254&lt;/span&gt;&lt;span&gt;        results &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; zerofiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;255&lt;/span&gt;&lt;span&gt;        results&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;256&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;257&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;258&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;259&lt;/span&gt;&lt;span&gt;        bubble_up(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir, results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;260&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;261&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;262&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;263&lt;/span&gt;&lt;span&gt;        log_perf_data(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;264&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;ngroups&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;265&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-compare&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_compare &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_before_compare,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;266&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-search&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_search &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_start,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;267&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;268&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;269&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;270&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;271&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;272&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;273&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;274&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;275&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;276&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(text)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;277&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;278&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;279&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# :line_width setting so file names w/spaces don&amp;#39;t break across lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;280&lt;/span&gt;&lt;span&gt;        yamlopts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#19177c&#34;&gt;:line_width&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;4096&lt;/span&gt;} &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;281&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;282&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# {:canonical =&amp;gt; true} looks almost identical to pretty-printed &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;283&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# JSON so the header keeps them distinct.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;284&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:header&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;285&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:canonical&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;286&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;287&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Using Pathname upstream means exposing it in YAML;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;288&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# build new results with just Strings and Arrays&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;289&lt;/span&gt;&lt;span&gt;        saferesults &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;290&lt;/span&gt;&lt;span&gt;        results&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;set&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;291&lt;/span&gt;&lt;span&gt;            safeset &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;292&lt;/span&gt;&lt;span&gt;            saferesults &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; safeset&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;293&lt;/span&gt;&lt;span&gt;            set&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;294&lt;/span&gt;&lt;span&gt;                safeset &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;295&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;296&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;297&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;safe_dump(saferesults, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io, yamlopts)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;298&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;299&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;300&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;301&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;bubble_up&lt;/span&gt;(canondir, results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;302&lt;/span&gt;&lt;span&gt;  cpath &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Pathname&lt;/span&gt;(canondir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;303&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;304&lt;/span&gt;&lt;span&gt;  results&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;ls&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;305&lt;/span&gt;&lt;span&gt;    ls&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort! &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;a, b&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;306&lt;/span&gt;&lt;span&gt;      canon_first(cpath, a, b) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;307&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;308&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;309&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;310&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;311&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;canon_first&lt;/span&gt;(cpath, a, b)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;312&lt;/span&gt;&lt;span&gt;  a_in_dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; is_parent?(cpath, a)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;313&lt;/span&gt;&lt;span&gt;  b_in_dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; is_parent?(cpath, b)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;314&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;315&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; a_in_dir &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; b_in_dir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;316&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# how we originally sorted them&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;317&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Pathname&lt;/span&gt;(a) &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Pathname&lt;/span&gt;(b)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;318&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; a_in_dir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;319&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;320&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;321&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;322&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;323&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;324&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;325&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;is_parent?&lt;/span&gt;(cpath, path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;326&lt;/span&gt;&lt;span&gt;  result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;327&lt;/span&gt;&lt;span&gt;  path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;ascend &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;328&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; cpath &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;329&lt;/span&gt;&lt;span&gt;      result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;330&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;331&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;332&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;333&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;334&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;335&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;336&lt;/span&gt;&lt;span&gt;run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;remove-filesrb&#34;&gt;&lt;code&gt;remove-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes-1&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;p&gt;None.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Relearning Python #1: Python At Last</title>
      <link>https://frank-mitchell.com/posts/relearning-python-1/</link>
      <pubDate>Fri, 03 Mar 2023 08:52:50 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/relearning-python-1/</guid>
      <description>&lt;p&gt;While waiting for a Python Meetup to start&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, I decided to start writing&#xA;a Python version of the &lt;a href=&#34;https://frank-mitchell.com/projects/duplicate-files/&#34;&gt;duplicate-files&lt;/a&gt; script&#xA;I presented &lt;a href=&#34;../relearning-python-0/&#34;&gt;previously&lt;/a&gt;. These are my thoughts&#xA;on the experience of cutting a whole 68-line script.&lt;/p&gt;&#xA;&lt;p&gt;Follow along in another window as I comment on&#xA;&lt;a href=&#34;https://frank-mitchell.com/projects/duplicate-files/2023-03-02-py/&#34;&gt;&lt;code&gt;duplicate-files.py&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;general-comments&#34;&gt;General Comments&lt;/h2&gt;&#xA;&lt;h3 id=&#34;how-hard-was-it&#34;&gt;How hard was it?&lt;/h3&gt;&#xA;&lt;p&gt;Honestly, the &lt;em&gt;second&lt;/em&gt; hardest part was looking up how the builtin objects&#xA;and libraries work.  I kept flipping between the docs and my source code,&#xA;multiple times, to figure out how to get the entries from a &lt;del&gt;Hash&lt;/del&gt; Dictionary,&#xA;how to iterate over an &lt;del&gt;Array&lt;/del&gt; List, and so forth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>duplicate-files.py - 2023-03-02</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2023-03-02-py/</link>
      <pubDate>Fri, 03 Mar 2023 08:17:31 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2023-03-02-py/</guid>
      <description>&lt;p&gt;For an explanation, see &lt;a href=&#34;..&#34;&gt;the directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filespy&#34;&gt;&lt;code&gt;duplicate-files.py&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;https://frank-mitchell.com/posts/relearning-python-1/&#34;&gt;&amp;ldquo;Relearning Python #1&lt;/a&gt; for more information.&lt;/p&gt;&#xA;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;pathlib&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; Path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#import argparse&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;filecmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&lt;/span&gt;&lt;span&gt;STD_EXCLUDES&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;[&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVSROOT&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.DS_Store&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.gitignore&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.svn&amp;#39;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;find_files&lt;/span&gt;(sizemap, f, exclude&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;STD_EXCLUDES):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# TODO: Check we have permissions &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; exclude:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_symlink():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elif&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_dir():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; child &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;iterdir():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;21&lt;/span&gt;&lt;span&gt;            find_files(sizemap, child)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;22&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elif&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;is_file():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;23&lt;/span&gt;&lt;span&gt;        sz &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;stat()&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;st_size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;24&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; sz &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;25&lt;/span&gt;&lt;span&gt;            sizemap[sz] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;26&lt;/span&gt;&lt;span&gt;        ls &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; sizemap[sz]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;27&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; f &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; ls:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;28&lt;/span&gt;&lt;span&gt;            ls&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;append(f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;as_posix())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;29&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# using strings so JSON can print them&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;30&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;31&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;32&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;duplicate_files&lt;/span&gt;(file_i, file_j):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;33&lt;/span&gt;&lt;span&gt;     &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; file_i &lt;span style=&#34;color:#666&#34;&gt;!=&lt;/span&gt; file_j &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; filecmp&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(file_i, file_j, shallow&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;34&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;35&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;add_to_dupsets&lt;/span&gt;(dupsets, file_i, file_j):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;36&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_i &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; dupsets:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;37&lt;/span&gt;&lt;span&gt;        dupsets[file_i] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;((file_i,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;38&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; file_j &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; dupsets:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;39&lt;/span&gt;&lt;span&gt;        dupsets[file_j] &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;((file_j,))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;40&lt;/span&gt;&lt;span&gt;    dupsets[file_i]&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add(file_j) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;41&lt;/span&gt;&lt;span&gt;    dupsets[file_j]&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add(file_i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;42&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;43&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;sort_uniq&lt;/span&gt;(sets):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;44&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;list&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;set&lt;/span&gt;([&lt;span style=&#34;color:#008000&#34;&gt;tuple&lt;/span&gt;(&lt;span style=&#34;color:#008000&#34;&gt;sorted&lt;/span&gt;(s)) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; s &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sets]))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;45&lt;/span&gt;&lt;span&gt;    result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;46&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;47&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;48&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;compare_files&lt;/span&gt;(sizemap):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;49&lt;/span&gt;&lt;span&gt;    dupsets &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;50&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; sz, ls &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sizemap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;items():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;51&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; sz &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;: &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;52&lt;/span&gt;&lt;span&gt;        max_i &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;len&lt;/span&gt;(ls)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;53&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;, max_i):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;54&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; j &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;range&lt;/span&gt;(i, max_i):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;55&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files(ls[i], ls[j]):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;56&lt;/span&gt;&lt;span&gt;                    add_to_dupsets(dupsets, ls[i], ls[j])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;57&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; sort_uniq(dupsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;58&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;59&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;60&lt;/span&gt;&lt;span&gt;    sizemap &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;61&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Assume all arguments are directory names for now&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;62&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; dirname &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;in&lt;/span&gt; sys&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;argv[&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;:]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;63&lt;/span&gt;&lt;span&gt;        find_files(sizemap, Path(dirname))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;64&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; compare_files(sizemap)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;65&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(json&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dumps(result, sort_keys&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;False&lt;/span&gt;, indent&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;66&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;67&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;__name__&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;68&lt;/span&gt;&lt;span&gt;    run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>duplicate-files.rb - 2023-03-02</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2023-03-02-rb/</link>
      <pubDate>Fri, 03 Mar 2023 08:17:19 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2023-03-02-rb/</guid>
      <description>&lt;p&gt;For an explanation see the &lt;a href=&#34;..&#34;&gt;directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Highlighting shows changes from the &lt;a href=&#34;&#34;&gt;previous version&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filesrb&#34;&gt;&lt;code&gt;duplicate-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sort results more thoroughly.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -d, --from [DIR]                 Compare arguments only to files from DIR&#xA;    -o, --output [OUTFILE]           Write standard output to OUTFILE&#xA;    -j, --json                       Write output as JSON&#xA;    -y, --yaml                       Write output as YAML (default)&#xA;    -p, --[no-]pretty                Pretty-print output&#xA;    -P, --perf-data [DIR]            Write performace data to a directory (default /tmp)&#xA;    -z, --[no-]zero                  Include zero-length files&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;find&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;fileutils&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;rational&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;tempfile&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Default list of files to prune in search&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.svn&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVSROOT&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.DS_Store&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.gitignore&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Unfortunate artifact of transition between Ruby 1.9 and 2.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;const_defined?(&lt;span style=&#34;color:#19177c&#34;&gt;:Encoding&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Encoding&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Simple class to manage an ASCII spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;\\&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;(io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;start&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;            start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Not-so-simple class to manage a progress bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Progress&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;40&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;attr_accessor&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:actual&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:estimate&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:io&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:quiet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@quiet&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; quiet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;do_estimate&lt;/span&gt;(results, canon)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;        results&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;fileset&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# choose(x, k) is the number of ways one can choose `k`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# items from a set of `n`.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fileset&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; canon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; (size &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# @estimate += choose(size, 2) &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# @estimate += factorial(size)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;        update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;factorial&lt;/span&gt;(n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; factorial(n&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;choose&lt;/span&gt;(n, k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; k &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; k &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; n &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(k) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;            result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; result &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; (n &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; i) &lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;add&lt;/span&gt;(amt &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; amt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;        update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;progress&lt;/span&gt;(increments &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Rational&lt;/span&gt;(increments &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;floor&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;progress_bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;        str &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;String&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; i &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; progress(&lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;                str &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;#&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;                str &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; str&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; quiet &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;                msg &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;                      &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; |&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; progress_bar &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;|&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;msg&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, msg)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Whether `path_i` and `path_j` refer to duplicate but not identical files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;duplicate_files?&lt;/span&gt;(path_i, path_j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;146&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_i) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;identical?(path_i, path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;FileUtils&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(path_i, path_j))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;prunable?&lt;/span&gt;(path, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;basename(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;154&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (prune&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;include?(&lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;) &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;fnmatch(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;._*&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;155&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;156&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;157&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Recurse through array of `dirs` and produce Hash of all files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;158&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;files_by_size&lt;/span&gt;(dirs, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;, info&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;159&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]=[]&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;160&lt;/span&gt;&lt;span&gt;    count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;161&lt;/span&gt;&lt;span&gt;    spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;162&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;163&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#34;&lt;/span&gt;, dirs, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;: &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;164&lt;/span&gt;&lt;span&gt;        spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Spinner&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;165&lt;/span&gt;&lt;span&gt;        spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;166&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;167&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dirs) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;168&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path, prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;169&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;170&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;171&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;172&lt;/span&gt;&lt;span&gt;            count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;173&lt;/span&gt;&lt;span&gt;            path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;encode!(&lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;174&lt;/span&gt;&lt;span&gt;            result&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;175&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;176&lt;/span&gt;&lt;span&gt;                count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;177&lt;/span&gt;&lt;span&gt;                spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;178&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;179&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;180&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;181&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;182&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;183&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;184&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Found &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; files in &amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;185&lt;/span&gt;&lt;span&gt;                      result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; size groups.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;186&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;187&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;188&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;189&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;190&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Compare each file in `paths` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;191&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_duplicates&lt;/span&gt;(result, paths, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;192&lt;/span&gt;&lt;span&gt;    idsets &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; { k &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt; } }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;193&lt;/span&gt;&lt;span&gt;    max_i &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;194&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(max_i) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;195&lt;/span&gt;&lt;span&gt;        (i&lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(max_i) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;196&lt;/span&gt;&lt;span&gt;            path_i &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;197&lt;/span&gt;&lt;span&gt;            path_j &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;198&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;199&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;200&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;201&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;202&lt;/span&gt;&lt;span&gt;            progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;203&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;204&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;205&lt;/span&gt;&lt;span&gt;    idsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;uniq&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; s &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;206&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;keys&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;207&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;208&lt;/span&gt;&lt;span&gt;    result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;209&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;210&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;211&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;212&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `fmap` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;213&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# `fmap` is a map of files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;214&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_all_dupes&lt;/span&gt;(result, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;215&lt;/span&gt;&lt;span&gt;    fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each_pair &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;size, paths&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;216&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;217&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;218&lt;/span&gt;&lt;span&gt;            append_duplicates(result, paths, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;219&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;220&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;221&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;222&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;223&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;224&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `srcdir`, compare to all files in `fmap`,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;225&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# and append lists of equal files to `result`.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;226&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# The path from `srcdir` will always be first in the list.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;227&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_dir_dupes&lt;/span&gt;(result, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;228&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Use names from the pre-rewrite version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;229&lt;/span&gt;&lt;span&gt;    srcdir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;230&lt;/span&gt;&lt;span&gt;    prune &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;231&lt;/span&gt;&lt;span&gt;    verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;232&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;233&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#39;&amp;#34;&lt;/span&gt;, srcdir, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39;:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;234&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(srcdir) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;235&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path_i, prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;236&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;237&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path_i) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;238&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path_i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;239&lt;/span&gt;&lt;span&gt;            paths &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;240&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; paths &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;241&lt;/span&gt;&lt;span&gt;                dupes &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;242&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#39;&amp;#34;&lt;/span&gt;, path_i, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;243&lt;/span&gt;&lt;span&gt;                              &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39; to &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;244&lt;/span&gt;&lt;span&gt;                paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;245&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;246&lt;/span&gt;&lt;span&gt;                        dupes &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path_j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;247&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;248&lt;/span&gt;&lt;span&gt;                    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;249&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;250&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;251&lt;/span&gt;&lt;span&gt;                   dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;252&lt;/span&gt;&lt;span&gt;                   result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dupes&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;253&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;254&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;255&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;256&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;257&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;258&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;259&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;260&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;261&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;262&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Struct&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Options&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;263&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:info&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:verbose&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:canondir&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:dirs&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:prune&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;264&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:io&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:format&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:pretty&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:perfdir&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;265&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:zero&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;266&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;267&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;parse_options&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;268&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;269&lt;/span&gt;&lt;span&gt;    config &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;270&lt;/span&gt;&lt;span&gt;                            &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;271&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;272&lt;/span&gt;&lt;span&gt;    outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;273&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;274&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;275&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;276&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;277&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;278&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;279&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;280&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;281&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;282&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;283&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--from [DIR]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;284&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Compare arguments only to files from DIR&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;285&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;286&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;287&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-o&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--output [OUTFILE]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;288&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write standard output to OUTFILE&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;f&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;289&lt;/span&gt;&lt;span&gt;            outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(f, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;290&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;291&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--json&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as JSON&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;292&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;293&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;294&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--yaml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as YAML (default)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;295&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;296&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;297&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-p&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]pretty&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Pretty-print output&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;298&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;299&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;300&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-P&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--perf-data [DIR]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;301&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write performace data to a directory (default /tmp)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;302&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;303&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;304&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-z&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]zero&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Include zero-length files&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;305&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;306&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;307&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;308&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;309&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (outfile &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;310&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;311&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;312&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;313&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;314&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;315&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;316&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;log_perf_data&lt;/span&gt;(perfdir, info, data)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;317&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;318&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;perf-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;strftime(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;%Y-%m-%d-%H%M%S-%N&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;319&lt;/span&gt;&lt;span&gt;        path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;320&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; perfdir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;321&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mktmpdir(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;dfperf&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;322&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;323&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;324&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mkdir(perfdir, &lt;span style=&#34;color:#666&#34;&gt;755&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;325&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;326&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_path, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;327&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;328&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# TODO: check that file doesn&amp;#39;t already exist.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;329&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;open(path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;file&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;330&lt;/span&gt;&lt;span&gt;            file&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(data))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;331&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;332&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;333&lt;/span&gt;&lt;span&gt;           &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Wrote performance data to &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;334&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;335&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt;  &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;336&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Cannot log performance data: &amp;#34;&lt;/span&gt;, msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;337&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;338&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;339&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;340&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;341&lt;/span&gt;&lt;span&gt;    opts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parse_options&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;342&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;343&lt;/span&gt;&lt;span&gt;    time_start &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;344&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;345&lt;/span&gt;&lt;span&gt;    fmap &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; files_by_size(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune, (opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;346&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;347&lt;/span&gt;&lt;span&gt;    time_search &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;348&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;349&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;350&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing files ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;351&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;352&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;353&lt;/span&gt;&lt;span&gt;    progress &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Progress&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;354&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;355&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;quiet&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;356&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;357&lt;/span&gt;&lt;span&gt;    time_before_est &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;358&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;359&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;do_estimate(fmap, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;360&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;361&lt;/span&gt;&lt;span&gt;    time_estimate &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;362&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;363&lt;/span&gt;&lt;span&gt;    results &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;364&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;365&lt;/span&gt;&lt;span&gt;        append_dir_dupes(results, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;366&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;367&lt;/span&gt;&lt;span&gt;        append_all_dupes(results, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;368&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;369&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;370&lt;/span&gt;&lt;span&gt;    time_compare &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;371&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;372&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;373&lt;/span&gt;&lt;span&gt;        zerofiles &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;clone&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;374&lt;/span&gt;&lt;span&gt;        zerofiles &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;375&lt;/span&gt;&lt;span&gt;        zerofiles&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;376&lt;/span&gt;&lt;span&gt;        results &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; zerofiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;377&lt;/span&gt;&lt;span&gt;        results&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;378&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;379&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;380&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;381&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;... done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;382&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;383&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;384&lt;/span&gt;&lt;span&gt;    log_perf_data(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;385&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;actual&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;actual,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;386&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;estimate&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;estimate,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;387&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;ngroups&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;388&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-compare&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_compare &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_estimate,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;389&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-estimate&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_estimate &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_before_est,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;390&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-search&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_search &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_start,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;391&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;392&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;393&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;394&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;395&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;396&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;397&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;398&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;399&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(text)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;400&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;401&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;402&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# :line_width setting so file names w/spaces don&amp;#39;t break across lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;403&lt;/span&gt;&lt;span&gt;        yamlopts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#19177c&#34;&gt;:line_width&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;4096&lt;/span&gt;} &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;404&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;405&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# {:canonical =&amp;gt; true} looks almost identical to pretty-printed &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;406&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# JSON so the header keeps them distinct.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;407&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:header&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;408&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:canonical&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;409&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;410&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(results, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io, yamlopts)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;411&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;412&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;413&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;414&lt;/span&gt;&lt;span&gt;run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;remove-filesrb&#34;&gt;&lt;code&gt;remove-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes-1&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;p&gt;None.&lt;/p&gt;</description>
    </item>
    <item>
      <title>duplicate-files.rb - 2023-02-25</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2023-02-25-rb/</link>
      <pubDate>Sat, 25 Feb 2023 11:30:22 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2023-02-25-rb/</guid>
      <description>&lt;p&gt;For an explanation, see the &lt;a href=&#34;..&#34;&gt;directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Highlighting shows changes from the &lt;a href=&#34;../2023-02-07-rb/&#34;&gt;previous version&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filesrb&#34;&gt;&lt;code&gt;duplicate-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Un-break pretty printing.&lt;/li&gt;&#xA;&lt;li&gt;Add option to remove all zero-length files.&lt;/li&gt;&#xA;&lt;li&gt;Silence progress bar when in &lt;code&gt;--quiet&lt;/code&gt; mode.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -d, --from [DIR]                 Compare arguments only to files from DIR&#xA;    -o, --output [OUTFILE]           Write standard output to OUTFILE&#xA;    -j, --json                       Write output as JSON&#xA;    -y, --yaml                       Write output as YAML (default)&#xA;    -p, --[no-]pretty                Pretty-print output&#xA;    -P, --perf-data [DIR]            Write performace data to a directory (default /tmp)&#xA;    -z, --[no-]zero                  Include zero-length files&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;find&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;fileutils&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;rational&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;tempfile&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Default list of files to prune in search&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.svn&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVSROOT&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.DS_Store&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Unfortunate artifact of transition between Ruby 1.9 and 2.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;const_defined?(&lt;span style=&#34;color:#19177c&#34;&gt;:Encoding&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Encoding&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Simple class to manage an ASCII spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;\\&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;(io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;start&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;            start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Not-so-simple class to manage a progress bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Progress&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;40&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;attr_accessor&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:actual&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:estimate&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:io&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:quiet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@quiet&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; quiet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;do_estimate&lt;/span&gt;(results, canon)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;        results&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;fileset&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# choose(x, k) is the number of ways one can choose `k`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# items from a set of `n`.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fileset&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; canon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; (size &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# @estimate += choose(size, 2) &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# @estimate += factorial(size)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;        update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;factorial&lt;/span&gt;(n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; factorial(n&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;choose&lt;/span&gt;(n, k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; k &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; k &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; n &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(k) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;            result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; result &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; (n &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; i) &lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;add&lt;/span&gt;(amt &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; amt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;        update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;progress&lt;/span&gt;(increments &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Rational&lt;/span&gt;(increments &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;floor&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;progress_bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;        str &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;String&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; i &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; progress(&lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;                str &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;#&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;                str &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; str&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; quiet &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;                msg &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;                      &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; |&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; progress_bar &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;|&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;msg&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, msg)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Whether `path_i` and `path_j` refer to duplicate but not identical files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;duplicate_files?&lt;/span&gt;(path_i, path_j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;146&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_i) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;identical?(path_i, path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;FileUtils&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(path_i, path_j))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;prunable?&lt;/span&gt;(path, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;basename(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;154&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (prune&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;include?(&lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;) &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;fnmatch(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;._*&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;155&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;156&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;157&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Recurse through array of `dirs` and produce Hash of all files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;158&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;files_by_size&lt;/span&gt;(dirs, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;, info&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;159&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]=[]&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;160&lt;/span&gt;&lt;span&gt;    count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;161&lt;/span&gt;&lt;span&gt;    spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;162&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;163&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#34;&lt;/span&gt;, dirs, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;: &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;164&lt;/span&gt;&lt;span&gt;        spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Spinner&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;165&lt;/span&gt;&lt;span&gt;        spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;166&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;167&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dirs) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;168&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path, prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;169&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;170&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;171&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;172&lt;/span&gt;&lt;span&gt;            count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;173&lt;/span&gt;&lt;span&gt;            path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;encode!(&lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;174&lt;/span&gt;&lt;span&gt;            result&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;175&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;176&lt;/span&gt;&lt;span&gt;                count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;177&lt;/span&gt;&lt;span&gt;                spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;178&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;179&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;180&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;181&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;182&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;183&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;184&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Found &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; files in &amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;185&lt;/span&gt;&lt;span&gt;                      result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; size groups.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;186&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;187&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;188&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;189&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;190&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Compare each file in `paths` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;191&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_duplicates&lt;/span&gt;(result, paths, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;192&lt;/span&gt;&lt;span&gt;    idsets &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; { k &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt; } }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;193&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;194&lt;/span&gt;&lt;span&gt;        (i&lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;195&lt;/span&gt;&lt;span&gt;            path_i &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;196&lt;/span&gt;&lt;span&gt;            path_j &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;197&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;198&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;199&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;200&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;201&lt;/span&gt;&lt;span&gt;            progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;202&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;203&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;204&lt;/span&gt;&lt;span&gt;    idsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;uniq&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; s &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;205&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;keys&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;206&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;207&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;208&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;209&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;210&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `fmap` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;211&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# `fmap` is a map of files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;212&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_all_dupes&lt;/span&gt;(result, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;213&lt;/span&gt;&lt;span&gt;    fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each_pair &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;size, paths&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;214&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;215&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;216&lt;/span&gt;&lt;span&gt;            append_duplicates(result, paths, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;217&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;218&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;219&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;220&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;221&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;222&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `srcdir`, compare to all files in `fmap`,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;223&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# and append lists of equal files to `result`.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;224&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# The path from `srcdir` will always be first in the list.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;225&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_dir_dupes&lt;/span&gt;(result, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;226&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Use names from the pre-rewrite version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;227&lt;/span&gt;&lt;span&gt;    srcdir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;228&lt;/span&gt;&lt;span&gt;    prune &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;229&lt;/span&gt;&lt;span&gt;    verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;230&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;231&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#39;&amp;#34;&lt;/span&gt;, srcdir, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39;:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;232&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(srcdir) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;233&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path_i, prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;234&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;235&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path_i) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;236&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path_i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;237&lt;/span&gt;&lt;span&gt;            paths &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;238&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; paths &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;239&lt;/span&gt;&lt;span&gt;                dupes &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;240&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#39;&amp;#34;&lt;/span&gt;, path_i, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;241&lt;/span&gt;&lt;span&gt;                              &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39; to &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;242&lt;/span&gt;&lt;span&gt;                paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;243&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;244&lt;/span&gt;&lt;span&gt;                        dupes &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path_j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;245&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;246&lt;/span&gt;&lt;span&gt;                    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;247&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;248&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;249&lt;/span&gt;&lt;span&gt;                   dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;250&lt;/span&gt;&lt;span&gt;                   result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dupes&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;251&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;252&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;253&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;254&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;255&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;256&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;257&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;258&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;259&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;260&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Struct&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Options&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;261&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:info&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:verbose&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:canondir&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:dirs&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:prune&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;262&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:io&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:format&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:pretty&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:perfdir&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;263&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:zero&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;264&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;265&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;parse_options&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;266&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;267&lt;/span&gt;&lt;span&gt;    config &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;268&lt;/span&gt;&lt;span&gt;                            &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;269&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;270&lt;/span&gt;&lt;span&gt;    outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;271&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;272&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;273&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;274&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;275&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;276&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;277&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;278&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;279&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;280&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;281&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--from [DIR]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;282&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Compare arguments only to files from DIR&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;283&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;284&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;285&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-o&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--output [OUTFILE]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;286&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write standard output to OUTFILE&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;f&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;287&lt;/span&gt;&lt;span&gt;            outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(f, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;288&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;289&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--json&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as JSON&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;290&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;291&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;292&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--yaml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as YAML (default)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;293&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;294&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;295&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-p&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]pretty&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Pretty-print output&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;296&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;297&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;298&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-P&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--perf-data [DIR]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;299&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write performace data to a directory (default /tmp)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;300&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;301&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;302&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-z&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]zero&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Include zero-length files&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;303&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;304&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;305&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;306&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;307&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (outfile &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;308&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;309&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;310&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;311&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;312&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;313&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;314&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;log_perf_data&lt;/span&gt;(perfdir, info, data)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;315&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;316&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;perf-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;strftime(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;%Y-%m-%d-%H%M%S-%N&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;317&lt;/span&gt;&lt;span&gt;        path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;318&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; perfdir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;319&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mktmpdir(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;dfperf&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;320&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;321&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;322&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mkdir(perfdir, &lt;span style=&#34;color:#666&#34;&gt;755&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;323&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;324&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_path, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;325&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;326&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# TODO: check that file doesn&amp;#39;t already exist.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;327&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;open(path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;file&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;328&lt;/span&gt;&lt;span&gt;            file&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(data))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;329&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;330&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;331&lt;/span&gt;&lt;span&gt;           &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Wrote performance data to &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;332&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;333&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt;  &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;334&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Cannot log performance data: &amp;#34;&lt;/span&gt;, msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;335&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;336&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;337&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;338&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;339&lt;/span&gt;&lt;span&gt;    opts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parse_options&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;340&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;341&lt;/span&gt;&lt;span&gt;    time_start &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;342&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;343&lt;/span&gt;&lt;span&gt;    fmap &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; files_by_size(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune, (opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;344&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;345&lt;/span&gt;&lt;span&gt;    time_search &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;346&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;347&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;348&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing files ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;349&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;350&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;351&lt;/span&gt;&lt;span&gt;    progress &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Progress&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;352&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;353&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;quiet&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;354&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;355&lt;/span&gt;&lt;span&gt;    time_before_est &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;356&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;357&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;do_estimate(fmap, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;358&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;359&lt;/span&gt;&lt;span&gt;    time_estimate &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;360&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;361&lt;/span&gt;&lt;span&gt;    results &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;362&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;363&lt;/span&gt;&lt;span&gt;        append_dir_dupes(results, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;364&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;365&lt;/span&gt;&lt;span&gt;        append_all_dupes(results, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;366&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;367&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;368&lt;/span&gt;&lt;span&gt;    time_compare &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;369&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;370&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;zero &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;371&lt;/span&gt;&lt;span&gt;        zerofiles &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;clone&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;372&lt;/span&gt;&lt;span&gt;        zerofiles &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;373&lt;/span&gt;&lt;span&gt;        zerofiles&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;374&lt;/span&gt;&lt;span&gt;        results &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; zerofiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;375&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;376&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;377&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;378&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;... done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;379&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;380&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;381&lt;/span&gt;&lt;span&gt;    log_perf_data(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;382&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;actual&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;actual,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;383&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;estimate&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;estimate,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;384&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;ngroups&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;385&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-compare&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_compare &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_estimate,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;386&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-estimate&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_estimate &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_before_est,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;387&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-search&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_search &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_start,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;388&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;389&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;390&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;391&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;392&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;393&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;394&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;395&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;396&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(text)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;397&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;398&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;399&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# :line_width setting so file names w/spaces don&amp;#39;t break across lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;400&lt;/span&gt;&lt;span&gt;        yamlopts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#19177c&#34;&gt;:line_width&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;4096&lt;/span&gt;} &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;401&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;402&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# {:canonical =&amp;gt; true} looks almost identical to pretty-printed &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;403&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# JSON so the header keeps them distinct.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;404&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:header&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;405&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:canonical&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;406&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;407&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(results, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io, yamlopts)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;408&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;409&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;410&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;411&lt;/span&gt;&lt;span&gt;run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;remove-filesrb&#34;&gt;&lt;code&gt;remove-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes-1&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add interactive mode to stop deletions at last minute.&#xA;Does NOT work if piping output from &lt;code&gt;duplicate-files.rb&lt;/code&gt; into STDIN.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage-1&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: remove-files.rb [options] [listfile ...]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -j, --[no-]json                  Read input as JSON&#xA;    -y, --[no-]yaml                  Read input as YAML (default)&#xA;    -x, --[no-]mixed                 Deduce format from files&#xA;    -i, --[no-]interactive           Wait for user approval before deleting.&#xA;    -u, --[no-]dry-run               Don&amp;#39;t delete, just list files&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing-1&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;psych&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Append all but the first paths from each set in `filesets` to results&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_files&lt;/span&gt;(result, filesets, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;  filesets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;fset&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;    delset &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fset&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Skip the first file in each set&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Skipping &amp;#34;&lt;/span&gt;, fset&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Adding &amp;#34;&lt;/span&gt;, delset, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;    delset&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;n&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;      result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Figure out if the `text` in `path` is JSON&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;is_json&lt;/span&gt;(path, text)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;  text&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;strip! &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Bad form to modify an argument&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;  path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;end_with?(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.json&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; text&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start_with?(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;{&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;[&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;read_file&lt;/span&gt;(files, path, verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Reading &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;  text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;read&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; is_json(path, text) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Assuming JSON: &amp;#34;&lt;/span&gt;, path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;      append_files(files, &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse(text), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Assuming YAML: &amp;#34;&lt;/span&gt;, path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;      append_files(files, &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;safe_load(text), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;JsonError&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;isn&amp;#39;t valid JSON; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Psych&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;isn&amp;#39;t valid YAML; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Run the main loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;  info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;  verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;  input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;  dry &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;  interactive &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;  files &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: remove-files.rb [options] [listfile ...]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;      info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;      verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]json&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Read input as JSON&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;      input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]yaml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Read input as YAML (default)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;      input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-x&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]mixed&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Deduce format from files&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;      input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-i&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]interactive&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Wait for user approval before deleting.&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;      interactive &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-u&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]dry-run&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Don&amp;#39;t delete, just list files&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;      dry &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; input &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Assuming we&amp;#39;re getting a single JSON object ...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;      result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse(&lt;span style=&#34;color:#800&#34;&gt;ARGF&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;read)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;      append_files(files, result, verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; input &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;      append_files(files, &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;safe_load(&lt;span style=&#34;color:#800&#34;&gt;ARGF&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;read), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each { &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; read_file(files, path, verbose) }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Psych&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Input isn&amp;#39;t valid YAML; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;JsonError&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Input isn&amp;#39;t valid JSON; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;  files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;uniq!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;  files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; interactive &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;About to remove the following files:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Removing the following files:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(files, &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; interactive &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Remove &amp;#34;&lt;/span&gt;, files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; files? [y/N]: &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;    response &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$stdin&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;gets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; response &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;No response; are you piping to STDIN? Exiting.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;      response&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;strip!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; response&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start_with?(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;Y&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;y&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Exiting.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;  count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;  files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-&amp;gt; rm &amp;#34;&lt;/span&gt;, path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;delete(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; dry &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;      count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;StandardError&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Cannot remove &amp;#34;&lt;/span&gt;, path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;146&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Removed &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; files.&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; (Not really.)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; dry&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Star Trek: The Gorn Ship</title>
      <link>https://frank-mitchell.com/posts/gorn-ship/</link>
      <pubDate>Thu, 23 Feb 2023 02:53:32 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/gorn-ship/</guid>
      <description>&lt;p&gt;The remastered version of &lt;em&gt;Star Trek&lt;/em&gt; (TOS) inserts real ships into episodes&#xA;where the original airing showed only a vague flickering light, if that.&#xA;The &lt;a href=&#34;https://memory-alpha.fandom.com/wiki/Orion_scout_ship&#34;&gt;Orion&lt;/a&gt; ship looks interesting, especially the rear section that&#xA;explained the whirling lights in the original. The &lt;a href=&#34;https://memory-alpha.fandom.com/wiki/Eymorg_starship&#34;&gt;Eymorg&lt;/a&gt; and &lt;a href=&#34;https://memory-alpha.fandom.com/wiki/Medusan_vessel&#34;&gt;Medusan&lt;/a&gt;&#xA;ships, unseen in the original eps (IIRC), look fascinatingly retro.&#xA;I have a soft spot for advanced technology used to recreate something that&#xA;&lt;em&gt;looks&lt;/em&gt; low-tech, as if the guys 55 years ago would have made it if they&amp;rsquo;d&#xA;only had the time and budget.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>JSONPP: JSON Pull Parser (Work in Progress)</title>
      <link>https://frank-mitchell.com/projects/java/jsonpp/</link>
      <pubDate>Wed, 15 Feb 2023 01:13:12 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/java/jsonpp/</guid>
      <description>&lt;p&gt;This document &lt;em&gt;somewhat&lt;/em&gt; more formally presents the JSON Pull Parser&#xA;mentioned in&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/unwanted-software-thoughts-syndrome/#json-pull-parser&#34;&gt;two&lt;/a&gt;&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/progress-report-2/&#34;&gt;previous&lt;/a&gt; blog posts.&lt;/p&gt;&#xA;&lt;p&gt;Source code is available at &lt;a href=&#34;https://github.com/frank-mitchell-com/jsonpp&#34;&gt;https://github.com/frank-mitchell-com/jsonpp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;purpose&#34;&gt;Purpose&lt;/h2&gt;&#xA;&lt;p&gt;As JSON has become more prevalent in Web applications,&#xA;Java on the Web need a JSON parser.&#xA;JDK 11 removed &lt;a href=&#34;https://www.oracle.com/java/technologies/javase/11-relnote-issues.html&#34;&gt;&lt;code&gt;javax.json&lt;/code&gt; and JSONP&lt;/a&gt;, and while the Jakarta project&#xA;continues to develop &lt;a href=&#34;https://jakarta.ee/specifications/platform/9/apidocs/jakarta/json/package-summary.html&#34;&gt;JSONP as &lt;code&gt;jakarta.json&lt;/code&gt;&lt;/a&gt;,&#xA;developers may want something simpler and more lightweight.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://docs.oracle.com/javase/tutorial/jaxp/stax/why.html&#34;&gt;StAX parser&lt;/a&gt; demonstrated that pull parsing provides&#xA;a lightweight API that, unlike the &amp;ldquo;push parsing&amp;rdquo; model of SAX, keeps&#xA;the application code in control without the memory overhead of DOM.&#xA;For example, in &lt;a href=&#34;https://www.jsonrpc.org/&#34;&gt;JSON-RPC&lt;/a&gt; can stream the&#xA;outer envelope to glean the &lt;em&gt;id&lt;/em&gt; and &lt;em&gt;method&lt;/em&gt; element then delegate&#xA;&lt;em&gt;params&lt;/em&gt; parsing to the code that performs the procedure.&#xA;The only overhead is that the parser can&amp;rsquo;t use the Java call stack to&#xA;track parsing state, and must save state when the application regains control.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Estimator</title>
      <link>https://frank-mitchell.com/projects/far-future/estimator/</link>
      <pubDate>Sat, 11 Feb 2023 03:13:56 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/far-future/estimator/</guid>
      <description>&lt;h2 id=&#34;origin&#34;&gt;Origin&lt;/h2&gt;&#xA;&lt;p&gt;When I worked in Chicago supporting trading desks at a succession of big&#xA;banks, I noticed how long calculating risk analytics took.&#xA;The general procedure was to take the current market price of a portfolio,&#xA;adjust some parameter like interest rates or the currend date, take the&#xA;difference, divide by the unit of change, and call it a &lt;a href=&#34;https://en.wikipedia.org/wiki/Derivative&#34;&gt;derivative&lt;/a&gt;.&#xA;(Not to be confused with&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Derivative_%28finance%29&#34;&gt;traded derivatives&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Wouldn&amp;rsquo;t it be nice,&amp;rdquo; I told myself, &amp;ldquo;if we could estimate how many&#xA;calculations it would take to analyze a portfolio, multiply that by the time&#xA;to do one calculation, and warn the user it might take a while?&amp;rdquo;&#xA;I called it the Estimation Framework because everything was a &amp;ldquo;framework&amp;rdquo;&#xA;in the 1990s and early 2000s.  Then I wrote it on a piece of paper,&#xA;and eventually on other pieces of paper and in various files, for thirty-some&#xA;years.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FM Cache (Work in Progress)</title>
      <link>https://frank-mitchell.com/projects/java/cache/</link>
      <pubDate>Sat, 11 Feb 2023 03:13:46 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/java/cache/</guid>
      <description>&lt;h2 id=&#34;origins&#34;&gt;Origins&lt;/h2&gt;&#xA;&lt;p&gt;When I worked at Hotel.com my manager asked me to write a simple cache&#xA;library.  Assembling all the information about a hotel &amp;ndash; description,&#xA;amenities, price quotes, etc. &amp;ndash; too a lot of time, so it would speed things&#xA;up, and ease the burden on databases and SOAP interfaces, to keep the results&#xA;around.  But not too long: price and availability change in an instant,&#xA;and even though we doublecheck when someone tries to book a hotel we don&amp;rsquo;t&#xA;want the information to get too stale.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Relearning Python #1/2: Ch-ch-ch-changes</title>
      <link>https://frank-mitchell.com/posts/relearning-python-half/</link>
      <pubDate>Thu, 09 Feb 2023 22:56:13 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/relearning-python-half/</guid>
      <description>&lt;h2 id=&#34;when-last-we-left-our-heroes-&#34;&gt;When Last We Left Our Heroes &amp;hellip;&lt;/h2&gt;&#xA;&lt;p&gt;A few things have changed in the three months(?!?) since the&#xA;&lt;a href=&#34;../relearning-python-0/&#34;&gt;last article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;computers-change&#34;&gt;Computers Change&lt;/h3&gt;&#xA;&lt;p&gt;For reasons I &lt;del&gt;was forced&lt;/del&gt; decided to upgrade to Linux Mint 21.1l&#xA;which has Python 3.10.6 installed.&lt;/p&gt;&#xA;&lt;p&gt;Also for reasons, I bought a Windows 10 machine that &lt;em&gt;also&lt;/em&gt; has Python&#xA;3.11.2 available to download. So I guess I&amp;rsquo;m going to get acquainted with the&#xA;Power Shell.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;scripts-change&#34;&gt;Scripts Change&lt;/h3&gt;&#xA;&lt;p&gt;I made a few upgrades to &lt;code&gt;duplicate-files.rb&lt;/code&gt; and its companion program,&#xA;&lt;code&gt;remove-files.rb&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos 5</title>
      <link>https://frank-mitchell.com/posts/music-videos-5/</link>
      <pubDate>Thu, 09 Feb 2023 09:40:36 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos-5/</guid>
      <description>&lt;h2 id=&#34;the-dark-knight-trilogy&#34;&gt;The Dark Knight Trilogy&lt;/h2&gt;&#xA;&lt;p&gt;For some reason the soundtrack to Christopher Nolan&amp;rsquo;s &lt;em&gt;Batman Begins&lt;/em&gt; (2005)&#xA;and &lt;em&gt;The Dark Knight&lt;/em&gt; (2008) is my go-to music whenever I have to get things&#xA;done. I guess it&amp;rsquo;s the combination of intensity and repetition that forces&#xA;me to keep going without getting distracted by the music itself.&lt;/p&gt;&#xA;&lt;p&gt;Thanks, Hans Zimmer and James Newton Howard.&#xA;I&amp;rsquo;m sure that&amp;rsquo;s just what you were going for.&lt;/p&gt;&#xA;&lt;h3 id=&#34;molossus&#34;&gt;&amp;ldquo;Molossus&amp;rdquo;&lt;/h3&gt;&#xA;&lt;p&gt;All the tracks on the &lt;em&gt;Batman Begins&lt;/em&gt; sountrack are named after types of bats.&#xA;&lt;a href=&#34;https://knowyourmeme.com/memes/o-kawaii-koto&#34;&gt;&lt;em&gt;O kawaii koto.&lt;/em&gt;&lt;/a&gt;.&#xA;So I have no idea what scene(s) this corresponds to, except it&amp;rsquo;s loud.&lt;/p&gt;</description>
    </item>
    <item>
      <title>duplicate-files.rb - 2023-02-07</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2023-02-07-rb/</link>
      <pubDate>Tue, 07 Feb 2023 18:42:22 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2023-02-07-rb/</guid>
      <description>&lt;p&gt;For an explanation, see the &lt;a href=&#34;..&#34;&gt;directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Highlighting shows changes from the &lt;a href=&#34;../2022-11-26-rb/&#34;&gt;previous version&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filesrb&#34;&gt;&lt;code&gt;duplicate-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Replace Printer classes with simple &lt;code&gt;if&lt;/code&gt; statement.&lt;/li&gt;&#xA;&lt;li&gt;Add progress bar during comparisons.&#xA;Note that estimates are wildly inaccurate.&lt;/li&gt;&#xA;&lt;li&gt;Write performance data to &lt;code&gt;/tmp&lt;/code&gt; or a configured directory to help deduce&#xA;why estimates are so far off.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -d, --from [DIR]                 Compare arguments only to files from DIR&#xA;    -o, --output [OUTFILE]           Write standard output to OUTFILE&#xA;    -j, --json                       Write output as JSON&#xA;    -y, --yaml                       Write output as YAML (default)&#xA;    -p, --[no-]pretty                Pretty-print output&#xA;    -P, --perf-data [DIR]            Write performace data to a directory (default /tmp)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;find&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;fileutils&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;rational&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;tempfile&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Default list of files to prune in search&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.svn&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVSROOT&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.DS_Store&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Unfortunate artifact of transition between Ruby 1.9 and 2.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;const_defined?(&lt;span style=&#34;color:#19177c&#34;&gt;:Encoding&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Encoding&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Simple class to manage an ASCII spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;\\&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;(io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;start&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;            start()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Not-so-simple class to manage a progress bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Progress&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;40&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;attr_accessor&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:estimate&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:actual&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;(io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;do_estimate&lt;/span&gt;(results, canon)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;        results&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;fileset&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# choose(x, k) is the number of ways one can choose `k`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# items from a set of `n`.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fileset&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; canon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; (size &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# choose(size, 2) # factorial(size)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;        update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;factorial&lt;/span&gt;(n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; factorial(n&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;choose&lt;/span&gt;(n, k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; k &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; k &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; n &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(k) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;            result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; result &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; (n &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; i) &lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;add&lt;/span&gt;(amt &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; amt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;        update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;progress&lt;/span&gt;(increments &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;100&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Rational&lt;/span&gt;(increments &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;floor&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;progress_bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;        str &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;String&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; i &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; progress(&lt;span style=&#34;color:#800&#34;&gt;BAR_LENGTH&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;                str &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;#&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;                str &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; str&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;UPDATE_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;            msg &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@actual&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@estimate&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;                  &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; |&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; progress_bar &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;|&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;msg&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, msg)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Whether `path_i` and `path_j` refer to duplicate but not identical files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;duplicate_files?&lt;/span&gt;(path_i, path_j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_i) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;identical?(path_i, path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;FileUtils&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(path_i, path_j))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;146&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;prunable?&lt;/span&gt;(path, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;basename(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (prune&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;include?(&lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;) &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;fnmatch(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;._*&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Recurse through array of `dirs` and produce Hash of all files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;files_by_size&lt;/span&gt;(dirs, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;154&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]=[]&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;155&lt;/span&gt;&lt;span&gt;    count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;156&lt;/span&gt;&lt;span&gt;    spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;157&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;158&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#34;&lt;/span&gt;, dirs, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;: &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;159&lt;/span&gt;&lt;span&gt;        spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Spinner&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;160&lt;/span&gt;&lt;span&gt;        spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;161&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;162&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dirs) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;163&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path, prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;164&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;165&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;166&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;167&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;168&lt;/span&gt;&lt;span&gt;                count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;169&lt;/span&gt;&lt;span&gt;                path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;encode!(&lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;170&lt;/span&gt;&lt;span&gt;                result&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;171&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;172&lt;/span&gt;&lt;span&gt;                    count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;173&lt;/span&gt;&lt;span&gt;                    spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;174&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;175&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;176&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;177&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;178&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;179&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;180&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;181&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Found &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; non-empty files in &amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;182&lt;/span&gt;&lt;span&gt;                      result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; size groups.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;183&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;184&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;185&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;186&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;187&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Compare each file in `paths` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;188&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_duplicates&lt;/span&gt;(result, paths, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;189&lt;/span&gt;&lt;span&gt;    idsets &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; { k &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt; } }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;190&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;191&lt;/span&gt;&lt;span&gt;        (i&lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;192&lt;/span&gt;&lt;span&gt;            path_i &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;193&lt;/span&gt;&lt;span&gt;            path_j &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;194&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;195&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;196&lt;/span&gt;&lt;span&gt;                idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;][&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;197&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;198&lt;/span&gt;&lt;span&gt;            progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;199&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;200&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;201&lt;/span&gt;&lt;span&gt;    idsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;uniq&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; s &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;202&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;keys&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;203&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;204&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;205&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;206&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;207&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `fmap` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;208&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# `fmap` is a map of files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;209&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_all_dupes&lt;/span&gt;(result, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;210&lt;/span&gt;&lt;span&gt;    fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each_pair &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;size, paths&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;211&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;212&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;213&lt;/span&gt;&lt;span&gt;            append_duplicates(result, paths, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;214&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;215&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;216&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;217&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;218&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;219&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `srcdir`, compare to all files in `fmap`,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;220&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# and append lists of equal files to `result`.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;221&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# The path from `srcdir` will always be first in the list.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;222&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_dir_dupes&lt;/span&gt;(result, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;223&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#39;&amp;#34;&lt;/span&gt;, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39;:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;224&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;225&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path_i, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;226&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;227&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path_i) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;228&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path_i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;229&lt;/span&gt;&lt;span&gt;            paths &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;230&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; paths &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;231&lt;/span&gt;&lt;span&gt;                dupes &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;232&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#39;&amp;#34;&lt;/span&gt;, path_i, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;233&lt;/span&gt;&lt;span&gt;                              &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39; to &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;234&lt;/span&gt;&lt;span&gt;                paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;235&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;236&lt;/span&gt;&lt;span&gt;                        dupes &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path_j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;237&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;238&lt;/span&gt;&lt;span&gt;                    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;add&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;239&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;240&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;241&lt;/span&gt;&lt;span&gt;                   dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;242&lt;/span&gt;&lt;span&gt;                   result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dupes&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;243&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;244&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;245&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;246&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;247&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;248&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;249&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;250&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;251&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;252&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Struct&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Options&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;253&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:info&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:verbose&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:canondir&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:dirs&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:prune&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;254&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:io&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:format&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:pretty&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:perfdir&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;255&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;256&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;parse_options&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;257&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;258&lt;/span&gt;&lt;span&gt;    config &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;259&lt;/span&gt;&lt;span&gt;                            &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;260&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;261&lt;/span&gt;&lt;span&gt;    outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;262&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;263&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;264&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;265&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;266&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;267&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;268&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;269&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;270&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;271&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;272&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--from [DIR]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;273&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Compare arguments only to files from DIR&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;274&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;275&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;276&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-o&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--output [OUTFILE]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;277&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write standard output to OUTFILE&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;f&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;278&lt;/span&gt;&lt;span&gt;            outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(f, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;279&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;280&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--json&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as JSON&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;281&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;282&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;283&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--yaml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as YAML (default)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;284&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;285&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;286&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-p&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]pretty&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Pretty-print output&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;287&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;288&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;289&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-P&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--perf-data [DIR]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;290&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write performace data to a directory (default /tmp)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;291&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;292&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;293&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;294&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;295&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (outfile &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;296&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;297&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;298&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;299&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;300&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;301&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;302&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;log_perf_data&lt;/span&gt;(perfdir, info, data)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;303&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;304&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;perf-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;strftime(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;%Y-%m-%d-%H%M%S-%N&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;305&lt;/span&gt;&lt;span&gt;        path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;306&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; perfdir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;307&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mktmpdir(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;dfperf&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;308&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;309&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;310&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;mkdir(perfdir, &lt;span style=&#34;color:#666&#34;&gt;755&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;311&lt;/span&gt;&lt;span&gt;            dir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Dir&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(perfdir)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;312&lt;/span&gt;&lt;span&gt;            path &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;join(dir&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_path, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;313&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;314&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# TODO: check that file doesn&amp;#39;t already exist.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;315&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;open(path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;file&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;316&lt;/span&gt;&lt;span&gt;            file&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(data))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;317&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;318&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;319&lt;/span&gt;&lt;span&gt;           &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Wrote performance data to &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;320&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;321&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt;  &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;322&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Cannot log performance data: &amp;#34;&lt;/span&gt;, msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;323&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;324&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;325&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;326&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;327&lt;/span&gt;&lt;span&gt;    opts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parse_options&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;328&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;329&lt;/span&gt;&lt;span&gt;    time_start &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;330&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;331&lt;/span&gt;&lt;span&gt;    fmap &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; files_by_size(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune, (opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;332&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;333&lt;/span&gt;&lt;span&gt;    time_search &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;334&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;335&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;336&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing files ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;337&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;338&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;339&lt;/span&gt;&lt;span&gt;    results &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;340&lt;/span&gt;&lt;span&gt;    progress &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Progress&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;341&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;342&lt;/span&gt;&lt;span&gt;    time_before_est &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;343&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;344&lt;/span&gt;&lt;span&gt;    progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;do_estimate(fmap, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;345&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;346&lt;/span&gt;&lt;span&gt;    time_estimate &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;347&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;348&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;349&lt;/span&gt;&lt;span&gt;        append_dir_dupes(results, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;350&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;351&lt;/span&gt;&lt;span&gt;        append_all_dupes(results, fmap, opts, progress)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;352&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;353&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;354&lt;/span&gt;&lt;span&gt;    time_compare &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;355&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;356&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;357&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;... done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;358&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;359&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;360&lt;/span&gt;&lt;span&gt;    log_perf_data(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;perfdir, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;361&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;actual&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;actual,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;362&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;estimate&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; progress&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;estimate,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;363&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;ngroups&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;364&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-compare&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_compare &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_estimate,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;365&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-estimate&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_estimate &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_before_est,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;366&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;time-search&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; time_search &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; time_start,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;367&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; fmap})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;368&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;369&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;format &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;370&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@pretty&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;371&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;372&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;373&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;generate(results)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;374&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;375&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(text)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;376&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;377&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;378&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# :line_width setting so file names w/spaces don&amp;#39;t break across lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;379&lt;/span&gt;&lt;span&gt;        yamlopts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#19177c&#34;&gt;:line_width&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;4096&lt;/span&gt;} &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;380&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@pretty&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;381&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# {:canonical =&amp;gt; true} looks almost identical to pretty-printed JSON&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;382&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# so the header keeps them distinct.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;383&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:header&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;384&lt;/span&gt;&lt;span&gt;            yamlopts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:canonical&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;385&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;386&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(results, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io, yamlopts)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;387&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;388&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;389&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;390&lt;/span&gt;&lt;span&gt;run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;remove-filesrb&#34;&gt;&lt;code&gt;remove-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary-of-changes-1&#34;&gt;Summary of Changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Huge rewrite to prevent accidentally deleting the difference file,&#xA;among other mishaps.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;usage-1&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: remove-files.rb [options] [listfile ...]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -j, --[no-]json                  Read input as JSON&#xA;    -y, --[no-]yaml                  Read input as YAML (default)&#xA;    -x, --[no-]mixed                 Deduce format from files&#xA;    -u, --[no-]dry-run               Don&amp;#39;t delete, just list files&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing-1&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;display:grid;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;psych&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Append all but the first paths from each set in `filesets` to results&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_files&lt;/span&gt;(result, filesets, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;  filesets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;fset&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;    delset &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fset&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Skip the first file in each set&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Skipping &amp;#34;&lt;/span&gt;, fset&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Adding &amp;#34;&lt;/span&gt;, delset, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;    delset&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;n&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;      result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Figure out if the `text` in `path` is JSON&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;is_json&lt;/span&gt;(path, text)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;  text&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;strip! &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Bad form to modify an argument&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;  path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;end_with?(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;.json&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; text&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start_with?(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;{&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;[&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;read_file&lt;/span&gt;(files, path, verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Reading &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;  text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;read&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; is_json(path, text) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Assuming JSON: &amp;#34;&lt;/span&gt;, path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;      append_files(files, &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse(text), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Assuming YAML: &amp;#34;&lt;/span&gt;, path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;      append_files(files, &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;safe_load(text), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;JsonError&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;isn&amp;#39;t valid JSON; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Psych&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;isn&amp;#39;t valid YAML; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Run the main loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;  info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;  verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;  input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;  dry &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;  files &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: remove-files.rb [options] [listfile ...]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;      info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;      verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]json&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Read input as JSON&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;      input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]yaml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Read input as YAML (default)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;      input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-x&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]mixed&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Deduce format from files&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;      input &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-u&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]dry-run&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Don&amp;#39;t delete, just list files&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;      dry &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; input &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:json&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Assuming we&amp;#39;re getting a single JSON object ...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;      result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse(&lt;span style=&#34;color:#800&#34;&gt;ARGF&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;read)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;      append_files(files, result, verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; input &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:yaml&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;      append_files(files, &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;safe_load(&lt;span style=&#34;color:#800&#34;&gt;ARGF&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;read), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each { &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; read_file(files, path, verbose) }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Psych&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Input isn&amp;#39;t valid YAML; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;JsonError&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Input isn&amp;#39;t valid JSON; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;About to remove the following files:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(files, &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;  files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;uniq!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;  files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;  count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;  files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-&amp;gt; rm &amp;#34;&lt;/span&gt;, path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;delete(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; dry &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;      count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;StandardError&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Cannot remove &amp;#34;&lt;/span&gt;, path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Removed &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; files.&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; (Not really.)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; dry&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex; background-color:#e5e5e5&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>A (Revised) Report on SLAN: Scheme List-Atom Notation</title>
      <link>https://frank-mitchell.com/projects/slan-past/slan-r1/</link>
      <pubDate>Mon, 06 Feb 2023 15:22:47 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/slan-past/slan-r1/</guid>
      <description>&lt;p&gt;::: note&#xA;CHANGED (2025-10-25): Fixed broken link to ELTN.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;SLAN is the Scheme List-Atom Notation&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, because I really wanted the&#xA;acronym &lt;a href=&#34;https://en.wikipedia.org/wiki/Slan&#34;&gt;SLAN&lt;/a&gt;.&#xA;Like &lt;a href=&#34;https://www.w3.org/TR/xml/&#34;&gt;XML&lt;/a&gt;, &lt;a href=&#34;https://yaml.org/&#34;&gt;YAML&lt;/a&gt;, &lt;a href=&#34;https://www.json.org/&#34;&gt;JSON&lt;/a&gt;, &lt;a href=&#34;https://toml.io/&#34;&gt;TOML&lt;/a&gt;, and my own &lt;a href=&#34;https://frank-mitchell.com/projects/eltn/&#34;&gt;ELTN&lt;/a&gt; it&amp;rsquo;s a&#xA;language for describing data structures, not performing calculations.&#xA;In SLAN everything is a list of &amp;ldquo;atoms&amp;rdquo; &amp;ndash; strings, numbers, &amp;ldquo;symbols&amp;rdquo;,&#xA;and booleans &amp;ndash; and other lists.&lt;/p&gt;&#xA;&lt;p&gt;SLAN somewhat resembles the programming language Scheme, but even smaller:&#xA;entire data types and constructions have been cut out to make parsing&#xA;simpler.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Future(?) Project List</title>
      <link>https://frank-mitchell.com/projects/list/</link>
      <pubDate>Sat, 04 Feb 2023 10:58:22 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/list/</guid>
      <description>&lt;p&gt;Mostly for my own sake, here&amp;rsquo;s a list of programming projects I&amp;rsquo;d &lt;em&gt;like&lt;/em&gt;&#xA;to do. I lack the time, energy, and skills to undertake most of them.&#xA;Enjoy.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Pri&lt;/th&gt;&#xA;          &lt;th&gt;Name&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;I.L.&lt;/th&gt;&#xA;          &lt;th&gt;Description&lt;/th&gt;&#xA;          &lt;th&gt;Status&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A++&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../eltn-c/&#34;&gt;ELTN-C&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c, &amp;hellip;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../eltn/&#34;&gt;ELTN&lt;/a&gt; Pull Parser with C, Ruby, Python, etc. bindings&lt;/td&gt;&#xA;          &lt;td&gt;partly coded&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A+&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../eltn-lua/&#34;&gt;ELTN-Lua&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;lua&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../eltn/&#34;&gt;ELTN&lt;/a&gt; Parser in pure Lua&lt;/td&gt;&#xA;          &lt;td&gt;mostly&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../java/cache/&#34;&gt;Cache&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java&lt;/td&gt;&#xA;          &lt;td&gt;Simple in-memory caches&lt;/td&gt;&#xA;          &lt;td&gt;partly coded, barely works&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../java/codepoint/&#34;&gt;codepoint&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java&lt;/td&gt;&#xA;          &lt;td&gt;library to read and write Unicode code points&lt;/td&gt;&#xA;          &lt;td&gt;preliminary version on GitHub&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../java/jsonpp/&#34;&gt;JSONPP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://json.org/&#34;&gt;JSON&lt;/a&gt; Pull Parser&lt;/td&gt;&#xA;          &lt;td&gt;preliminary version on GitHub&lt;sup id=&#34;fnref1:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../java/eltnpp/&#34;&gt;ELTNPP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../eltn/&#34;&gt;ELTN&lt;/a&gt; Pull Parser in Java&lt;/td&gt;&#xA;          &lt;td&gt;implementation barely started&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A-&lt;/td&gt;&#xA;          &lt;td&gt;C-&lt;a href=&#34;../fmcbase/cconv/&#34;&gt;Conv&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;portable unicode conversion library&lt;/td&gt;&#xA;          &lt;td&gt;implementation almost complete&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A-&lt;/td&gt;&#xA;          &lt;td&gt;C-&lt;a href=&#34;../fmcbase/csymbol/&#34;&gt;Symbol&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;portable library for interned C-strings&lt;/td&gt;&#xA;          &lt;td&gt;implementation almost complete&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A-&lt;/td&gt;&#xA;          &lt;td&gt;C-&lt;a href=&#34;../fmcbase/ctable/&#34;&gt;Table&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;portable hashtable implementation&lt;/td&gt;&#xA;          &lt;td&gt;implementation almost complete&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A-&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../future/json-c/&#34;&gt;JSON-C&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c, &amp;hellip;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://json.org/&#34;&gt;JSON&lt;/a&gt; Pull Parser with C, Ruby, Python, etc. bindings&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;A-&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../tiny-list/&#34;&gt;Tiny Projects&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;em&gt;various&lt;/em&gt;&lt;/td&gt;&#xA;          &lt;td&gt;assorted small projects to learn various languages&lt;/td&gt;&#xA;          &lt;td&gt;only three (of 80+ possible) done&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B&lt;/td&gt;&#xA;          &lt;td&gt;C-&lt;a href=&#34;../future/cport/&#34;&gt;Port&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;portable library for I/O in embedded and non-standard C&lt;/td&gt;&#xA;          &lt;td&gt;vaporware&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/estimator/&#34;&gt;Estimation Framework&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;estimate time a calculation takes for more accurate progress bars&lt;/td&gt;&#xA;          &lt;td&gt;still exploring&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../slan/&#34;&gt;SLAN&lt;/a&gt;-C&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c, &amp;hellip;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../slan/&#34;&gt;SLAN&lt;/a&gt; Pull Parser with C, Ruby, Python, etc. bindings&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../slan/&#34;&gt;SLAN&lt;/a&gt;-J&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java&lt;/td&gt;&#xA;          &lt;td&gt;Scheme-like alternative to JSON, YAML, etc.&lt;/td&gt;&#xA;          &lt;td&gt;spec written and amended, implementation barely started&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B-&lt;/td&gt;&#xA;          &lt;td&gt;Bookmark DB&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;js? py? ts?&lt;/td&gt;&#xA;          &lt;td&gt;database of ALLLLL my bookmarks&lt;/td&gt;&#xA;          &lt;td&gt;small prototype using Python, not ready for prime time&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B-&lt;/td&gt;&#xA;          &lt;td&gt;Dependency Tracer&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java, js/py/rb&lt;/td&gt;&#xA;          &lt;td&gt;trace code dependencies and unused classes in Java and JSPs&lt;/td&gt;&#xA;          &lt;td&gt;some half-baked programs, but mostly vapor&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B-&lt;/td&gt;&#xA;          &lt;td&gt;E-Book DB&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;js? py? ts?&lt;/td&gt;&#xA;          &lt;td&gt;database of ALLLL my pdfs and epubs, including if I&amp;rsquo;ve read them (yet?)&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B-&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/luaenv/&#34;&gt;luaenv&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;lua&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rbenv/rbenv&#34;&gt;rbenv&lt;/a&gt; for Lua&lt;/td&gt;&#xA;          &lt;td&gt;vapor; done better by other people&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;B-&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../future/tpp/&#34;&gt;TPP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;lua, py, rb&lt;/td&gt;&#xA;          &lt;td&gt;Template Pre-Parser, for non-C source/library version incompatibilities and simple code generation&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C+&lt;/td&gt;&#xA;          &lt;td&gt;Contract Definition Language (CDL)&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java? py?&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Design_by_contract&#34; title=&#34;w:Design by Contract&#34;&gt;DbC&lt;/a&gt; &lt;a href=&#34;https://en.wikipedia.org/wiki/Domain-specific_language&#34; title=&#34;w:Domain Specific Language&#34;&gt;DSL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C+&lt;/td&gt;&#xA;          &lt;td&gt;Contract-&lt;em&gt;X&lt;/em&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java, py ⇒ c, cs, java, js, ts, &amp;hellip;&lt;/td&gt;&#xA;          &lt;td&gt;CDL preprocessor + library for various programming languages&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C+&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.jsonrpc.org/&#34;&gt;JSON-RPC&lt;/a&gt; Server&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;library for a non-blocking HTTP(S)-based &lt;a href=&#34;https://www.jsonrpc.org/&#34;&gt;JSON-RPC&lt;/a&gt; server frontend&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C+&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/luacsp/&#34;&gt;Lua CSP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;lua, c&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Communicating_sequential_processes&#34;&gt;Communicating Sequential Processes&lt;/a&gt; in Lua&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C+&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/statiki/&#34;&gt;Statiki&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;go? lua? py? rb?&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://gohugo.io/&#34;&gt;hugo&lt;/a&gt; for wikis&lt;/td&gt;&#xA;          &lt;td&gt;vapor; a private hugo server fills most of my needs.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/expobj/#memory-and-reference-counting&#34;&gt;E-Any&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;ref-counting framework for any &amp;ldquo;object&amp;rdquo;&lt;/td&gt;&#xA;          &lt;td&gt;all vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/expobj/#string&#34;&gt;E-String&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;ref-counted Unicode String&lt;/td&gt;&#xA;          &lt;td&gt;all vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/expobj/&#34;&gt;ExpObj&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c, lua, py, rb&lt;/td&gt;&#xA;          &lt;td&gt;&amp;ldquo;exported objects&amp;rdquo; in C&lt;/td&gt;&#xA;          &lt;td&gt;all vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/mstring/#memory-management&#34;&gt;M-Pool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;memory manager for &lt;a href=&#34;../far-future/mstring/&#34;&gt;M-String&lt;/a&gt;s (and other things?)&lt;/td&gt;&#xA;          &lt;td&gt;mostly vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/mstring/&#34;&gt;M-String&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;memory-managed Unicode strings&lt;/td&gt;&#xA;          &lt;td&gt;mostly vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/typelib/&#34;&gt;TypeLib&lt;/a&gt; (formerly M-Lib)&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c&lt;/td&gt;&#xA;          &lt;td&gt;extending M-Strings to useful datatypes, data structures, and a hybrid XPCOM/CORBA component model&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;C&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/xtidl/&#34;&gt;XTIDL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;java, c&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/expobj/&#34;&gt;ExpObj&lt;/a&gt;/&lt;a href=&#34;../far-future/typelib/&#34;&gt;TypeLib&lt;/a&gt; Interface Definition Language&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;D&lt;/td&gt;&#xA;          &lt;td&gt;Agile Project Tracker&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;index cards and whiteboards automated&lt;/td&gt;&#xA;          &lt;td&gt;vapor, plus there&amp;rsquo;s at least a dozen&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;D&lt;/td&gt;&#xA;          &lt;td&gt;Game Table&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;play tabletop games on your browser!&lt;/td&gt;&#xA;          &lt;td&gt;vapor, plus there&amp;rsquo;s at least half a dozen now&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;D&lt;/td&gt;&#xA;          &lt;td&gt;Language Construction Tools&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;write your own Klingon!&lt;/td&gt;&#xA;          &lt;td&gt;vapor, plus &lt;a href=&#34;https://www.vulgarlang.com&#34;&gt;https://www.vulgarlang.com&lt;/a&gt; does it better.&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;D&lt;/td&gt;&#xA;          &lt;td&gt;Lending Library&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;database and app for friends who borrow books&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;D&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;../far-future/teufel-notes/&#34;&gt;Teufel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;c, teufel&lt;/td&gt;&#xA;          &lt;td&gt;The best parts of Eiffel, Java, SML, and Go&lt;/td&gt;&#xA;          &lt;td&gt;total vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;D&lt;/td&gt;&#xA;          &lt;td&gt;TTRPG Character Generator&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;html, js&lt;/td&gt;&#xA;          &lt;td&gt;chargen for my current favorite table top role-playing game&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;          &lt;td&gt;very vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;E&lt;/td&gt;&#xA;          &lt;td&gt;Inventory and Invoicing&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;toy enterprise app for educational purposes&lt;/td&gt;&#xA;          &lt;td&gt;vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;E&lt;/td&gt;&#xA;          &lt;td&gt;Messaging Framework&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;exorcizing ghosts from my message-oriented-middleware startup past&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&#xA;          &lt;td&gt;very, very vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;E&lt;/td&gt;&#xA;          &lt;td&gt;Space Game&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;live your &lt;em&gt;Star Trek&lt;/em&gt;&lt;sup id=&#34;fnref:8&#34;&gt;&lt;a href=&#34;#fn:8&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;8&lt;/a&gt;&lt;/sup&gt; and &lt;em&gt;Last Starfighter&lt;/em&gt;&lt;sup id=&#34;fnref:9&#34;&gt;&lt;a href=&#34;#fn:9&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;9&lt;/a&gt;&lt;/sup&gt; dreams!&lt;/td&gt;&#xA;          &lt;td&gt;oh so vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;E&lt;/td&gt;&#xA;          &lt;td&gt;Text Adventure Engine&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;write your own Infocom game!&lt;/td&gt;&#xA;          &lt;td&gt;so very vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;E&lt;/td&gt;&#xA;          &lt;td&gt;Trade and Market Data&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;?&lt;/td&gt;&#xA;          &lt;td&gt;exorcizing ghosts from my trading desk support past&lt;/td&gt;&#xA;          &lt;td&gt;very, very vapor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Yes, many of these come from an old list I found.&#xA;I&amp;rsquo;ll add more when I come up with new ideas or act on these old ones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://frank-mitchell.com/contact/</link>
      <pubDate>Sun, 29 Jan 2023 14:27:41 -0600</pubDate>
      <guid>https://frank-mitchell.com/contact/</guid>
      <description>&lt;p&gt;If you need to get in touch with the owner of this site, you can use&#xA;the form below.&lt;/p&gt;&#xA;&lt;form&#xA;  action=&#34;https://formspree.io/f/xyyakjor&#34;&#xA;  method=&#34;POST&#34;&#xA;&gt;&#xA;  &lt;div class=&#34;form-field&#34;&gt;&#xA;  &lt;label&gt;&#xA;    Your name:&#xA;  &lt;/label&gt;&#xA;  &lt;br/&gt;&#xA;  &lt;div class=&#34;form-name&#34;&gt;&#xA;  &lt;input name=&#34;name&#34; cols=&#34;40&#34; placeholder=&#34;Name&#34; /&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;form-field&#34;&gt;&#xA;  &lt;label&gt;&#xA;    Your email:&#xA;  &lt;/label&gt;&#xA;  &lt;br/&gt;&#xA;  &lt;div class=&#34;form-email&#34;&gt;&#xA;  &lt;input type=&#34;email&#34; name=&#34;email&#34; cols=&#34;40&#34; placeholder=&#34;Email&#34; /&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;form-field&#34;&gt;&#xA;  &lt;label&gt;&#xA;    Subject:&#xA;  &lt;/label&gt;&#xA;  &lt;br/&gt;&#xA;  &lt;div class=&#34;form-subject&#34;&gt;&#xA;  &lt;input name=&#34;subject&#34; placeholder=&#34;Subject&#34; /&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;form-field&#34; cols=&#34;40&#34;&gt;&#xA;  &lt;label&gt;&#xA;    Your message:&#xA;  &lt;/label&gt;&#xA;  &lt;br/&gt;&#xA;  &lt;div class=&#34;form-message&#34;&gt;&#xA;  &lt;textarea name=&#34;message&#34; cols=&#34;40&#34; rows=&#34;8&#34;&gt;&lt;/textarea&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;!-- your other form fields go here --&gt;&#xA;  &lt;button type=&#34;submit&#34;&gt;Send&lt;/button&gt;&#xA;&lt;/form&gt;</description>
    </item>
    <item>
      <title>Star Trek Head Canon Roundup</title>
      <link>https://frank-mitchell.com/posts/trek-roundup/</link>
      <pubDate>Sun, 29 Jan 2023 12:12:30 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/trek-roundup/</guid>
      <description>&lt;p&gt;Since I &lt;em&gt;have&lt;/em&gt; been watching a lot of &lt;em&gt;Star Trek&lt;/em&gt; (and about Trek) I&amp;rsquo;ve&#xA;collected a few bits of &lt;a href=&#34;https://www.merriam-webster.com/words-at-play/words-were-watching-headcanon-fanon&#34;&gt;headcanon&lt;/a&gt; that have been building up.&#xA;Some of these have shown up on YouTube comments I&amp;rsquo;ve posted when I&amp;rsquo;m bored.&lt;/p&gt;&#xA;&lt;h2 id=&#34;is-klingon-blood-red-or-pink&#34;&gt;Is Klingon blood red or pink?&lt;/h2&gt;&#xA;&lt;p&gt;In most &lt;em&gt;Star Trek&lt;/em&gt; shows wounded Klingons bleed red. In &lt;em&gt;Star Trek VI&lt;/em&gt; (1991),&#xA;though, when assassins shoot Chancellor Gorkon and his party with&#xA;slugthrowers (&lt;strong&gt;guns&lt;/strong&gt; for us 21st century barbarians) while the artificial&#xA;gravity is off, globules of pink or magenta fluid spews from the wounds.&#xA;Even in his death scene, Gorkon&amp;rsquo;s bleeding pink, not red. What&amp;rsquo;s the deal?&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Specification of the ELTN File Format (v0.5)</title>
      <link>https://frank-mitchell.com/projects/eltn-past/eltn-0-5/</link>
      <pubDate>Thu, 26 Jan 2023 02:30:23 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/eltn-past/eltn-0-5/</guid>
      <description>&lt;p&gt;ELTN (Extended Lua Table Notation) is a structured text format to describe&#xA;data structures. It fills similar niches to other text formats like&#xA;&lt;a href=&#34;https://www.w3.org/TR/xml/&#34; title=&#34;w3.org&#34;&gt;XML&lt;/a&gt; (1997-2008),&#xA;&lt;a href=&#34;https://yaml.org/&#34; title=&#34;yaml.org&#34;&gt;YAML&lt;/a&gt; (2004-2021),&#xA;&lt;a href=&#34;http://www.json.org&#34; title=&#34;json.org&#34;&gt;JSON&lt;/a&gt; (2006-2017),&#xA;and &lt;a href=&#34;https://toml.io/en/&#34; title=&#34;toml.io&#34;&gt;TOML&lt;/a&gt; (2013-2021).&#xA;Like JSON it&amp;rsquo;s a strict subset of a dynamically typed embedded programming&#xA;language, &lt;a href=&#34;http://www.lua.org&#34; title=&#34;lua.org&#34;&gt;Lua&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The name &lt;em&gt;Extended&lt;/em&gt; Lua Table Notation reflects that the syntax does not&#xA;simply include Lua tables but a sequence of key-value pairs similar to Lua&#xA;global variable assignments.  Thus one doesn&amp;rsquo;t have to group the whole&#xA;document in curly brackets (&amp;rsquo;{&amp;rsquo; &amp;hellip; &amp;lsquo;}&amp;rsquo;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adventures in Java, or, a &#39;Three Hour&#39; Tour</title>
      <link>https://frank-mitchell.com/posts/a-three-hour-tour/</link>
      <pubDate>Sun, 22 Jan 2023 13:56:35 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/a-three-hour-tour/</guid>
      <description>&lt;p&gt;Yesterday I thought I&amp;rsquo;d spruce up a&#xA;&lt;a href=&#34;../unwanted-software-thoughts-syndrome/#json-pull-parser&#34;&gt;&amp;ldquo;JSON Pull Parser&amp;rdquo;&lt;/a&gt;&#xA;that I &lt;a href=&#34;../progress-report-2/&#34;&gt;apparently&lt;/a&gt; wrote in 2019 using the &lt;a href=&#34;https://www.eclipse.org/downloads/&#34; title=&#34;Eclipse (IDE)&#34;&gt;Eclipse&lt;/a&gt;&#xA;&lt;abbr title=&#34;Integrated Development Environment&#34;&gt;IDE&lt;/abbr&gt;,&#xA;then write a new version of a caching framework I wrote for Hotels.com&#xA;way back in 2006.&#xA;It would be an opportunity to scrape the rust off my Java programming skills,&#xA;get better acquainted with &lt;a href=&#34;https://git-scm.com/&#34; title=&#34;Git --fast-version-control&#34;&gt;Git&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, and see what the new version&#xA;of Eclipse was like.&#xA;I figured it would only take a couple of hours, three tops.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Original D&amp;D Elf Revised</title>
      <link>https://frank-mitchell.com/posts/odnd-elf-revised/</link>
      <pubDate>Fri, 20 Jan 2023 15:19:17 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/odnd-elf-revised/</guid>
      <description>&lt;p&gt;Someone who saw my &lt;a href=&#34;../an-elf-not-off-the-shelf/&#34;&gt;post on elves&lt;/a&gt; may&#xA;remember this picture taken from the Original D&amp;amp;D White Box manuals.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;original.jpg&#34; alt=&#34;White Box D&amp;amp;D &amp;lsquo;Elf&amp;rsquo;&#34; title=&#34;White Box D&amp;amp;D &#39;Elf&#39;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;A while ago I was playing around with &lt;a href=&#34;http://heroforge.com&#34;&gt;http://heroforge.com&lt;/a&gt; and created&#xA;my own take on this, um, &amp;ldquo;elf&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;heroforge.png&#34; alt=&#34;Heroforge Small Elf Screenshot&#34; title=&#34;Heroforge Small Elf Screenshot&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since Hero Forge makes 3D printed miniatures for a living&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, I&#xA;bought a print of this miniature in gray plastic. It&amp;rsquo;s kinda nice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos 4</title>
      <link>https://frank-mitchell.com/posts/music-videos-4/</link>
      <pubDate>Tue, 17 Jan 2023 00:57:07 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos-4/</guid>
      <description>&lt;p&gt;As I dig through my old iTunes music files, I find music I can&amp;rsquo;t believe&#xA;I forgot about.&lt;/p&gt;&#xA;&lt;h2 id=&#34;batman-the-animated-series&#34;&gt;Batman: The Animated Series&lt;/h2&gt;&#xA;&lt;p&gt;Possibly the best American kid&amp;rsquo;s cartoon ever made, full stop.&lt;/p&gt;&#xA;&lt;p&gt;In November 2022 we lost Kevin Conroy, voice of Batman/Bruce Wayne in this&#xA;show and many, many other cartoons and video games since.&#xA;He will be missed.&lt;/p&gt;&#xA;&lt;p&gt;And yes, I own all four sountrack albums on six CDs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos 3 (C)</title>
      <link>https://frank-mitchell.com/posts/music-videos-3c/</link>
      <pubDate>Mon, 16 Jan 2023 21:05:46 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos-3c/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This whole post eats up a lot of memory in Chrome, so I&#39;ve decided to split it &#xA;into three parts.&#xA;&lt;a href=&#34;../music-videos-3a/&#34;&gt;Part A is here.&lt;/a&gt;&#xA;&lt;a href=&#34;../music-videos-3b/&#34;&gt;Part B is here.&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../music-videos-3b/&#34;&gt;Previously on &amp;ldquo;Music Videos 3&amp;rdquo; &amp;hellip;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;doctor-who&#34;&gt;Doctor Who&lt;/h2&gt;&#xA;&lt;h3 id=&#34;this-time-theres-three-of-us&#34;&gt;&amp;ldquo;This Time There&amp;rsquo;s Three of Us&amp;rdquo;&lt;/h3&gt;&#xA;&lt;p&gt;In 2013&amp;rsquo;s &lt;em&gt;The Day of the Doctor&lt;/em&gt; a mystery involving paintings whose&#xA;subjects are missing leads the Doctor to the incarnation he&amp;rsquo;d rather forget:&#xA;the &lt;a href=&#34;https://www.youtube.com/watch?v=a8HoZlhenZ4&#34;&gt;War Doctor&lt;/a&gt;,&#xA;the one who fought the Daleks in the Great Time War&#xA;and who could only &amp;ldquo;win&amp;rdquo; by destroying both Daleks &lt;em&gt;and&lt;/em&gt; Time Lords&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&#xA;The Tenth and Eleventh Doctors end up at that moment with the War Doctor,&#xA;and decide to rewrite their own history &amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos 3 (B)</title>
      <link>https://frank-mitchell.com/posts/music-videos-3b/</link>
      <pubDate>Mon, 16 Jan 2023 21:05:45 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos-3b/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;The whole post eats up a lot of memory in Chrome, so I&#39;ve decided to split it &#xA;into three parts.&#xA;&lt;a href=&#34;../music-videos-3a/&#34;&gt;Part A is here.&lt;/a&gt;&#xA;&lt;a href=&#34;../music-videos-3c/&#34;&gt;Part C is here.&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../music-videos-3a/&#34;&gt;Previously on &amp;ldquo;Music Videos 3&amp;rdquo; &amp;hellip;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;doctor-who&#34;&gt;Doctor Who&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-cyberman-variations&#34;&gt;The Cyberman Variations&lt;/h3&gt;&#xA;&lt;p&gt;One of the Doctor&amp;rsquo;s &lt;em&gt;other&lt;/em&gt; most often recurring antagonists are the Cybermen.&#xA;The 1966 serial &lt;em&gt;The Tenth Planet&lt;/em&gt; introduced the Cybermen as survivors&#xA;of the planet Mondas who turned themselves into unfeeling cyborgs.&#xA;&lt;em&gt;Their&lt;/em&gt; goal is to convert all humanoids into Cybermen so they can join their&#xA;&lt;del&gt;collective&lt;/del&gt; ranks.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;The costume evolved over the years.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos 3 (A)</title>
      <link>https://frank-mitchell.com/posts/music-videos-3a/</link>
      <pubDate>Mon, 16 Jan 2023 21:05:44 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos-3a/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This whole post eats up a lot of memory in Chrome, so I&#39;ve decided to split it &#xA;into three parts.&#xA;&lt;a href=&#34;../music-videos-3b&#34;&gt;Part B is here.&lt;/a&gt;&#xA;&lt;a href=&#34;../music-videos-3b&#34;&gt;Part C is here.&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Just like the &lt;a href=&#34;../music-videos/&#34;&gt;other&lt;/a&gt; &lt;a href=&#34;../music-videos-2/&#34;&gt;two&lt;/a&gt; installments,&#xA;this collects Youtube videos containing music that&amp;rsquo;s been stuck in my head&#xA;lately.&lt;/p&gt;&#xA;&lt;h2 id=&#34;doctor-who&#34;&gt;Doctor Who&lt;/h2&gt;&#xA;&lt;p&gt;Composer Murray Gold&amp;rsquo;s soundtrack for &lt;em&gt;Doctor Who&lt;/em&gt; complemented and&#xA;sometimes elevated &lt;em&gt;Doctor Who&lt;/em&gt; (2005) from Series 1 through 10.&#xA;I think more people were upset when he left than when showrunner Steven Moffat&#xA;left at the same time. (So did Peter Capaldi as the Twelfth Doctor,&#xA;but people were sad about that.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Star Trek: The Qegh Dynasty</title>
      <link>https://frank-mitchell.com/posts/qegh-dynasty/</link>
      <pubDate>Sun, 15 Jan 2023 14:40:58 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/qegh-dynasty/</guid>
      <description>&lt;p&gt;So I wrote the &lt;a href=&#34;../klingon-classes&#34;&gt;last article&lt;/a&gt; to write this one.&#xA;Sort of.&lt;/p&gt;&#xA;&lt;p&gt;To summarize the last article:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Following a line from &lt;em&gt;Star Trek: Enterprise&lt;/em&gt; episode 2x19 &amp;ldquo;Judgement&amp;rdquo;,&#xA;I elaborated on some &lt;em&gt;purely fan-fictional&lt;/em&gt; ideas about the Klingon&#xA;social classes beyond the Warrior Class.&lt;/li&gt;&#xA;&lt;li&gt;I posited that the military takeover of the Empire in the 22nd century&#xA;gutted the &amp;ldquo;Scholar&amp;rdquo; class of intellectuals, scientists, and legal experts,&#xA;and set back science, medicine, law, the arts, and historical interpretation.&#xA;The effect on medicine was pretty dire: doctors as a profession virtually&#xA;disappeared, replaced with &amp;ldquo;medtechs&amp;rdquo; who required only a few years&#xA;in the equivalent of a trade school before they could work on live Klingons.&#xA;As Klingons can survive a lot of things, not many noticed.&lt;/li&gt;&#xA;&lt;li&gt;The other classes &amp;ndash; Merchants, Workers, and an underclass of&#xA;&amp;ldquo;aliens&amp;rdquo; and slaves &amp;ndash; suffered severe restrictions in the 22nd and 23rd&#xA;centuries, but gained more power and legal rights over the 24th century.&#xA;Merchants could own their own ships,&#xA;workers could and did amass enough wealth to own farms and factories,&#xA;and non-Klingon slaves, freed in the late 24th century, saw their&#xA;fortunes improve albeit as second-class citizens.&lt;/li&gt;&#xA;&lt;li&gt;Even the Scholar class eventually started to come back, thanks to&#xA;an Imperial School of Medicine, greater tolerance for free speech,&#xA;and scientific and cultural exchanges with the Federation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This article details a Merchant/Worker family that persevered to become&#xA;the equivalent of a warrior Great House, at least in influence.&#xA;We also &lt;em&gt;finally&lt;/em&gt; come to Lurlenn Qegh, the minor character from another fanfic&#xA;whose development apparently required over 9000 words of prose.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Star Trek: The Other Klingon Classes</title>
      <link>https://frank-mitchell.com/posts/klingon-classes/</link>
      <pubDate>Fri, 13 Jan 2023 14:39:00 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/klingon-classes/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;You didn&amp;rsquo;t believe all Klingons were soldiers?&#xA;[&amp;hellip;]&#xA;We were a great society, not so long ago, when honor was earned through&#xA;integrity and acts of true courage, not senseless bloodshed.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ndash; &lt;a href=&#34;https://youtu.be/N5EVt8mBxKY&#34;&gt;Advocate Kolos to Captain Archer&lt;/a&gt;,&#xA;2152 (ENT 2x19)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For some reason my brain drifts to &lt;em&gt;Star Trek&lt;/em&gt; fanfic.&lt;/p&gt;&#xA;&lt;p&gt;One originally &lt;strong&gt;minor&lt;/strong&gt; &lt;a href=&#34;../qegh-dynasty/#lurlenn&#34;&gt;character&lt;/a&gt; in an ever-expanding story is a&#xA;Klingon doctor now working for Starfleet.&#xA;Therefore, I felt compelled to establish not only her backstory but&#xA;her family history and ultimately the history of Klingons outside the&#xA;warrior class, by birth and by choice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Star Trek: The Gorn Continuity</title>
      <link>https://frank-mitchell.com/posts/gorn-retcon/</link>
      <pubDate>Mon, 26 Dec 2022 14:25:02 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/gorn-retcon/</guid>
      <description>&lt;p&gt;Since I&amp;rsquo;m on a &lt;em&gt;Star Trek&lt;/em&gt; kick lately, I decided &lt;em&gt;finally&lt;/em&gt; to watch the&#xA;last two episodes of &lt;em&gt;Strange New Worlds&lt;/em&gt;. One of those doubled down&#xA;on the Gorn as space monsters, only this time &lt;em&gt;Alien&lt;/em&gt;&amp;rsquo;s xenomorphs&#xA;crossed with &lt;em&gt;Jurassic Park&lt;/em&gt;&amp;rsquo;s velociraptors.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-gorn-conundrum&#34;&gt;The Gorn Conundrum&lt;/h2&gt;&#xA;&lt;p&gt;While I still believe &lt;a href=&#34;../trek-canon/&#34;&gt;canon isn&amp;rsquo;t real&lt;/a&gt;, it&amp;rsquo;s a little&#xA;worrying that the copyright holders can&amp;rsquo;t agree on the basics of such&#xA;a popular yet little-used starfaring species.  Checking with&#xA;&lt;a href=&#34;https://memory-alpha.fandom.com/wiki/Gorn&#34;&gt;Memory Alpha&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;I count the following depictions:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Star Trek: The Speeches</title>
      <link>https://frank-mitchell.com/posts/trek-speeches/</link>
      <pubDate>Thu, 15 Dec 2022 10:24:40 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/trek-speeches/</guid>
      <description>&lt;p&gt;::: note&#xA;EDITED 2023-09-20 to replace missing videos with text.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;A fixture of &lt;em&gt;Star Trek&lt;/em&gt; shows, verging on cliché, is the captain&#xA;giving a rousing speech about Federation values, humanoid rights, etc.&#xA;I &lt;a href=&#34;../trek-nature/&#34;&gt;previously&lt;/a&gt; noted Pike&amp;rsquo;s speech in &lt;em&gt;Strange New Worlds&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;But what about the &lt;em&gt;other&lt;/em&gt; crew? Where are their speeches?&lt;/p&gt;&#xA;&lt;h2 id=&#34;prodigy&#34;&gt;Prodigy&lt;/h2&gt;&#xA;&lt;h3 id=&#34;what-is-the-federation&#34;&gt;What is the Federation?&lt;/h3&gt;&#xA;&lt;p&gt;In the third episode,&#xA;a hologram of Captain Janeway (technically not the captain)&#xA;explains the Federation to a bunch of alien kids from the other side&#xA;of the galaxy who just stole a (stolen) ship &amp;hellip; and their hostage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos 2</title>
      <link>https://frank-mitchell.com/posts/music-videos-2/</link>
      <pubDate>Sun, 04 Dec 2022 12:01:58 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos-2/</guid>
      <description>&lt;p&gt;Since &lt;a href=&#34;../music-videos/&#34;&gt;the last post&lt;/a&gt; I&amp;rsquo;ve thought of a few more.&lt;/p&gt;&#xA;&lt;h2 id=&#34;akiba-maid-war&#34;&gt;Akiba Maid War&lt;/h2&gt;&#xA;&lt;p&gt;There&amp;rsquo;ve been some good anime this fall, but nothing quite like&#xA;&lt;em&gt;Akiba Maid War&lt;/em&gt;, which reveals that employees at Akihabara&amp;rsquo;s&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Maid_caf%C3%A9&#34;&gt;maid cafés&lt;/a&gt;&#xA;are part of organized crime.&#xA;Cue girls in maid costumes toting guns, whacking the competition&#xA;and anyone else getting in their way.&lt;/p&gt;&#xA;&lt;p&gt;Yes, I still don&amp;rsquo;t understand Japanese,&#xA;but the songs still run through my head at random moments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trek and Canon</title>
      <link>https://frank-mitchell.com/posts/trek-canon/</link>
      <pubDate>Thu, 01 Dec 2022 19:17:45 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/trek-canon/</guid>
      <description>&lt;h2 id=&#34;youtube-considered-annoying&#34;&gt;YouTube Considered Annoying&lt;/h2&gt;&#xA;&lt;p&gt;Honestly, I&amp;rsquo;m not a big &lt;em&gt;Star Trek&lt;/em&gt; fan. I was more into &lt;em&gt;Doctor Who&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Still I&amp;rsquo;m enough of a fan of &lt;em&gt;Lower Decks&lt;/em&gt; and &lt;em&gt;Prodigy&lt;/em&gt; that,&#xA;when I should be doing someting productive,&#xA;I watch YouTube clips and even &lt;em&gt;read the comments&lt;/em&gt;.&#xA;(Which is my big mistake.)&#xA;A lot of criticism of &lt;em&gt;Lower Decks&lt;/em&gt; boils down to the following:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;It&amp;rsquo;s just a &lt;em&gt;Rick &amp;amp; Morty&lt;/em&gt; version of &lt;em&gt;Star Trek&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music Videos</title>
      <link>https://frank-mitchell.com/posts/music-videos/</link>
      <pubDate>Wed, 30 Nov 2022 15:19:04 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/music-videos/</guid>
      <description>&lt;p&gt;Since my brain has entered some weird Twilight Zone where I can neither&#xA;rest nor really concentrate, I&amp;rsquo;ll &lt;del&gt;inflict&lt;/del&gt; treat my hypothetical&#xA;readers to the music that&amp;rsquo;s been running through my head lately.&#xA;Not surprisingly it&amp;rsquo;s all from &lt;em&gt;anime&lt;/em&gt; and Western cartoons.&lt;/p&gt;&#xA;&lt;h2 id=&#34;arcane-league-of-legends&#34;&gt;Arcane: League of Legends&lt;/h2&gt;&#xA;&lt;p&gt;Netflix&amp;rsquo;s &lt;em&gt;Arcane&lt;/em&gt; is, arguably, a masterpiece:&#xA;the animation where every frame looks like a painting&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;,&#xA;the dialogue where no words are wasted and every word matters,&#xA;the story that resists simple categories of heroes and villains &amp;hellip;&#xA;Even Honest Trailers had&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=cBBE4zk36Fw&#34;&gt;few bad things to say&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>duplicate-files.rb - 2022-11-26</title>
      <link>https://frank-mitchell.com/projects/duplicate-files/2022-11-26-rb/</link>
      <pubDate>Sat, 26 Nov 2022 11:40:16 -0600</pubDate>
      <guid>https://frank-mitchell.com/projects/duplicate-files/2022-11-26-rb/</guid>
      <description>&lt;p&gt;For an explanation, see the &lt;a href=&#34;..&#34;&gt;directory above&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;duplicate-filesrb&#34;&gt;&lt;code&gt;duplicate-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -d, --from [DIR]                 Compare arguments only to files from DIR&#xA;    -o, --output [OUTFILE]           Write standard output to OUTFILE&#xA;    -j, --json                       Write output as JSON&#xA;    -y, --yaml                       Write output as YAML (default)&#xA;    -p, --[no-]pretty                Pretty-print output&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;find&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;fileutils&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;  9&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Default list of files to prune in search&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 11&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.svn&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVS&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;CVSROOT&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.DS_Store&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;.git&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 12&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Unfortunate artifact of transition between Ruby 1.9 and 2.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 14&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;class&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;const_defined?(&lt;span style=&#34;color:#19177c&#34;&gt;:Encoding&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 15&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Encoding&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 16&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 17&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 18&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 19&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Simple class to manage an ASCII spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 21&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;Spinner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 22&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;\\&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 23&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 24&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;SPINNER_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 25&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 26&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;(io&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 27&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 28&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 29&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 30&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 31&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 32&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;start&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 33&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 34&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 35&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 36&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 37&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;update&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 38&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 39&lt;/span&gt;&lt;span&gt;            start()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 40&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 41&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 42&lt;/span&gt;&lt;span&gt;        now &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Time&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 43&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; now &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;SPINNER_INTERVAL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 44&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@updated&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 45&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#666&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 46&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\b&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;SPINNER_STATES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;@state&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 47&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 48&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 49&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 50&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 51&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Collects duplicate file sets in lieu of an Array, &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 52&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# and writes them as Ruby objects&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 53&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;DefaultPrinter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 54&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;attr_accessor&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:io&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:pretty&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 55&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 56&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;initialize&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 57&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@results&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 58&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 59&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 60&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;pretty?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 61&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@pretty&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 62&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 63&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 64&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; (obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 65&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@results&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; obj&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 66&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 67&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 68&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print_results&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 69&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@results&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 70&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#19177c&#34;&gt;@results&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 71&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 72&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 73&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;protected&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 74&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 75&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print&lt;/span&gt;(obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 76&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 77&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 78&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 79&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 80&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 81&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Printer class (see above) that serializes as JSON&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 82&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;JsonPrinter&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;DefaultPrinter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 83&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print&lt;/span&gt;(obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 84&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@pretty&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 85&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty_generate(obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 86&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 87&lt;/span&gt;&lt;span&gt;            text &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;generate(obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 88&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(text)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;write(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Printer class (see above) that serializes as YAML.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#00f;font-weight:bold&#34;&gt;YamlPrinter&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;DefaultPrinter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# :line_width setting so file names w/spaces don&amp;#39;t break across lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;DEFAULT_LINE_WIDTH&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;4096&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print&lt;/span&gt;(obj)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;        opts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#19177c&#34;&gt;:line_width&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;DEFAULT_LINE_WIDTH&lt;/span&gt;} &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;@pretty&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# {:canonical =&amp;gt; true} looks almost identical to pretty-printed JSON&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;104&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# so the header keeps them distinct.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;            opts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:header&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;            opts&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;:canonical&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dump(&lt;span style=&#34;color:#19177c&#34;&gt;@results&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;@io&lt;/span&gt;, opts)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;111&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Whether `path_i` and `path_j` refer to duplicate but not identical files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;duplicate_files?&lt;/span&gt;(path_i, path_j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (&lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_i) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;exist?(path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;identical?(path_i, path_j) \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;118&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;FileUtils&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;cmp(path_i, path_j))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;prunable?&lt;/span&gt;(path, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;basename(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; (prune&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;include?(&lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;) &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;fnmatch(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;._*&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;name&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Recurse through array of `dirs` and produce Hash of all files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;127&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;files_by_size&lt;/span&gt;(dirs, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;    result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]=[]&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;    count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;    spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#34;&lt;/span&gt;, dirs, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;: &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;        spinner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Spinner&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;        spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(&lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dirs) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path, prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;                count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;                path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;encode!(&lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ENCODING_UTF8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;                result&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;146&lt;/span&gt;&lt;span&gt;                    count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;                    spinner&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;154&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;155&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Found &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; non-empty files in &amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;156&lt;/span&gt;&lt;span&gt;                      result&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; size groups.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;157&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;158&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;159&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;160&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;161&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Compare each file in `paths` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;162&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_duplicates&lt;/span&gt;(result, paths)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;163&lt;/span&gt;&lt;span&gt;    idsets &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new {&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;h,k&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; h&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]=[&lt;/span&gt;k&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;164&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;165&lt;/span&gt;&lt;span&gt;        (i&lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;length &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;166&lt;/span&gt;&lt;span&gt;            path_i &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;167&lt;/span&gt;&lt;span&gt;            path_j &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;168&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;169&lt;/span&gt;&lt;span&gt;                set_i, set_j &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;, idsets&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;170&lt;/span&gt;&lt;span&gt;                set_i &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path_j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;171&lt;/span&gt;&lt;span&gt;                set_i&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;172&lt;/span&gt;&lt;span&gt;                set_j &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path_i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;173&lt;/span&gt;&lt;span&gt;                set_j&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;174&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;175&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;176&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;177&lt;/span&gt;&lt;span&gt;    idsets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;values&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;uniq&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; s &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;178&lt;/span&gt;&lt;span&gt;        result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;179&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;180&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;181&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;182&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;183&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `fmap` and append lists of equal files to `result`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;184&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# `fmap` is a map of files by size.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;185&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_all_dupes&lt;/span&gt;(result, fmap, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;186&lt;/span&gt;&lt;span&gt;    fmap&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each_pair &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;size, paths&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;187&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;188&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;189&lt;/span&gt;&lt;span&gt;            append_duplicates(result, paths)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;190&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;191&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;192&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;193&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;194&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;195&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Find all files in `srcdir`, compare to all files in `fmap`,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;196&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# and append lists of equal files to `result`.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;197&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# The path from `srcdir` will always be first in the list.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;198&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_dir_dupes&lt;/span&gt;(result, fmap, srcdir, prune&lt;span style=&#34;color:#666&#34;&gt;=[]&lt;/span&gt;, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;199&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Looking for files in &amp;#39;&amp;#34;&lt;/span&gt;, srcdir, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39;:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;200&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;find(srcdir) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_i&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;201&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; prunable?(path_i, prune) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;202&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#800&#34;&gt;Find&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;203&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;file?(path_i) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;204&lt;/span&gt;&lt;span&gt;            size &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size(path_i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;205&lt;/span&gt;&lt;span&gt;            paths &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fmap&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;size&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;206&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; paths &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;empty? &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;207&lt;/span&gt;&lt;span&gt;                dupes &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;208&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing &amp;#39;&amp;#34;&lt;/span&gt;, path_i, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;209&lt;/span&gt;&lt;span&gt;                              &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;#39; to &amp;#34;&lt;/span&gt;, paths, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;210&lt;/span&gt;&lt;span&gt;                paths&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path_j&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;211&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; duplicate_files?(path_i, path_j) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;212&lt;/span&gt;&lt;span&gt;                        dupes &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path_j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;213&lt;/span&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;214&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;215&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;216&lt;/span&gt;&lt;span&gt;                   dupes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;sort!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;217&lt;/span&gt;&lt;span&gt;                   result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;path_i, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;dupes&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;218&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;219&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;220&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;221&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;222&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;223&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;224&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;225&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;226&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;227&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;parse_options&lt;/span&gt;(config)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;228&lt;/span&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;229&lt;/span&gt;&lt;span&gt;    outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;230&lt;/span&gt;&lt;span&gt;    pclass &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;YamlPrinter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;231&lt;/span&gt;&lt;span&gt;    pretty &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;232&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;233&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;234&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: duplicate-files.rb [options] dir1 [dir2 ...]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;235&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;236&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;237&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;238&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;239&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;240&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;241&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;242&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--from [DIR]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;243&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Compare arguments only to files from DIR&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;244&lt;/span&gt;&lt;span&gt;            config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;245&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;246&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-o&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--output [OUTFILE]&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;247&lt;/span&gt;&lt;span&gt;                &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write standard output to OUTFILE&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;f&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;248&lt;/span&gt;&lt;span&gt;            outfile &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(f, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;249&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;250&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--json&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as JSON&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;251&lt;/span&gt;&lt;span&gt;            pclass &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;JsonPrinter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;252&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;253&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--yaml&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Write output as YAML (default)&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;254&lt;/span&gt;&lt;span&gt;            pclass &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;YamlPrinter&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;255&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;256&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-p&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]pretty&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Pretty-print output&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;257&lt;/span&gt;&lt;span&gt;            pretty &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;258&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;259&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;260&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;261&lt;/span&gt;&lt;span&gt;    printer &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; pclass&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;262&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;263&lt;/span&gt;&lt;span&gt;    printer&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;io &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (outfile &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;$stdout&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;264&lt;/span&gt;&lt;span&gt;    printer&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;pretty &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; pretty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;265&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;266&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;printer &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; printer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;267&lt;/span&gt;&lt;span&gt;    config&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;268&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;269&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;270&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Struct&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Options&amp;#34;&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;271&lt;/span&gt;&lt;span&gt;                     &lt;span style=&#34;color:#19177c&#34;&gt;:info&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:verbose&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:canondir&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:dirs&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:prune&lt;/span&gt;, &lt;span style=&#34;color:#19177c&#34;&gt;:printer&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;272&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;273&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;274&lt;/span&gt;&lt;span&gt;    opts &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Options&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;, &lt;span style=&#34;color:#800&#34;&gt;PRUNE&lt;/span&gt;, &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;275&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;276&lt;/span&gt;&lt;span&gt;    parse_options(opts)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;277&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;278&lt;/span&gt;&lt;span&gt;    fmap &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; files_by_size(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;dirs, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune, (opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;or&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;279&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;280&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;281&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Comparing files ...&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;282&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;283&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;284&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;285&lt;/span&gt;&lt;span&gt;        append_dir_dupes(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;printer, fmap, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;canondir, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;286&lt;/span&gt;&lt;span&gt;                         opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;prune, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;287&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;288&lt;/span&gt;&lt;span&gt;        append_all_dupes(opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;printer, fmap, opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;289&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;290&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;291&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;info &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;292&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; done!&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;293&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;294&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;295&lt;/span&gt;&lt;span&gt;    opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;printer&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print_results&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;296&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;297&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;298&lt;/span&gt;&lt;span&gt;run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;remove-filesrb&#34;&gt;&lt;code&gt;remove-files.rb&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;usage-1&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Usage: remove-files.rb [options] [file1 [file2 ...]]&#xA;    -q, --[no-]quiet                 Run absolutely quietly&#xA;    -v, --[no-]verbose               Run verbosely&#xA;    -j, --json [INPUT]               Read paths from JSON file&#xA;    -y, --yaml [INPUT]               Read paths from YAML file&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;listing-1&#34;&gt;Listing&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;optparse&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;yaml&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;append_files&lt;/span&gt;(result, filesets, verbose&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&lt;/span&gt;&lt;span&gt;    filesets&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;fset&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&lt;/span&gt;&lt;span&gt;        delset &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; fset&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;..-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# Skip the first file in each set&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Skipping &amp;#34;&lt;/span&gt;, fset&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Adding &amp;#34;&lt;/span&gt;, delset, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16&lt;/span&gt;&lt;span&gt;        delset&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;n&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17&lt;/span&gt;&lt;span&gt;            result &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;21&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;22&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;23&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;24&lt;/span&gt;&lt;span&gt;    info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;25&lt;/span&gt;&lt;span&gt;    verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;26&lt;/span&gt;&lt;span&gt;    interactive &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;27&lt;/span&gt;&lt;span&gt;    files &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;28&lt;/span&gt;&lt;span&gt;    jsonconf &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;29&lt;/span&gt;&lt;span&gt;    yamlconf &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;30&lt;/span&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;31&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;OptionParser&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;opts&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;32&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;banner &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Usage: remove-files.rb [options] [file1 [file2 ...]]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;33&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;34&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-q&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]quiet&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run absolutely quietly&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;35&lt;/span&gt;&lt;span&gt;            info &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;not&lt;/span&gt; v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;36&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;37&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--[no-]verbose&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Run verbosely&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;38&lt;/span&gt;&lt;span&gt;            verbose &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;39&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;40&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-j&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--json [INPUT]&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Read paths from JSON file&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;41&lt;/span&gt;&lt;span&gt;            jsonconf &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;42&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;43&lt;/span&gt;&lt;span&gt;        opts&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;on(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-y&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;--yaml [INPUT]&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Read paths from YAML file&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;v&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;44&lt;/span&gt;&lt;span&gt;            yamlconf &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;45&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;46&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;47&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;48&lt;/span&gt;&lt;span&gt;    jsonconf&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;49&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Reading &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;50&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;open(path) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;f&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;51&lt;/span&gt;&lt;span&gt;            append_files(files, &lt;span style=&#34;color:#800&#34;&gt;JSON&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;parse(f&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;read), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;52&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;53&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;54&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;55&lt;/span&gt;&lt;span&gt;    yamlconf&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;56&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Reading &amp;#34;&lt;/span&gt;, path, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; ...&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;57&lt;/span&gt;&lt;span&gt;        append_files(files, &lt;span style=&#34;color:#800&#34;&gt;YAML&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;load_file(path), verbose)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;58&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;59&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;60&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;61&lt;/span&gt;&lt;span&gt;        files &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;62&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;63&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;64&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;65&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Files to remove:&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;66&lt;/span&gt;&lt;span&gt;        files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;67&lt;/span&gt;&lt;span&gt;            &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;- &amp;#34;&lt;/span&gt;, path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;68&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;69&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;70&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;71&lt;/span&gt;&lt;span&gt;    count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;72&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;73&lt;/span&gt;&lt;span&gt;    files&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;path&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;74&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;-&amp;gt; rm &amp;#34;&lt;/span&gt;, path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;75&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;begin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;76&lt;/span&gt;&lt;span&gt;           &lt;span style=&#34;color:#800&#34;&gt;File&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;delete(path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;77&lt;/span&gt;&lt;span&gt;           count &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; count &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;78&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;rescue&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;StandardError&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&amp;gt;&lt;/span&gt; msg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;79&lt;/span&gt;&lt;span&gt;           &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(msg, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; verbose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;80&lt;/span&gt;&lt;span&gt;           &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Cannot remove &amp;#34;&lt;/span&gt;, path&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;inspect, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;; skipping.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;81&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;82&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;83&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;84&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;$stderr&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;print(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;Removed &amp;#34;&lt;/span&gt;, count, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34; files.&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;85&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;86&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;87&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;88&lt;/span&gt;&lt;span&gt;run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Relearning Python #0: Introduction</title>
      <link>https://frank-mitchell.com/posts/relearning-python-0/</link>
      <pubDate>Sat, 26 Nov 2022 11:40:16 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/relearning-python-0/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://python.org&#34;&gt;Python&lt;/a&gt; is a popular programming language,&#xA;on a par with C++ and Java,&#xA;especially in the numerical analysis community.&#xA;I thought it would behoove me to pick it up again.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately the last Python version I used for a job was 2.0, back in 2003.&#xA;The most recently released version was 3.11.&#xA;Python 3.5, installed by default on my laptop, is no longer supported&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;,&#xA;and Python 3.7 is the earliest one that &lt;em&gt;is&lt;/em&gt; supported&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&#xA;Python 2.7, used by some software on my laptop, is apparently &lt;strong&gt;way&lt;/strong&gt; old.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Christmas List</title>
      <link>https://frank-mitchell.com/posts/christmas-list/</link>
      <pubDate>Fri, 25 Nov 2022 15:10:52 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/christmas-list/</guid>
      <description>&lt;p&gt;My only working&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; computer is a used&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; Lenovo ThinkPad T400&#xA;on which I installed Linux Mint 18.3. It has several issues:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The battery is pretty much shot. I let it run on battery power alone&#xA;and it abruptly died after about 10 &lt;em&gt;minutes&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Originally I had two adaptors, due to a snafu with the company I&#xA;got the laptop from.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The one I&amp;rsquo;ve been using has what looks like a nick in the cord to the&#xA;computer. I wrapped it in packing tape(?!?) to keep it from getting worse.&#xA;Today it didn&amp;rsquo;t want to supply power to the laptop for a while,&#xA;although now it&amp;rsquo;s fine. Don&amp;rsquo;t know what that&amp;rsquo;s about.&lt;/li&gt;&#xA;&lt;li&gt;The other had a loose connection that I had originally set aside.&#xA;It started heating up and &lt;em&gt;sparked&lt;/em&gt; when I tried to use it today.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The lower right mouse button no longer works, maybe from overuse.&#xA;(Hey, I like opening pages in a new tab. So sue me.)&#xA;The upper one still works, for now.&lt;/li&gt;&#xA;&lt;li&gt;The keyboard is &lt;em&gt;filthy&lt;/em&gt;. Which is what I get for computing and eating.&lt;/li&gt;&#xA;&lt;li&gt;A while(?!?) ago the DVD tray on the side kept randomly popping out.&#xA;I kept pulling it out all the way and pushing it back in.&#xA;On one of those occasions the whole tray &lt;em&gt;broke off&lt;/em&gt;.&#xA;I sealed the hole with packing tape, but something&amp;rsquo;s still rattling&#xA;around in there somewhere.&lt;/li&gt;&#xA;&lt;li&gt;At some point I think Mint 18.3 was end-of-lifed, because all the&#xA;little software updates I used to get stopped.&#xA;(Except for the Chrome browser, which I downloaded from Google.&#xA;They&amp;rsquo;re always tweaking that thing.)&#xA;That&amp;rsquo;s &lt;em&gt;good&lt;/em&gt; in that I&amp;rsquo;m no longer prompted to upgrade &lt;code&gt;inetd&lt;/code&gt; or whatever,&#xA;but bad because I&amp;rsquo;m probably missing important security fixes.&lt;/li&gt;&#xA;&lt;li&gt;Part of the right front corner is broken.&#xA;I don&amp;rsquo;t recall if it came that way or it cracked soon after I got it.&#xA;In any case, I keep it together and smooth out the sharp edges with,&#xA;you guessed it, packing tape.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Today I remedied the first two problems by ordering a new charger and battery&#xA;from a company I &lt;em&gt;hope&lt;/em&gt; won&amp;rsquo;t sell me the wrong thing or rip me off.&#xA;The others are harder to fix.&#xA;For example, when popping off a sticky key I have sometimes broken the little&#xA;plastic thing that makes it pop up when pressed;&#xA;I can&amp;rsquo;t imagine popping them &lt;em&gt;all&lt;/em&gt; off to clean out the gunk that&amp;rsquo;s accumulated&#xA;there.&#xA;Plus, I bought the thing for $150, so I don&amp;rsquo;t fancy taking it to a repair shop&#xA;to replace the DVD drive and fix other issues because they might charge&#xA;nearly as much as its worth.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trek-Nature</title>
      <link>https://frank-mitchell.com/posts/trek-nature/</link>
      <pubDate>Mon, 21 Nov 2022 13:20:30 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/trek-nature/</guid>
      <description>&lt;p&gt;Over the weekend I commented on a YouTube clip&#xA;&amp;ndash; surely one of the most pointless activities&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; on the Internet &amp;ndash;&#xA;and used the term &amp;ldquo;Trek-nature&amp;rdquo; with reference to modern Star Trek series:&#xA;&lt;em&gt;Discovery&lt;/em&gt;, &lt;em&gt;Lower Decks&lt;/em&gt;, &lt;em&gt;Picard&lt;/em&gt;, &lt;em&gt;Prodigy&lt;/em&gt;, and &lt;em&gt;Strange New Worlds&lt;/em&gt;.&#xA;I coined the term as an analogue to&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Buddha-nature&#34;&gt;&amp;ldquo;Buddha-nature&amp;rdquo;&lt;/a&gt;,&#xA;which I remembered from high school researches into Buddhism&#xA;as a nebulous, mystical term for the &amp;ldquo;Buddha within&amp;rdquo; &amp;hellip; or some such.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s a Non-Review?</title>
      <link>https://frank-mitchell.com/posts/whats-a-non-review/</link>
      <pubDate>Fri, 18 Nov 2022 23:15:14 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/whats-a-non-review/</guid>
      <description>&lt;p&gt;So what exactly is a &lt;a href=&#34;https://frank-mitchell.com/tags/non-review/&#34;&gt;non-review&lt;/a&gt;?&lt;/p&gt;&#xA;&lt;p&gt;Short answer: it&amp;rsquo;s commentary on a product that in no way should be taken&#xA;as thorough, complete, or authoritative. Examples:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;My non-review of the &lt;a href=&#34;../alien-rpg-nonreview/&#34;&gt;Alien RPG&lt;/a&gt; presumed&#xA;I&amp;rsquo;d be raiding the game for ideas, not playing or running it.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;My non-review of &lt;a href=&#34;../coriolis-rpg-nonreview/&#34;&gt;Coriolis&lt;/a&gt;,&#xA;a game I quite like and actually wanted to play,&#xA;nevertheless picked out cool mechanics and aspects of the setting&#xA;but &lt;em&gt;didn&amp;rsquo;t&lt;/em&gt; address if all of that was actually a fun game.&#xA;Having not played it, I really can&amp;rsquo;t say.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Twilight 2000 Dice</title>
      <link>https://frank-mitchell.com/posts/twilight-2000-dice/</link>
      <pubDate>Sat, 12 Nov 2022 10:18:25 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/twilight-2000-dice/</guid>
      <description>&lt;p&gt;::: note&#xA;2024-04-03: Changed the program and output in response to a question on&#xA;Discord.  The probabilities and commentary are unaltered.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Last year Free League Publishing released&#xA;&lt;a href=&#34;https://freeleaguepublishing.com/en/games/twilight-2000/&#34;&gt;&lt;em&gt;Twilight 2000&lt;/em&gt;&lt;/a&gt;.&#xA;They&amp;rsquo;re the makers of&#xA;&lt;a href=&#34;https://frank-mitchell.com/tags/coriolis/&#34;&gt;&lt;em&gt;Coriolis&lt;/em&gt;&lt;/a&gt;, &lt;em&gt;Vaesen&lt;/em&gt;, &lt;em&gt;Mutant Year Zero&lt;/em&gt;,&#xA;and other &lt;a href=&#34;https://frank-mitchell.com/tags/year-zero-system/&#34;&gt;Year Zero Engine&lt;/a&gt; games,&#xA;about which I&amp;rsquo;ve probably written a little too much.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;T2K&lt;/em&gt; is based on a 1984 post-WWIII survival RPG from GDW&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, with&#xA;roughly the same setting but&#xA;different mechanics superficially similar to their YZE games:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update (2022-11-11)</title>
      <link>https://frank-mitchell.com/posts/update-2022-11-11/</link>
      <pubDate>Fri, 11 Nov 2022 20:04:38 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/update-2022-11-11/</guid>
      <description>&lt;p&gt;To date I&amp;rsquo;ve made the following changes to the blog:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve upgraded &lt;strong&gt;hugo&lt;/strong&gt; from 0.90 to 0.105, and fixed any breakages.&#xA;The main changes I noticed in these pages were a different code highlighter&#xA;and more aggressive use of fancy closing single quotes.&#xA;A couple of pages needed fixing.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve added a &lt;a href=&#34;https://frank-mitchell.com/writing/&#34;&gt;&amp;ldquo;Writing&amp;rdquo;&lt;/a&gt; section,&#xA;which for now contains most of the fiction I&amp;rsquo;d posted to&#xA;previous iterations of the site.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve tweaked the CSS and templates a little,&#xA;mainly because the aforementioned fiction and some other articles&#xA;use &lt;code&gt;&amp;lt;HR&amp;gt;&lt;/code&gt; elements internally as scene and chapter breaks&#xA;while the site chrome uses them to set itself off from article content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Still Alive</title>
      <link>https://frank-mitchell.com/posts/update-2022-09-20/</link>
      <pubDate>Tue, 20 Sep 2022 14:55:47 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/update-2022-09-20/</guid>
      <description>&lt;p&gt;Apparently I haven&amp;rsquo;t put anything onto this blog for over a year.&#xA;There&amp;rsquo;ve been a few articles in the queue,&#xA;most of which I kept tweaking and rethinking.&#xA;Since I have more urgent things to do,&#xA;probably for the rest of the year,&#xA;I&amp;rsquo;m going to put them out there now and move on.&lt;/p&gt;&#xA;&lt;p&gt;Beyond that I&amp;rsquo;ve fixed typos and brainos in a few other random articles.&#xA;(Yes, I reread my own stuff.)&#xA;I can&amp;rsquo;t remember which ones I fixed,&#xA;but if you read this blog and noticed a change &amp;hellip; congratulations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dice Pools Explored</title>
      <link>https://frank-mitchell.com/posts/dice-pools-explored/</link>
      <pubDate>Tue, 20 Sep 2022 12:55:39 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dice-pools-explored/</guid>
      <description>&lt;p&gt;OK, I thought I was &lt;a href=&#34;../dice-pools-revisited/&#34;&gt;done with this&lt;/a&gt;, but I&amp;rsquo;m not.&lt;/p&gt;&#xA;&lt;h2 id=&#34;difficulty&#34;&gt;Difficulty&lt;/h2&gt;&#xA;&lt;p&gt;The system as written gives the GM two ways to alter probabilities:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;Bonuses and Penalties&lt;/em&gt; alter the size of a Dice Pool.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;Target Numbers&lt;/em&gt; alter the probability of a&#xA;&lt;a href=&#34;#marginal-successes&#34;&gt;Marginal Success&lt;/a&gt; on a Dice Pool of a given size.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This may prove confusing, so I&amp;rsquo;d suggest this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Add or remove dice from the Dice Pool based on external factors&#xA;like equipment used (or not used),&#xA;lighting,&#xA;range to a target (if in ranged combat),&#xA;etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I Have Opinions About Comics, Part 1</title>
      <link>https://frank-mitchell.com/posts/opinions-about-comics-1/</link>
      <pubDate>Sun, 18 Sep 2022 10:55:22 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/opinions-about-comics-1/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;All but the last section was written in 2020, with minimal editing.&#xA;You have been warned.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Amidst all the other and far more important things in the world right now,&#xA;I nevertheless feel compelled to express opinions about comic books.&#xA;These opinions are neither original nor particularly startling,&#xA;but I&amp;rsquo;m writing them anyway.&lt;/p&gt;&#xA;&lt;h3 id=&#34;superheroes-are-relics-of-the-1930s&#34;&gt;Superheroes are Relics of the 1930s&lt;/h3&gt;&#xA;&lt;p&gt;Superman, the best-known superhero in mass media, debuted in&#xA;&lt;em&gt;Action Comics&lt;/em&gt; #1 in 1938.&#xA;At that time the Great Depression had been going on for nearly a decade,&#xA;with no end in sight.&#xA;Prohibition had inadvertently fueled the rise of organized crime,&#xA;but by the time of Prohibition&amp;rsquo;s repeal the gansters had diversified&#xA;into other rackets.&#xA;Most people of the time were struggling earn a living,&#xA;at the mercy of landlords and political machines,&#xA;and frightened by stories &amp;ndash; and incidents &amp;ndash; of violent crime.&#xA;&lt;em&gt;Superman&lt;/em&gt; became popular because he was a wish-fulfillment fantasy;&#xA;his initial foes were slum lords, callous business men,&#xA;corrupt politicians, and gangsters.&#xA;He was far stronger than any mortal man, and incorruptible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dice Pools Revisited</title>
      <link>https://frank-mitchell.com/posts/dice-pools-revisited/</link>
      <pubDate>Sat, 17 Sep 2022 20:55:39 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dice-pools-revisited/</guid>
      <description>&lt;p&gt;A few years (yes years) ago I wrote about&#xA;&lt;a href=&#34;../dice-pools/&#34;&gt;dice pool mechanics in RPGs&lt;/a&gt;,&#xA;and sketched out what I called the &amp;ldquo;Third System&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Recently, after watching lots of &lt;em&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Isekai&#34;&gt;isekai&lt;/a&gt;&lt;/em&gt; and &lt;em&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Sh%C5%8Dnen_manga&#34;&gt;shonen&lt;/a&gt;&lt;/em&gt; anime&#xA;about overpowered heroes brushing off lesser foes,&#xA;I started thinking about this system again.&#xA;At this point the system is even sketchier than&#xA;&lt;a href=&#34;../shadow-vale-system/&#34;&gt;&amp;ldquo;Shadow Vale&amp;rdquo;&lt;/a&gt;;&#xA;I have a bunch of ideas how to define Player Characters,&#xA;but none I really like.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shadow Vale: Alternate Rules</title>
      <link>https://frank-mitchell.com/posts/shadow-vale-system-2/</link>
      <pubDate>Tue, 05 Jul 2022 09:36:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/shadow-vale-system-2/</guid>
      <description>&lt;p&gt;In an &lt;a href=&#34;../writing-rpgs-4/&#34;&gt;earlier article&lt;/a&gt; I talked about stealing&#xA;mechanics from published games, and &lt;a href=&#34;../shadow-vale-system/&#34;&gt;recently&lt;/a&gt;&#xA;I put that into practice.  Yet the final result was a bit unsatisfying:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I intended to borrow the Career mechanic from &lt;em&gt;Barbarians of Lemuria&lt;/em&gt;&#xA;and &lt;em&gt;Everywhen&lt;/em&gt;, but it didn&amp;rsquo;t mix with the &lt;a href=&#34;https://frank-mitchell.com/rpg/cepheus-quantum/&#34;&gt;Cepheus Quantum&lt;/a&gt; approach to&#xA;skills.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Having different systems for ranged and melee attacks is likely to cause&#xA;some consternation.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;While I had intended to make Magic as simple as possible, I&amp;rsquo;m afraid&#xA;the result is a little hand-wavey.&#xA;A long time ago I tried to run a &lt;a href=&#34;../orclands-revisited/&#34;&gt;campaign&lt;/a&gt;&#xA;with an incomplete and badly explained magic system, and it didn&amp;rsquo;t go well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shadow Vale: The System</title>
      <link>https://frank-mitchell.com/posts/shadow-vale-system/</link>
      <pubDate>Fri, 17 Jun 2022 13:39:15 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/shadow-vale-system/</guid>
      <description>&lt;p&gt;As mentioned &lt;a href=&#34;../writing-rpgs-4/&#34;&gt;previously&lt;/a&gt;,&#xA;a setting I&amp;rsquo;ve been musing on seems to cry out for a custom system.&#xA;While I&amp;rsquo;m using &lt;a href=&#34;https://frank-mitchell.com/rpg/cepheus-quantum/&#34;&gt;Cepheus Quantum&lt;/a&gt; as a primary inspiration,&#xA;I&amp;rsquo;m also adopting bits of of AFF2 and other systems as needed.&lt;/p&gt;&#xA;&lt;p&gt;Many rules are To Be Determined at this point,&#xA;but here&amp;rsquo;s what I&amp;rsquo;ve come up with so far.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This system uses only six-sided dice, abbreviated &lt;strong&gt;D&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-setting-in-brief&#34;&gt;The Setting, In Brief&lt;/h2&gt;&#xA;&lt;p&gt;The &amp;ldquo;Shadow Vale&amp;rdquo; is a barren, brutal wasteland situated between&#xA;the seemingly idyllic Supernal Realm&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;and the prison pit known as the Infernal Realm&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&#xA;Collectively Shadow Vale and the Realms are (for now) called &amp;ldquo;Otherworld&amp;rdquo;.&#xA;The world more closely fits the &amp;ldquo;sword and sorcery&amp;rdquo; genre than high fantasy.&#xA;Think &lt;em&gt;Mad Max&lt;/em&gt; meets Norse Nidhvellir meets D&amp;amp;D&amp;rsquo;s Dark Sun.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing RPGs is Hard, Part 4: I&#39;m Borrowing Not Stealing</title>
      <link>https://frank-mitchell.com/posts/writing-rpgs-4/</link>
      <pubDate>Wed, 08 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/writing-rpgs-4/</guid>
      <description>&lt;p&gt;One of my purposes for examining&#xA;&lt;a href=&#34;../cepheus-atom/&#34;&gt;Cepheus Atom&lt;/a&gt;,&#xA;&lt;a href=&#34;../advanced-fighting-fantasy-2e/&#34;&gt;Advanced Fighting Fantasy&lt;/a&gt;,&#xA;and &lt;a href=&#34;../the-fantasy-trip/&#34;&gt;The Fantasy Trip&lt;/a&gt;&#xA;was to examine some design principles for games I might write.&#xA;Below are three I kind of prefer, found mainly in &lt;em&gt;Cepheus Atom&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;definition-by-differences&#34;&gt;Definition By Differences&lt;/h2&gt;&#xA;&lt;p&gt;Maybe I talked about this obliquely before,&#xA;e.g. &amp;ldquo;a blank sheet of paper is a valid character sheet&amp;rdquo;.&#xA;The basic principle, though, is that the rules should define a PC or NPC&#xA;by how they differ from an &amp;ldquo;average&amp;rdquo; character, not in absolute terms.&#xA;This keeps the size and complexity of player character sheets down&#xA;and allows GMs to more easily create NPCs on the fly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update (2021-07-07)</title>
      <link>https://frank-mitchell.com/posts/update-2021-07-07/</link>
      <pubDate>Wed, 07 Jul 2021 13:05:22 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/update-2021-07-07/</guid>
      <description>&lt;p&gt;Welp.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;../update-2021-07-02/&#34;&gt;a previous update&lt;/a&gt; I said I was:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Adding some CSS specific to tabletop RPG statistics,&#xA;as seen in a few new &lt;a href=&#34;../year-zero-chargen/&#34;&gt;character&lt;/a&gt;&#xA;&lt;a href=&#34;../cepheus-atom/&#34;&gt;generation&lt;/a&gt;&#xA;&lt;a href=&#34;../advanced-fighting-fantasy-2e/&#34;&gt;articles&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ignorant fool that I was, I didn&amp;rsquo;t know that &lt;strong&gt;ALL&lt;/strong&gt; browsers cache CSS.&#xA;Thus I (and whoever might read this site) would need to clear &lt;em&gt;each&lt;/em&gt; browser&#xA;every time I updated the CSS.&#xA;While I&amp;rsquo;m willing to do this whenever I make profound changes to the site,&#xA;doing so for fiddly CSS that affects only a few articles is a bit much.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Not So Good Republic</title>
      <link>https://frank-mitchell.com/posts/bad-republic/</link>
      <pubDate>Mon, 05 Jul 2021 21:12:41 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/bad-republic/</guid>
      <description>&lt;p&gt;In a &lt;a href=&#34;../star-setting/&#34;&gt;previous article&lt;/a&gt; I presented a space opera setting&#xA;that attempts to subvert standard tropes.&#xA;Here I address the &amp;ldquo;Republic&amp;rdquo;, which is generally depicted as noble,&#xA;or well-intentioned but flawed, or at worst riddled with corruption&#xA;and about to fall to the Evil Empire.&lt;/p&gt;&#xA;&lt;p&gt;Fictional republics often evoke the Roman Republic,&#xA;which wasn&amp;rsquo;t exactly a paragon of democracy.&#xA;The ancient Romans were &lt;em&gt;always&lt;/em&gt; a militaristic people.&#xA;Even at its height the Roman Republic existed to keep patricians above&#xA;plebes, and Romans above their neighboring city-states and tribes.&#xA;(And even the Roman Republic was also an empire, albeit much smaller.)&#xA;But after the fall of the Western Empire, and particularly after&#xA;the religious wars and plagues of Late Medieval and Early Modern Europe,&#xA;Roman rule seemed like a vanished golden age.&#xA;Italian republics of the Renaissance appropriated the architecture of&#xA;ancient Rome while reinterpreting ancient Roman and Greek literature.&#xA;This veneration of the Roman Republic continued through America&amp;rsquo;s&#xA;Founding Fathers, and into modern American popular culture.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update (2021-07-02)</title>
      <link>https://frank-mitchell.com/posts/update-2021-07-02/</link>
      <pubDate>Fri, 02 Jul 2021 11:46:55 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/update-2021-07-02/</guid>
      <description>&lt;p&gt;In addition to adding a bunch of articles that queued up,&#xA;I&amp;rsquo;ve also modified the templates and CSS for this site.&#xA;If the site looks wonky in some browsers (&lt;em&gt;*cough*&lt;/em&gt; Firefox &lt;em&gt;*cough*&lt;/em&gt;),&#xA;clear the browser cache and reload.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Most of the changes are invisible, but I made a major structural change&#xA;by using a single &lt;a href=&#34;https://gohugo.io/templates/base/&#34;&gt;base template&lt;/a&gt;&#xA;for common elements instead of multiple&#xA;&lt;a href=&#34;https://gohugo.io/templates/partials/&#34;&gt;partial&lt;/a&gt;&#xA;&amp;ldquo;header&amp;rdquo; and &amp;ldquo;footer&amp;rdquo; templates.&#xA;This lets me see all the &amp;ldquo;chrome&amp;rdquo; for the site in one file,&#xA;which will make further modifications easier.&#xA;This means I&amp;rsquo;ve stopped using the XMin theme completely,&#xA;and copied the few remaining theme resources I hadn&amp;rsquo;t overriden&#xA;&amp;ndash; the static CSS and a few minor templates &amp;ndash;&#xA;into my site-specific files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Note on Dates</title>
      <link>https://frank-mitchell.com/posts/dates/</link>
      <pubDate>Fri, 02 Jul 2021 10:57:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dates/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://gohugo.io&#34;&gt;Hugo&lt;/a&gt;,&#xA;the tool I&amp;rsquo;m currently using for this blog, defines a few fields&#xA;for a post&amp;rsquo;s date:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;date&lt;/code&gt; is the default, generic date for a post,&#xA;and the one used for other fields if they&amp;rsquo;re not specified.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;lastmod&lt;/code&gt; is the date content was last modified.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;publishDate&lt;/code&gt; is the date at which the content should be published.&#xA;If in the future, the tool won&amp;rsquo;t include the post.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;expiryDate&lt;/code&gt; is the date beyond which &lt;code&gt;hugo&lt;/code&gt; will &lt;em&gt;no longer&lt;/em&gt; render&#xA;a post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Fantasy Trip</title>
      <link>https://frank-mitchell.com/posts/the-fantasy-trip/</link>
      <pubDate>Thu, 01 Jul 2021 12:40:36 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/the-fantasy-trip/</guid>
      <description>&lt;p&gt;::: note&#xA;CHANGED 2026-1-20: fixed messed-up markdown&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;After the &lt;a href=&#34;../cepheus-atom/&#34;&gt;previous&lt;/a&gt; &lt;a href=&#34;../advanced-fighting-fantasy-2e/&#34;&gt;two&lt;/a&gt;&#xA;articles about early RPG rules revived and retooled in the last decade,&#xA;we&amp;rsquo;ll look at one that I actually played back in the day&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://thefantasytrip.game/about/&#34;&gt;The Fantasy Trip&lt;/a&gt; began in 1977 as two skirmish-level tabletop games,&#xA;&lt;em&gt;Melee&lt;/em&gt; and &lt;em&gt;Wizard&lt;/em&gt;, both written by &lt;a href=&#34;https://en.wikipedia.org/wiki/Steve_Jackson_(American_game_designer)&#34;&gt;Steve Jackson&lt;/a&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&#xA;Jackson&amp;rsquo;s &lt;em&gt;In The Labyrinth&lt;/em&gt; (1980) expanded it into a full role-playing game.&#xA;After a split with the original publisher who then ceased operation,&#xA;the system got lost in copyright limbo.&#xA;Its sudden disappearance spawned a few &amp;ldquo;retroclones&amp;rdquo;, including&#xA;a series of solo and GM adventures from&#xA;&lt;a href=&#34;http://darkcitygames.com&#34;&gt;Dark City Games&lt;/a&gt;&#xA;that I blogged about &lt;a href=&#34;https://frank-mitchell.com/rpg/comp-char-gen/part-5/#_legends-of-_&#34;&gt;a long time ago&lt;/a&gt;.&#xA;In 2019 Steve Jackson Games recovered the rights&#xA;and republished a deluxe &amp;ldquo;legacy edition&amp;rdquo; of the rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Less Evil Empire</title>
      <link>https://frank-mitchell.com/posts/less-evil-empire/</link>
      <pubDate>Tue, 29 Jun 2021 12:34:29 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/less-evil-empire/</guid>
      <description>&lt;p&gt;As stated &lt;a href=&#34;../star-setting/&#34;&gt;previously&lt;/a&gt;,&#xA;one afternoon I though about subverting common political tropes&#xA;in fantasy and science fiction,&#xA;particulary the Evil Empire.&lt;/p&gt;&#xA;&lt;p&gt;But could a truly &amp;ldquo;good&amp;rdquo; Empire exist?&#xA;Probably not.&#xA;By definition an Empire funnels wealth from its provinces and/or colonies&#xA;to a central region or authority;&#xA;typically the residents of those outlying areas produce that wealth,&#xA;so the Empire must take it by force or threats of force.&#xA;But history offers a few examples that have their good points:&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Space Opera Setting</title>
      <link>https://frank-mitchell.com/posts/star-setting/</link>
      <pubDate>Tue, 22 Jun 2021 00:58:38 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/star-setting/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;While watching/reading some space opera,&#xA;I began musing on how certain forms of government have certain connotations:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;The Empire&amp;rdquo; is almost always bad,&#xA;although those with high positions in it inevitably extol its&#xA;real or imagined virtues.&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;The Republic&amp;rdquo; is &lt;em&gt;usually&lt;/em&gt; good, if flawed,&#xA;but doomed to collapse and/or transform into &amp;ldquo;The Empire&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;An Alliance or League is good if it&amp;rsquo;s opposed to an Empire,&#xA;but can go bad if it forms on its own (as in &lt;em&gt;Firefly&lt;/em&gt;)&#xA;or stagnates after the end of the Empire&#xA;(as in comics, novels, and movies set after &lt;em&gt;Return of the Jedi&lt;/em&gt;).&lt;/li&gt;&#xA;&lt;li&gt;A Federation is usually good, but &amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;A &lt;em&gt;Con&lt;/em&gt;federation or Confederacy is generally bad.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Most of these connotations come from history, notably Rome, Greece,&#xA;and the United States.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advanced Fighting Fantasy 2e</title>
      <link>https://frank-mitchell.com/posts/advanced-fighting-fantasy-2e/</link>
      <pubDate>Tue, 15 Jun 2021 06:22:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/advanced-fighting-fantasy-2e/</guid>
      <description>&lt;p&gt;After our &lt;a href=&#34;../cepheus-atom/&#34;&gt;exploration of &lt;em&gt;Cepheus Atom&lt;/em&gt;&lt;/a&gt;,&#xA;let&amp;rsquo;s look at another system that uses two six-sided dice.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.drivethrurpg.com/product/186396/&#34;&gt;&lt;em&gt;Advanced Fighting Fantasy&lt;/em&gt; 2nd ed.&lt;/a&gt;&#xA;by &lt;a href=&#34;https://en.wikipedia.org/wiki/Steve_Jackson_(British_game_designer)&#34;&gt;Steve Jackson&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Ian_Livingstone&#34;&gt;Ian Livingstone&lt;/a&gt;, and Graham Bottley&#xA;expands rules from the &lt;a href=&#34;https://en.wikipedia.org/wiki/Fighting_Fantasy&#34;&gt;Fighting Fantasy&lt;/a&gt; game books&#xA;by Jackson and Livingstone&#xA;into a complete and official RPG.&#xA;(Unofficial expansions exist, such as &lt;em&gt;Troika!&lt;/em&gt; which I&amp;rsquo;ve discussed&#xA;&lt;a href=&#34;https://frank-mitchell.com/tags/troika/&#34;&gt;before&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Like the game books before it, AFF2 requires only two six-sided dice per player,&#xA;although more dice, particularly of a distinct color, would be helpful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Orclands Revisited</title>
      <link>https://frank-mitchell.com/posts/orclands-revisited/</link>
      <pubDate>Mon, 14 Jun 2021 08:55:00 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/orclands-revisited/</guid>
      <description>&lt;p&gt;Recently I posted the campaign logs from a &lt;em&gt;very short&lt;/em&gt; campaign I ran&#xA;back in 2009, titled &lt;a href=&#34;https://frank-mitchell.com/tags/orclands/&#34;&gt;&amp;ldquo;The Orc Lands&amp;rdquo;&lt;/a&gt;.&#xA;I&amp;rsquo;d decided to use the extremely flexible&#xA;&lt;a href=&#34;https://www.chaosium.com/basic-roleplaying/&#34;&gt;&lt;em&gt;Basic Roleplaying&lt;/em&gt;&lt;/a&gt;&#xA;system and a low magic setting of my own design.&lt;/p&gt;&#xA;&lt;p&gt;The second session log, ironically, ended thus:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The big challenge will be next session, where the campaign starts its&#xA;second act.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ironic in that:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;One or other of the &lt;em&gt;two&lt;/em&gt; players kept cancelling, and we finally&#xA;called the whole thing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cepheus Atom</title>
      <link>https://frank-mitchell.com/posts/cepheus-atom/</link>
      <pubDate>Sun, 13 Jun 2021 10:37:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/cepheus-atom/</guid>
      <description>&lt;p&gt;While some of the &lt;a href=&#34;../year-zero-chargen/&#34;&gt;Year Zero Engine&lt;/a&gt; games&#xA;I considered last time make character generation and task resolution simple,&#xA;they &lt;em&gt;could&lt;/em&gt; be simpler.&lt;/p&gt;&#xA;&lt;p&gt;Enter &lt;a href=&#34;https://www.drivethrurpg.com/product/324514/Cepheus-Atom&#34;&gt;&lt;em&gt;Cepheus Atom&lt;/em&gt;&lt;/a&gt;,&#xA;a post-apocalyptic RPG using a radically simplified version of&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/product/186894/&#34;&gt;&lt;em&gt;Cepheus&lt;/em&gt;&lt;/a&gt;,&#xA;which itself is a debugged and somewhat streamlined derivative of&#xA;Mongoose&amp;rsquo;s &lt;a href=&#34;http://www.traveller-srd.com/&#34;&gt;&lt;em&gt;Traveller&lt;/em&gt; SRD&lt;/a&gt;.&#xA;The author of &lt;em&gt;Cepheus Atom&lt;/em&gt;, Omer Golan-Joel,&#xA;describes his work as a &amp;ldquo;beer and pretzels&amp;rdquo; game&#xA;in a &amp;ldquo;gonzo apocalypse&amp;rdquo; of mutants and futuristic weapons.&#xA;&lt;em&gt;Mutant Year Zero&lt;/em&gt;, which we touched on&#xA;&lt;a href=&#34;../year-zero-chargen/#mutant-year-zero-the-stalker&#34;&gt;last time&lt;/a&gt;,&#xA;is a somewhat more grim and gritty exploration of the genre.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Character Generation in Year Zero Engine RPGs</title>
      <link>https://frank-mitchell.com/posts/year-zero-chargen/</link>
      <pubDate>Mon, 07 Jun 2021 00:33:57 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/year-zero-chargen/</guid>
      <description>&lt;p&gt;Having created characters for Free League&amp;rsquo;s&#xA;&lt;a href=&#34;../coriolis-chargen/&#34;&gt;&lt;em&gt;Coriolis&lt;/em&gt;&lt;/a&gt;&#xA;and &lt;a href=&#34;../vaesen-chargen/&#34;&gt;&lt;em&gt;Vaesen&lt;/em&gt;&lt;/a&gt;,&#xA;I thought I&amp;rsquo;d try creating characters for Free League&amp;rsquo;s other&#xA;published Year Zero Engine games&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://freeleaguepublishing.com/en/games/alien/&#34;&gt;&lt;em&gt;ALIEN&lt;/em&gt;&lt;/a&gt;,&#xA;based on the science fiction horror movies.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://freeleaguepublishing.com/en/games/forbidden-lands/&#34;&gt;&lt;em&gt;Forbidden Lands&lt;/em&gt;&lt;/a&gt;,&#xA;a fantasy sandbox set in a cursed land only recently opened to explorers&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://freeleaguepublishing.com/en/games/mutant-year-zero/&#34;&gt;&lt;em&gt;Mutant Year Zero&lt;/em&gt;&lt;/a&gt;,&#xA;a post-apocalyptic game of mutants scavenging the wastelands&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;,&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://freeleaguepublishing.com/en/games/tales-from-the-loop/&#34;&gt;&lt;em&gt;Tales From The Loop&lt;/em&gt;&lt;/a&gt;&#xA;a &amp;ldquo;rules light&amp;rdquo; game of kids finding dark secrets in their seemingly&#xA;normal company town.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Rather than walk through the steps as I did for &lt;em&gt;Coriolis&lt;/em&gt; and &lt;em&gt;Vaesen&lt;/em&gt;,&#xA;I&amp;rsquo;ll simply note how character generation differs from&#xA;&lt;em&gt;Coriolis&lt;/em&gt;, &lt;em&gt;Vaesen&lt;/em&gt;, or&#xA;&lt;a href=&#34;https://frank-mitchell.com/rpg/year-zero-engine-ogl/#player-characters&#34;&gt;the YZE SRD&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More Coriolis Ships</title>
      <link>https://frank-mitchell.com/posts/more-coriolis-ships/</link>
      <pubDate>Fri, 04 Jun 2021 10:49:57 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/more-coriolis-ships/</guid>
      <description>&lt;p&gt;After the original &lt;a href=&#34;../coriolis-shipgen/&#34;&gt;ship generation&lt;/a&gt; article&#xA;I started brainstorming other ships, some of which may or may not&#xA;fit into the Third Horizon setting:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The rules mentioned &lt;a href=&#34;#bulk-hauler&#34;&gt;bulk haulers&lt;/a&gt;&#xA;and &lt;a href=&#34;#torpedo-ship&#34;&gt;torpedo ships&lt;/a&gt;,&#xA;so I thought I&amp;rsquo;d design one of each.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The rules &lt;em&gt;didn&amp;rsquo;t&lt;/em&gt; mention a &lt;a href=&#34;#cargo-tug&#34;&gt;Cargo Tug&lt;/a&gt;,&#xA;but it seemed to be a logical extrapolation.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Systems with multiple inhabited planets (e.g. Kua)&#xA;&lt;em&gt;might&lt;/em&gt; have enough traffic between them to justify building ships&#xA;dedicated &lt;em&gt;solely&lt;/em&gt; to hauling cargo between them.&#xA;Thus I designed the ultra-spartan&#xA;&lt;a href=&#34;#light-system-freighter&#34;&gt;Light System Freighter&lt;/a&gt;,&#xA;&lt;a href=&#34;#heavy-system-freighter&#34;&gt;Heavy System Freighter&lt;/a&gt;,&#xA;and &lt;a href=&#34;#system-shuttle&#34;&gt;System Shuttle&lt;/a&gt;.&#xA;Player Characters probably wouldn&amp;rsquo;t want to &lt;em&gt;own&lt;/em&gt; them,&#xA;but they may see these at space stations and planetside space ports.&#xA;More rakish PCs may want to steal one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vaesen Character Generation</title>
      <link>https://frank-mitchell.com/posts/vaesen-chargen/</link>
      <pubDate>Thu, 03 Jun 2021 23:19:57 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/vaesen-chargen/</guid>
      <description>&lt;p&gt;Much like I did with &lt;a href=&#34;../coriolis-chargen&#34;&gt;&lt;em&gt;Coriolis&lt;/em&gt;&lt;/a&gt;,&#xA;I&amp;rsquo;d like to walk through creating a &lt;em&gt;single&lt;/em&gt; character in&#xA;&lt;a href=&#34;https://freeleaguepublishing.com/en/games/vaesen/&#34;&gt;&lt;em&gt;Vaesen&lt;/em&gt;&lt;/a&gt;.&#xA;As the subtitle &amp;ldquo;Nordic Horror Roleplaying&amp;rdquo; suggests,&#xA;the setting of &lt;em&gt;Vaesen&lt;/em&gt; is an anachronistic 19th century Scandinavia,&#xA;wherin human technological and social change encroaches upon&#xA;supernatural creatures of Nordic myth and legends &amp;ndash; the &lt;em&gt;vaesen&lt;/em&gt;,&#xA;who are &lt;strong&gt;very&lt;/strong&gt; displeased.&#xA;Previously I commented on the &lt;a href=&#34;../vaesen-preview/&#34;&gt;preview&lt;/a&gt;&#xA;and the &lt;a href=&#34;../vaesen-alpha-comments/&#34;&gt;Alpha rules&lt;/a&gt;.&#xA;At some point I&amp;rsquo;ll do an overview and/or &amp;ldquo;non-review&amp;rdquo; of the final rules,&#xA;but as far as I can tell nothing dramatic has changed since the Alpha.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Old RPG-related Essays Incoming</title>
      <link>https://frank-mitchell.com/posts/old-rpg-essays/</link>
      <pubDate>Mon, 17 May 2021 17:05:30 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/old-rpg-essays/</guid>
      <description>&lt;p&gt;About a decade ago I used to post on a message board called&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;Pen and Paper Games&lt;/a&gt;.&#xA;Many of the regular posters were people I knew from one or another&#xA;of the Dallas gaming meetups.&lt;/p&gt;&#xA;&lt;p&gt;Inevitably, people dropped out or dropped away.&#xA;Some moved away, or got busy, or left gaming.&#xA;Others left the board when some obnoxious trolls made posting less fun.&#xA;(Yes, they had moderators. I was one.&#xA;But some trolls, one in particular, was very good at pushing other posters&#39;&#xA;buttons without actually violating the stated rules of conduct.)&#xA;Eventually the board mainly became a place for &amp;ldquo;play by post&amp;rdquo; games,&#xA;and all the other discussions died.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alignment Redux</title>
      <link>https://frank-mitchell.com/posts/alignment-redux/</link>
      <pubDate>Mon, 17 May 2021 16:20:12 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/alignment-redux/</guid>
      <description>&lt;p&gt;While looking through some old files, I found the following essay.&#xA;It&amp;rsquo;s &lt;strong&gt;at least&lt;/strong&gt; two years old, probably several more.&#xA;Unfortunately, I changed version control systems several times,&#xA;so I have no idea &lt;em&gt;when&lt;/em&gt; I wrote it.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Alignment and Allegiance&amp;rdquo; refers to the Allegiance system on pp 315-318 of&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/en/product/24384/basic-roleplaying&#34;&gt;&lt;em&gt;Basic Roleplaying&lt;/em&gt;&lt;/a&gt;&#xA;As stated later in the essay, a percentile &amp;ldquo;allegiance&amp;rdquo; score measures&#xA;a player character&amp;rsquo;s relationship with a divine being, cosmic principle,&#xA;or moral philosophy.&#xA;Acting in accordiance with that being or belief system&amp;rsquo;s principles&#xA;raises the score.&#xA;The rules as written suggest raising a diametrically opposed score&#xA;for actions violating those principles,&#xA;but back in the day some BRP sourcebooks simply lowered the Allegiance.&#xA;For example, in &lt;em&gt;Dragon Lines&lt;/em&gt;, loosely based on East Asian magic and religion,&#xA;some violent and destructive actions violated Daoism, Confucianism,&#xA;&lt;em&gt;and&lt;/em&gt; most of the other philosophies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update (2021-05-17)</title>
      <link>https://frank-mitchell.com/posts/update-2021-05-17/</link>
      <pubDate>Mon, 17 May 2021 08:08:37 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/update-2021-05-17/</guid>
      <description>&lt;p&gt;Apparently I haven&amp;rsquo;t updated this blog since last October.&#xA;The sad fact is that nothing has really happened since then.&#xA;(Not that I talk about personal stuff here.)&#xA;Mostly I&amp;rsquo;ve been in self-imposed quarantine.&lt;/p&gt;&#xA;&lt;p&gt;When I stopped, I had about a dozen posts in &amp;ldquo;draft&amp;rdquo; status,&#xA;some for more than a year.&#xA;I&amp;rsquo;m (slowly) picking through those and deciding which to drop entirely&#xA;and which to cut down, clean up, and finally finish.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Languages in RPGs: Why?</title>
      <link>https://frank-mitchell.com/posts/languages-in-rpgs-why/</link>
      <pubDate>Sun, 11 Oct 2020 15:32:21 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/languages-in-rpgs-why/</guid>
      <description>&lt;p&gt;In the RPG section I posted three articles about representing languages&#xA;in tabletop role-playing games:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;rules for &lt;a href=&#34;https://frank-mitchell.com/rpg/language-groups&#34;&gt;language groups&lt;/a&gt;&#xA;to make related languages cheaper and easier to acquire.&lt;/li&gt;&#xA;&lt;li&gt;rules for an &lt;a href=&#34;https://frank-mitchell.com/rpg/language-check&#34;&gt;&amp;ldquo;Understand Languages&amp;rdquo; test&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;related rules for &lt;a href=&#34;https://frank-mitchell.com/rpg/language-scripts/&#34;&gt;written languages&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These were based on notes for a few campaigns&#xA;that never really got off the ground.&lt;/p&gt;&#xA;&lt;p&gt;Having rewritten and re-examined these notes,&#xA;I now ask myself &amp;hellip; why bother with languages at all?&lt;/p&gt;&#xA;&lt;h2 id=&#34;reasons-not-to-bother-about-languages&#34;&gt;Reasons &lt;em&gt;Not&lt;/em&gt; To Bother About Languages&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;Around the table, we all speak the same language.&lt;/em&gt;&#xA;Communication is the essence of tabletop role-playing games.&#xA;Should the rules prevent players from talking to an NPC&#xA;because the PCs don&amp;rsquo;t speak Gubbish and the NPC &lt;em&gt;only&lt;/em&gt; speaks Gubbish?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Languages in RPGs: Written Languages</title>
      <link>https://frank-mitchell.com/rpg/language-scripts/</link>
      <pubDate>Sun, 11 Oct 2020 15:32:01 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/language-scripts/</guid>
      <description>&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; These rules are a work in progress.&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;MODIFIED (2024-11-16): Added &lt;a href=&#34;#polyglot-script&#34;&gt;Polyglot Script&lt;/a&gt; type.&lt;/p&gt;&#xA;&lt;p&gt;MODIFIED (2024-11-22): Fixed broken links.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Tabletop RPGs address languages in the game world in various ways.&#xA;Written languages, henceforth called &lt;dfn&gt;Scripts&lt;/dfn&gt;,&#xA;are sometimes an afterthought,&#xA;and the results can be either too simplistic, too fiddly,&#xA;or just not well thought out.&lt;/p&gt;&#xA;&lt;p&gt;Most RPGs I&amp;rsquo;ve seen take two basic approaches:&#xA;either a literate character can read every language they speak,&#xA;or every written language is as much a skill as every spoken language.&#xA;In this article I&amp;rsquo;ll present a &amp;ldquo;Hybrid Approach&amp;rdquo;,&#xA;and then offer some options for more unusual situations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Languages in RPGs: The &#39;Understand Languages&#39; Test</title>
      <link>https://frank-mitchell.com/rpg/language-check/</link>
      <pubDate>Fri, 09 Oct 2020 19:58:09 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/language-check/</guid>
      <description>&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; These rules are a work in progress.&lt;/p&gt;&#xA;&lt;p&gt;In a few&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Old_School_Revival&#34;&gt;Old School&lt;/a&gt;&#xA;tabletop role-playing games,&#xA;notably&#xA;&lt;a href=&#34;https://d101games.com/books/crypts-and-things/&#34;&gt;Crypts &amp;amp; Things&lt;/a&gt;&#xA;and&#xA;&lt;a href=&#34;https://www.lotfp.com/RPG/&#34;&gt;Lamentations of the Flame Princess&lt;/a&gt;,&#xA;the designers avoid defining what languages characters know&#xA;at character creation and during later play.&#xA;Instead they give every player character&#xA;a probability of understanding a language they encounter&#xA;based (mostly) on the character&amp;rsquo;s Intelligence score.&lt;/p&gt;&#xA;&lt;p&gt;This mechanic has a number of advantages:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;It accelerates character creation and advancement.&lt;/em&gt;&#xA;Under many RPG character generation rules,&#xA;players have a finite number of language slots or character points,&#xA;and little information with which to choose the most useful languages.&#xA;(Or else the system mandates specific languages for specific classes.)&#xA;With this mechanism, players don&amp;rsquo;t need to consider languages at all,&#xA;and retroactively pick them up when PCs need them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Languages in RPGs: Language Groups</title>
      <link>https://frank-mitchell.com/rpg/language-groups/</link>
      <pubDate>Thu, 08 Oct 2020 05:18:38 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/language-groups/</guid>
      <description>&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; These rules are a work in progress.&lt;/p&gt;&#xA;&lt;p&gt;In the real world, humanity speaks hundreds if not thousands of languages,&#xA;and has spoken thousands or tens of thousands in its history.&lt;/p&gt;&#xA;&lt;p&gt;Most table top role-playing games (RPGs)&#xA;make the following simplifying assumptions:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PCs and most NPCs speak a &amp;ldquo;common language&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;Some communities &amp;ndash; nations, &amp;ldquo;races&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, religions, professions &amp;ndash;&#xA;speak less common or uncommon languages.&#xA;There are at most a few dozen of these languages.&lt;/li&gt;&#xA;&lt;li&gt;PCs can understand languages in the communities they belong to,&#xA;and possibly &amp;ldquo;foreign&amp;rdquo; languages&#xA;depending on their class (game or social) and education.&lt;/li&gt;&#xA;&lt;li&gt;Languages are unrelated to each other,&#xA;and must be learned separately&#xA;if they can be learned at all after character creation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To approximate how languages work in our world,&#xA;these rules reverse the last assumption.&#xA;But it requires a little work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Non-Review of the Coriolis RPG</title>
      <link>https://frank-mitchell.com/posts/coriolis-rpg-nonreview/</link>
      <pubDate>Thu, 24 Sep 2020 01:57:29 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/coriolis-rpg-nonreview/</guid>
      <description>&lt;p&gt;This wil probably be my last post on&#xA;&lt;a href=&#34;https://frialigan.se/en/games/coriolis-2/&#34;&gt;&lt;em&gt;Coriolis&lt;/em&gt;&lt;/a&gt;&#xA;at least for a while.&#xA;(I&amp;rsquo;ll turn my attention to &lt;em&gt;Vaesen&lt;/em&gt; soon.)&lt;/p&gt;&#xA;&lt;p&gt;The latter more-than-half of the &lt;em&gt;Coriolis&lt;/em&gt; Core Book details&#xA;the sprawling and atypical science fantasy future of the Third Horizon.&#xA;The authors liked this setting&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; so much&#xA;that they named their company after one of the factions.&#xA;But it&amp;rsquo;s the player-facing rules that shape the game experience.&#xA;So I&amp;rsquo;d like to compare these rules to the later &lt;em&gt;Alien&lt;/em&gt; RPG,&#xA;which I previously &lt;a href=&#34;../alien-rpg-nonreview/&#34;&gt;didn&amp;rsquo;t review&lt;/a&gt;.&#xA;Then I&amp;rsquo;ll expand on the setting.&#xA;In doing so I hope to explain why this setting inspired&#xA;not only unique mechanics but a 400-page book and the name of a game company.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Robots in Coriolis</title>
      <link>https://frank-mitchell.com/rpg/coriolis/robots/</link>
      <pubDate>Thu, 24 Sep 2020 01:41:41 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/coriolis/robots/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://frialigan.se/en/games/coriolis-2/&#34;&gt;&lt;em&gt;Coriolis: The Third Horizon&lt;/em&gt;&lt;/a&gt;&#xA;includes a wide range of science fiction gear, but very few robots.&#xA;(A.k.a. automatons, artificial intelligences, &amp;ldquo;droids&amp;rdquo; in that one franchise.)&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ships can have a Ship System dedicated to replacing &lt;em&gt;one&lt;/em&gt; crew position,&#xA;or a more generalized and potentially eccentric Ship Intelligence&#xA;that can replace any &lt;em&gt;one&lt;/em&gt; crew position.&lt;/li&gt;&#xA;&lt;li&gt;A &amp;ldquo;Spider Doctor&amp;rdquo; is a portable, automated replacement for a medic&#xA;(or &amp;ldquo;medicurge&amp;rdquo; in &lt;em&gt;Coriolis&lt;/em&gt;);&#xA;it can treat Critical Injuries on a battlefield&#xA;during those crucial minutes or hours&#xA;after which they become crippling or fatal.&lt;/li&gt;&#xA;&lt;li&gt;Other technology, especially shipboard and Faction tech,&#xA;has embedded &amp;ldquo;djinn intelligences&amp;rdquo; to make them work better.&lt;/li&gt;&#xA;&lt;li&gt;Prior wars, some before humankind,&#xA;have left biomechanical monsters or &amp;ldquo;constructs&amp;rdquo;&#xA;prowling wastelands and deserted planets.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But that&amp;rsquo;s about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Synthetics in Coriolis</title>
      <link>https://frank-mitchell.com/rpg/coriolis/synthetics/</link>
      <pubDate>Thu, 24 Sep 2020 01:41:41 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/coriolis/synthetics/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;The contents of this article used to be at the end of&#xA;&lt;a href=&#34;../robots/&#34;&gt;&#34;Robots in Coriolis&#34;&lt;/a&gt;.&#xA;I&#39;ve expanded it a bit, including stats for the &#xA;Original Three of the &lt;i&gt;Hyades&lt;/i&gt;, and nerfed them all somewhat.  &#xA;They&#39;re supposed to be scary, but not unstoppable.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://frialigan.se/en/games/coriolis-2/&#34;&gt;&lt;em&gt;Coriolis: The Third Horizon&lt;/em&gt;&lt;/a&gt;&#xA;cites the movie &lt;a href=&#34;https://www.imdb.com/title/tt0078748/&#34;&gt;&lt;em&gt;Alien&lt;/em&gt;&lt;/a&gt;&#xA;as an inspiration,&#xA;and Fria Ligan recently made an &lt;a href=&#34;https://frialigan.se/en/games/alien/&#34;&gt;&lt;em&gt;Alien&lt;/em&gt; RPG&lt;/a&gt;.&#xA;It&amp;rsquo;s only natural to borrow elements from one into the other &amp;hellip;&#xA;in this case, Synthetics, a.k.a. androids or &amp;ldquo;artificial people&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coriolis Portals</title>
      <link>https://frank-mitchell.com/rpg/coriolis/portals/</link>
      <pubDate>Sun, 20 Sep 2020 17:42:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/coriolis/portals/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;&lt;p&gt;&#xA;Information on this page comes from the hardcover edition of&#xA;&lt;a href=&#34;https://frialigan.se/en/games/coriolis-2/&#34;&gt;&#xA;&lt;b&gt;Coriolis - The Third Horizon&lt;/b&gt;&lt;/a&gt;, &#xA;published by Fria Ligan, Modiphus Entertainment, and Paradox Interactive.&#xA;It is presented under the &#xA;&lt;a href=&#34;https://www.copyright.gov/fair-use/more-info.html&#34;&gt;&#xA;Fair Use Doctrine&lt;/a&gt;,&#xA;and is not intended to challenge the original work&#39;s copyrights.&#xA;&lt;/p&gt;&#xA;&lt;p&gt;CORIOLIS&amp;trade; Copyright &amp;copy; 2018 by Paradox Interactive AB.&lt;p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The &lt;em&gt;Coriolis&lt;/em&gt; Core Book PDF lacks the map of portals between star systems&#xA;that the print version provides inside the front cover.&#xA;This document provides equivalent information,&#xA;less conveniently arranged as tables and lists.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coriolis Ship Generation</title>
      <link>https://frank-mitchell.com/posts/coriolis-shipgen/</link>
      <pubDate>Wed, 16 Sep 2020 00:40:55 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/coriolis-shipgen/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://frialigan.se/en/games/coriolis-2/&#34;&gt;Coriolis&lt;/a&gt;,&#xA;a science fiction RPG from Fria Ligan / Free League Publishing,&#xA;has rules for building a ship.&#xA;Typically a group of players would build a ship,&#xA;and in any case the pre-built ships in the book cover most of the bases.&#xA;Still, I wanted to try my hand,&#xA;and I &lt;em&gt;think&lt;/em&gt; I came up with a niche not previously addressed.&#xA;Maybe not one that needs to be addressed &amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coriolis Character Generation</title>
      <link>https://frank-mitchell.com/posts/coriolis-chargen/</link>
      <pubDate>Mon, 14 Sep 2020 15:15:39 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/coriolis-chargen/</guid>
      <description>&lt;p&gt;The past few days I&amp;rsquo;ve been reading&#xA;&lt;a href=&#34;https://frialigan.se/en/games/coriolis-2/&#34;&gt;&lt;em&gt;Coriolis: The Third Horizon&lt;/em&gt;&lt;/a&gt;,&#xA;an RPG by the Fria Ligan team.&#xA;So far I&amp;rsquo;ve read all the player-facing rules&#xA;and am plowing through the extensive background.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;The tag line for &lt;em&gt;Coriolis&lt;/em&gt; is &amp;ldquo;Arabian Nights in space&amp;rdquo;.&#xA;In brief, long before the setting&amp;rsquo;s present&#xA;mankind discovered portals from one star to the next.&#xA;The interconnecting routes between stars form a &amp;ldquo;Horizon&amp;rdquo;.&#xA;Centuries ago, the &amp;ldquo;Third Horizon&amp;rdquo; fought a war against the first two,&#xA;and destroyed the gates back to the Second and First Horizons.&#xA;The Third Horizon then dissolved into petty wars;&#xA;worlds drifted out of contact.&#xA;Within the past century, however,&#xA;the slower-than-light generation ship Zenith, packed with frozen colonists,&#xA;completed its 1000 year journey to &amp;hellip; the already inhabited Kua system.&#xA;After arguments internal and external,&#xA;the Zenith crew unfroze the colonists and created the space station Coriolis.&#xA;Much of the setting revolves around the conflict between&#xA;the Firstcomers who have lived in the Third Horizon for untold generations&#xA;and the upstart Zenithians.&#xA;Firstcomers tend to be religious, traditional, and tribal;&#xA;Zenithians tend to be commercial and technocratic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yet More Year Zero, Again</title>
      <link>https://frank-mitchell.com/posts/yet-more-year-zero-again/</link>
      <pubDate>Mon, 14 Sep 2020 12:17:29 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/yet-more-year-zero-again/</guid>
      <description>&lt;p&gt;So far I&amp;rsquo;ve read half of&#xA;&lt;a href=&#34;https://frialigan.se/en/games/coriolis-2/&#34;&gt;&lt;em&gt;Coriolis&lt;/em&gt;&lt;/a&gt;&#xA;and have just started the published version of&#xA;&lt;a href=&#34;https://frialigan.se/en/games/vaesen/&#34;&gt;&lt;em&gt;Vaesen&lt;/em&gt;&lt;/a&gt;.&#xA;I&amp;rsquo;ll have more to say about them in future posts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;difficulty-factors&#34;&gt;Difficulty Factors&lt;/h2&gt;&#xA;&lt;p&gt;In the meantime I&amp;rsquo;ll look into how Difficulty Factors in&#xA;&lt;a href=&#34;https://frialigan.se/en/games/tales-from-the-loop/&#34;&gt;&lt;em&gt;Tales From the Loop&lt;/em&gt;&lt;/a&gt;&#xA;and &lt;em&gt;Vaesen&lt;/em&gt;&#xA;change probabilities of success.&lt;/p&gt;&#xA;&lt;p&gt;In Year Zero Engine games, players roll a pool of six-sided dice&#xA;based on their character&amp;rsquo;s attribute and skill scores;&#xA;each six counts as a &amp;ldquo;success&amp;rdquo;.&#xA;Players can &amp;ldquo;push&amp;rdquo; a roll &amp;ndash; re-roll failed dice &lt;em&gt;once&lt;/em&gt; &amp;ndash;&#xA;at a cost, such as a Condition that negatively affects their character.&#xA;In &lt;em&gt;Coriolis&lt;/em&gt;, &lt;em&gt;Vaesen&lt;/em&gt;, &lt;em&gt;Tales From the Loop&lt;/em&gt;, and&#xA;&lt;em&gt;Things From the Flood&lt;/em&gt;, 1-5 have no effect.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Life on Theta Priori</title>
      <link>https://frank-mitchell.com/rpg/theta-priori/</link>
      <pubDate>Thu, 10 Sep 2020 12:53:47 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/theta-priori/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In 2018 my gaming group started playing&#xA;&lt;a href=&#34;http://www.lulu.com/shop/b-murray-and-cw-marshall-and-t-dyke-and-b-kerr/diaspora-hard-science-fiction-role-playing-with-fate/ebook/product-20826364.html&#34;&gt;&lt;em&gt;Disaspora&lt;/em&gt;&lt;/a&gt;,&#xA;or rather &lt;a href=&#34;http://www.vsca.ca/Diaspora/diaspora-srd.html&#34;&gt;Diaspora rules&lt;/a&gt;&#xA;from 2013&#xA;grafted onto &lt;a href=&#34;https://www.evilhat.com/home/fate-core/&#34;&gt;Fate Core&lt;/a&gt;&#xA;from 2018.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;em&gt;Diaspora&lt;/em&gt; players create not only characters&#xA;but the small star cluster in which they live.&#xA;This is the star system and planet I designed, using only three die rolls&#xA;and a lot of inspiration from topics in the news.&#xA;The main text is what I sent out to the group,&#xA;with some small formatting tweaks,&#xA;but I&amp;rsquo;ve added some commentary and explanations at the end.&#xA;Maybe someone will find it interesting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why an SRD, Again?</title>
      <link>https://frank-mitchell.com/posts/why-srd-again/</link>
      <pubDate>Sat, 28 Mar 2020 18:12:28 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/why-srd-again/</guid>
      <description>&lt;p&gt;In the whole six weeks since I wrote &lt;a href=&#34;../why-srd/&#34;&gt;&amp;ldquo;Why an SRD?&amp;rdquo;&lt;/a&gt;,&#xA;I&amp;rsquo;ve had some additional thoughts and revelations,&#xA;and one relevant external event.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-basic-roleplaying-system-reference-document-at-last&#34;&gt;A Basic Roleplaying System Reference Document At Last?&lt;/h2&gt;&#xA;&lt;p&gt;In a &lt;a href=&#34;../why-srd/&#34;&gt;previous post&lt;/a&gt; I wrote:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Older, more established publishers like Chaosium may prefer&#xA;to zealously guard their &amp;ldquo;intellectual property&amp;rdquo;&#xA;and stick to traditional company-to-company licensing agreements.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Thursday night / Friday morning (March 27, 2020), Chaosium released a&#xA;&lt;a href=&#34;https://www.chaosium.com/brp-system-reference-document/&#34;&gt;Basic Roleplaying System Reference Document&lt;/a&gt;,&#xA;or BRP SRD for short.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goblins and Kobolds and Trolls, Oh My</title>
      <link>https://frank-mitchell.com/posts/goblins-n-kobolds-n-trolls/</link>
      <pubDate>Tue, 24 Mar 2020 11:31:03 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/goblins-n-kobolds-n-trolls/</guid>
      <description>&lt;p&gt;This is (probably) the last of what I&amp;rsquo;m calling my&#xA;&lt;a href=&#34;https://frank-mitchell.com/tags/creatures-reconsidered/&#34;&gt;&amp;ldquo;Creatures Reconsidered&amp;rdquo;&lt;/a&gt; series.&#xA;Here I want to look at goblins, kobolds, and trolls,&#xA;the creatures that,&#xA;in most fantasy RPGs and miniatures games,&#xA;are the howling &amp;ldquo;evil&amp;rdquo; hordes that &amp;ldquo;good&amp;rdquo; beings,&#xA;i.e. the PCs,&#xA;can kill without compunction.&#xA;(See the post &lt;a href=&#34;../why-are-drow-dark/&#34;&gt;Drow&lt;/a&gt;&#xA;for my problems with that trope.)&lt;/p&gt;&#xA;&lt;h3 id=&#34;goblins&#34;&gt;Goblins&lt;/h3&gt;&#xA;&lt;p&gt;The term &lt;a href=&#34;https://www.thefreedictionary.com/goblin&#34;&gt;&amp;ldquo;goblin&amp;rdquo;&lt;/a&gt;&#xA;has been applied to a wide range of ghosts, evil fairies,&#xA;small grotesque monsters,&#xA;and assorted imps and petty demons.&#xA;The picture below is Goya&amp;rsquo;s &amp;ldquo;Duendecitos&amp;rdquo;,&#xA;sometimes translated as &amp;ldquo;Hobgoblins&amp;rdquo;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&#xA;&amp;ldquo;Duende&amp;rdquo; in Spanish and related languages&#xA;&lt;em&gt;also&lt;/em&gt; means spirit or ghost.&#xA;And &amp;ldquo;animal magnetism&amp;rdquo; or charm.&#xA;And a particulary soulful, melancholy, and passionate form of art.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lost Cities</title>
      <link>https://frank-mitchell.com/posts/lost-cities/</link>
      <pubDate>Tue, 24 Mar 2020 02:39:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/lost-cities/</guid>
      <description>&lt;p&gt;This morning I started playing around with&#xA;&lt;a href=&#34;https://www.drivethrurpg.com/product/252519/Humblebirds-Lost-Cities-Generator&#34;&gt;&amp;ldquo;Humblebird&amp;rsquo;s Lost Cities Generator&amp;rdquo;&lt;/a&gt;.&#xA;Using two six-sided dice of different colors,&#xA;one generates descriptive words or phrases in the following categories:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Overview:&lt;/strong&gt; What&amp;rsquo;s the viewer&amp;rsquo;s first impression?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Architecture:&lt;/strong&gt; What shapes and theme predominate?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Gimmick:&lt;/strong&gt; What makes the civilization unusual?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Government:&lt;/strong&gt; Who or what was in charge?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Technology:&lt;/strong&gt; How did their advanced techno-sorcery work?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ethos:&lt;/strong&gt; What did they value most?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Disappearance:&lt;/strong&gt; Why is it &amp;ldquo;lost&amp;rdquo;?&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Prime Remnant:&lt;/strong&gt; Why do people remember it today?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;It&amp;rsquo;s geared mainly for fantasy role-playing games,&#xA;with some distinct H. Rider Haggard / E. R. Burroughs vibes.&#xA;With a few tweaks it could work for actual pulp settings,&#xA;or as the author states for living if slightly fantastical cities.&#xA;It&amp;rsquo;s a pretty good random idea generator at a decent price.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Elf Not Off The Shelf</title>
      <link>https://frank-mitchell.com/posts/an-elf-not-off-the-shelf/</link>
      <pubDate>Tue, 17 Mar 2020 08:31:03 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/an-elf-not-off-the-shelf/</guid>
      <description>&lt;p&gt;In the popular imagination,&#xA;especially among those who&amp;rsquo;ve&#xA;read Tolkien&amp;rsquo;s &lt;em&gt;Lord of the Rings&lt;/em&gt;,&#xA;seen the Peter Jackson movies based on Tolkien,&#xA;played &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; which borrowed heavily from Tolkien,&#xA;or played &lt;em&gt;World of Warcraft&lt;/em&gt; and similar games which borrowed heavily from D&amp;amp;D,&#xA;elves are tall, beardless, usually pale, pointy-eared immortals.&lt;/p&gt;&#xA;&lt;p&gt;Before those franchises became popular, though,&#xA;not everyone had the same idea of what an &amp;ldquo;elf&amp;rdquo; looked like.&#xA;The original (&amp;ldquo;White Box&amp;rdquo;) version of D&amp;amp;D contained this drawing of an &amp;ldquo;elf&amp;rdquo;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>On Converting the Year Zero Engine SRD into HTML</title>
      <link>https://frank-mitchell.com/posts/yze-in-html/</link>
      <pubDate>Mon, 16 Mar 2020 02:05:13 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/yze-in-html/</guid>
      <description>&lt;p&gt;Recently I converted the&#xA;&lt;a href=&#34;https://docs.google.com/document/d/1hJbU3umOMxQB7voJw8dj3UJMnABmON81j9cGxX_JOWc/edit&#34;&gt;Year Zero Engine OGL SRD&lt;/a&gt;&#xA;into Markdown, which my blog generator converts into &amp;ldquo;clean&amp;rdquo; HTML.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;The results are &lt;a href=&#34;https://frank-mitchell.com/rpg/year-zero-engine-ogl/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why&#34;&gt;Why?&lt;/h2&gt;&#xA;&lt;p&gt;On the&#xA;&lt;a href=&#34;https://forum.frialigan.se/viewtopic.php?f=119&amp;amp;p=44745&amp;amp;sid=a68e51f8e4e0083808c6d74ea07bdba1#p44464&#34;&gt;Fria Ligan forums&lt;/a&gt;&#xA;I floated the idea of using the document to recreate something like&#xA;&lt;em&gt;Tales from the Loop&lt;/em&gt;.&#xA;However, I prefer writing in Markdown, or plain text formats generally.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;This blog runs on Markdown,&#xA;and I planned to post whatever I came up with in&#xA;my new &lt;a href=&#34;https://frank-mitchell.com/rpg/&#34;&gt;Table Top RPG&lt;/a&gt; section.&lt;/li&gt;&#xA;&lt;li&gt;Whenever possible I try to avoid vendor lock-in, notably&#xA;Microsoft Word &amp;hellip; &lt;em&gt;and&lt;/em&gt; Google Docs.&#xA;Yes, I can export to Open Document Text, but &amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;I also have a philosophical objection to using complex file formats&#xA;when something simple like plain text will do.&#xA;It&amp;rsquo;s easy to find the differences between text files&#xA;using simple command line tools (another preference of mine),&#xA;whereas the only way to find the changes in Word and similar formats&#xA;is to turn on change tracking&#xA;then depend on the application to do it however (and however well) it wants.&lt;/li&gt;&#xA;&lt;li&gt;I keep everything in a Version Control System&#xA;which &lt;em&gt;also&lt;/em&gt; prefers flat files in ASCII or Unicode&#xA;over binary formats like ODT.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;So&lt;/strong&gt; I had to get the original into Markdown somehow.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Year Zero Engine OGL SRD</title>
      <link>https://frank-mitchell.com/rpg/year-zero-engine-ogl/</link>
      <pubDate>Sat, 14 Mar 2020 00:14:42 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/year-zero-engine-ogl/</guid>
      <description>&lt;p&gt;::: note&#xA;&lt;strong&gt;2023-03-28:&lt;/strong&gt;&#xA;A newer draft of the &lt;a href=&#34;https://freeleaguepublishing.com/wp-content/uploads/2023/03/YZE-Standard-Reference-Document.pdf&#34;&gt;Year Zero Engine SRD&lt;/a&gt; is available from&#xA;&lt;a href=&#34;https://freeleaguepublishing.com/&#34;&gt;Free League Publishing&lt;/a&gt;, subject to&#xA;the &lt;a href=&#34;https://freeleaguepublishing.com/wp-content/uploads/2023/03/Year-Zero-Engine-License-Agreement.pdf&#34;&gt;Year Zero Engine Free Tabletop License&lt;/a&gt;.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;foreword-by-frank-mitchell&#34;&gt;Foreword by Frank Mitchell&lt;/h2&gt;&#xA;&lt;p&gt;This is the text from the prior official&#xA;&lt;a href=&#34;https://docs.google.com/document/d/1hJbU3umOMxQB7voJw8dj3UJMnABmON81j9cGxX_JOWc/edit&#34;&gt;Year Zero Engine SRD&lt;/a&gt;,&#xA;converted to Markdown and hence to &amp;ldquo;clean&amp;rdquo; HTML.&#xA;The differences are mainly formatting, fonts, headers, etc.,&#xA;with some minor errata fixed,&#xA;links added or refined,&#xA;and chapter numbers converted to section names.&#xA;Any other differences between this version and the original&#xA;are the fault of the transcriber, Frank Mitchell.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog Facelift Complete</title>
      <link>https://frank-mitchell.com/posts/blog-facelift-complete/</link>
      <pubDate>Thu, 12 Mar 2020 16:27:23 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/blog-facelift-complete/</guid>
      <description>&lt;p&gt;For better or worse, this is what my blog will look like going forward.&#xA;Anyone who saw the &amp;lsquo;dev&amp;rsquo; version, mentioned in the previous posts,&#xA;will find this familiar.&#xA;(I&amp;rsquo;ll take down the &amp;lsquo;dev&amp;rsquo; site shortly.)&lt;/p&gt;&#xA;&lt;p&gt;To summarize the changes:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I retired the Ananke theme in favor of XMin.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I then &lt;em&gt;heavily&lt;/em&gt; customized the XMin theme for the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;Single&amp;rdquo; (article) pages list tags at the bottom&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;List&amp;rdquo; pages note creation &lt;em&gt;and&lt;/em&gt; modification of articles&lt;/li&gt;&#xA;&lt;li&gt;The Home page uses its own template,&#xA;which at the moment differs only slightly from the &amp;ldquo;list&amp;rdquo; temlate.&lt;/li&gt;&#xA;&lt;li&gt;The Posts list page uses XMin&amp;rsquo;s original &amp;ldquo;list&amp;rdquo; template,&#xA;i.e. posts in order of creation date, most recent first.&lt;/li&gt;&#xA;&lt;li&gt;Some &amp;ldquo;single&amp;rdquo; pages include a Table of Contents,&#xA;based on a &lt;code&gt;toc&lt;/code&gt; parameter in the article&amp;rsquo;s &amp;ldquo;front matter&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;The Resume page (see below) omits the standard title header,&#xA;again based on a single parameter in the article&amp;rsquo;s &amp;ldquo;front matter&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve also integrated my resume page into the Hugo project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog Facelift: Real Soon Now</title>
      <link>https://frank-mitchell.com/posts/blog-facelift-rsn/</link>
      <pubDate>Thu, 05 Mar 2020 10:51:12 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/blog-facelift-rsn/</guid>
      <description>&lt;p&gt;After my post a few days ago,&#xA;I got inspired to push through what I considered the big issue&#xA;&amp;ndash; tags at the bottom of each post &amp;ndash;&#xA;and got it done.&#xA;That uncovered a few &lt;em&gt;other&lt;/em&gt; issues,&#xA;notably how the non-blog sections will work&#xA;given that it makes most sense to sort them by title, not date.&lt;/p&gt;&#xA;&lt;p&gt;My current working version will go up on (a now invalid URL)&#xA;shortly.&#xA;In future revisions&#xA;I may, however, remove the &amp;ldquo;TTRPG&amp;rdquo; section until I have something to put there.&#xA;Interestingly, I had to override some of the (few) templates&#xA;&lt;a href=&#34;https://github.com/yihui/hugo-xmin&#34;&gt;XMIN&lt;/a&gt;&#xA;provides,&#xA;and augment the CSS.&#xA;Soon I may get to the point that I&amp;rsquo;m not using an XMIN &amp;ldquo;theme&amp;rdquo;&#xA;so much as I&amp;rsquo;m borrowing bits of XMIN &amp;ldquo;code&amp;rdquo; to implement my own site.&#xA;(Which may have been the author&amp;rsquo;s intent.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog Facelift Progress</title>
      <link>https://frank-mitchell.com/posts/blog-facelift-progress/</link>
      <pubDate>Mon, 02 Mar 2020 21:15:59 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/blog-facelift-progress/</guid>
      <description>&lt;p&gt;A quick update: there&amp;rsquo;s been little progress.&lt;/p&gt;&#xA;&lt;p&gt;Three cosmetic fixes I&amp;rsquo;ve decided to make &lt;strong&gt;now&lt;/strong&gt;, before the &amp;ldquo;facelift&amp;rdquo;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;By default, the new version of &lt;code&gt;hugo&lt;/code&gt;&#xA;strips out all the literal HTML from the Markdown source of my posts.&#xA;In practical terms, that means that all the embedded YouTube videos&#xA;in older posts were gone &amp;hellip; until this most recent update.&#xA;See, for example, the articles on&#xA;&lt;a href=&#34;../she-ra-season-4/&#34;&gt;She-Ra&lt;/a&gt;&#xA;or&#xA;&lt;a href=&#34;../gplus-roundup-2/&#34;&gt;Brexit&lt;/a&gt;.&#xA;I&amp;rsquo;ve tweaked the configuration to fix that.&#xA;(This is more of a bug fix than a facelift.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why an SRD?</title>
      <link>https://frank-mitchell.com/posts/why-srd/</link>
      <pubDate>Wed, 12 Feb 2020 18:57:53 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/why-srd/</guid>
      <description>&lt;p&gt;As I noted &lt;a href=&#34;../one-rpg-many-genres/&#34;&gt;in a previous post&lt;/a&gt;,&#xA;many RPG publishers reuse some or all of their rules&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;between RPGs in different settings and genres.&#xA;Sometimes one publisher will license another&amp;rsquo;s core rules&#xA;either to provide supplements to the first publisher&amp;rsquo;s products&#xA;&lt;em&gt;or&lt;/em&gt; to adapt the system for another setting and/or genre.&lt;/p&gt;&#xA;&lt;p&gt;Beginning in 2000 with Wizards of the Coast&amp;rsquo;s &lt;em&gt;Dungeons &amp;amp; Dragons&lt;/em&gt; 3.0,&#xA;some companies compile and publish a&#xA;&amp;ldquo;System Reference Document&amp;rdquo; (SRD)&#xA;which contains bare-bones rules, classes, skills, spells, etc.&#xA;Under WotC&amp;rsquo;s &lt;a href=&#34;http://www.opengamingfoundation.org/ogl.html&#34;&gt;Open Game License&lt;/a&gt;&#xA;or another &amp;ldquo;open content&amp;rdquo; license like&#xA;&lt;a href=&#34;https://creativecommons.org/&#34;&gt;Creative Commons&lt;/a&gt; (CC),&#xA;anyone can include some or all of the SRD&amp;rsquo;s text into their own work,&#xA;with some (usually minimal) restrictions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yet More Year Zero</title>
      <link>https://frank-mitchell.com/posts/yet-more-year-zero/</link>
      <pubDate>Tue, 11 Feb 2020 00:26:30 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/yet-more-year-zero/</guid>
      <description>&lt;p&gt;After having read (half) the PDF of &lt;em&gt;Tales from the Loop&lt;/em&gt; (TFL),&#xA;I&amp;rsquo;ve had a few remaining thoughts about the Year Zero Engine.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conflict-without-combat&#34;&gt;Conflict Without Combat&lt;/h2&gt;&#xA;&lt;p&gt;Since the focus of TFL is Kids having Adventures&#xA;rather than &lt;del&gt;murderhobos&lt;/del&gt; adventurers questing for loot,&#xA;TFL is a bit of an outlier among Year Zero Engine games.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When Kids get into &amp;ldquo;Trouble&amp;rdquo;, they always roll unopposed.&#xA;The GM never rolls dice for NPCs.&#xA;NPCs don&amp;rsquo;t even really have attributes,&#xA;save in a few cases mentioned below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>One RPG, Many Genres?</title>
      <link>https://frank-mitchell.com/posts/one-rpg-many-genres/</link>
      <pubDate>Sun, 02 Feb 2020 00:51:49 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/one-rpg-many-genres/</guid>
      <description>&lt;p&gt;In the ever-growing marketplace of role-playing games,&#xA;designers of role-playing games have an incentive&#xA;to keep their rules simple enough to learn in 10 minutes&#xA;with no nasty surprises,&#xA;&lt;em&gt;or&lt;/em&gt; to reuse rules that players may already know.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;(Ideally, both.)&lt;/p&gt;&#xA;&lt;p&gt;To that end designers have created many systems&#xA;meant to be reused for different settings and even different genres.&#xA;I&amp;rsquo;ve seen some of these endure for decades,&#xA;others flourish briefly then burn out like any other fad,&#xA;and still others fall quickly into obscurity and irrelevance&#xA;despite trumpeting how &amp;ldquo;universal&amp;rdquo; they are.&#xA;I&amp;rsquo;ve long been curious about why some of these systems succeed and others fail.&#xA;While market forces, business decisions, and luck play a part,&#xA;I&amp;rsquo;m convinced some designs are more flexible, adaptable, and general&#xA;(or &amp;ldquo;generic&amp;rdquo;) than others.&#xA;Below I&amp;rsquo;ll try to tease out a few traits that I think make a difference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vaesen Alpha Comments</title>
      <link>https://frank-mitchell.com/posts/vaesen-alpha-comments/</link>
      <pubDate>Wed, 08 Jan 2020 02:53:40 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/vaesen-alpha-comments/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://frialigan.se/en/startpage/&#34;&gt;Fria Ligan / &amp;ldquo;Free League&amp;rdquo;&lt;/a&gt;&#xA;dropped an alpha version of their upcoming RPG&#xA;&lt;a href=&#34;https://www.kickstarter.com/projects/1192053011/vaesen-nordic-horror-roleplaying&#34;&gt;&lt;em&gt;Vaesen&lt;/em&gt;&lt;/a&gt;&#xA;to&#xA;Kickstarter&#xA;backers.&#xA;It&amp;rsquo;s still missing a number of things, notably an introduction&#xA;and the stretch goals unlocked during the Kickstarter.&#xA;Still, it&amp;rsquo;s complete enough to get an idea of the final product.&lt;/p&gt;&#xA;&lt;p&gt;Having read most of the PDF&#xA;&amp;ndash; I skimmed the &amp;ldquo;what is roleplaying&amp;rdquo; section and assorted tables &amp;ndash;&#xA;I&amp;rsquo;m going to give some quick (?) impressions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alien RPG Dice Table</title>
      <link>https://frank-mitchell.com/posts/alien-rpg-dice-table/</link>
      <pubDate>Tue, 31 Dec 2019 06:20:31 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/alien-rpg-dice-table/</guid>
      <description>&lt;p&gt;In previous posts&#xA;&lt;a href=&#34;../year-zero-probabilities/&#34;&gt;(1)&lt;/a&gt;&#xA;&lt;a href=&#34;../year-zero-probabilities-redux/&#34;&gt;(2)&lt;/a&gt;&#xA;I&amp;rsquo;ve been figuring out probability tables for various RPGs&#xA;by Swedish publisher &lt;a href=&#34;https://frialigan.se&#34;&gt;Fria Ligan&lt;/a&gt;,&#xA;a.k.a. Free League Publishing in English-speaking countries.&#xA;Their &lt;em&gt;Alien&lt;/em&gt; RPG, recently released,&#xA;has some interesting wrinkles which made analysis a little more difficult,&#xA;at least for me.&lt;/p&gt;&#xA;&lt;p&gt;Nearly all&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; their RPGs use the same basic resolution mechanic,&#xA;dubbed the Year Zero System:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The player (and sometimes GM) assembles a pool of d6s.&#xA;For most player actions,&#xA;it&amp;rsquo;s the sum of a Base Attribute, a Skill,&#xA;and modifiers for equipment and circumstances.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Knives Out</title>
      <link>https://frank-mitchell.com/posts/knives-out/</link>
      <pubDate>Sat, 21 Dec 2019 23:22:16 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/knives-out/</guid>
      <description>&lt;p&gt;This evening I saw &lt;em&gt;Knives Out&lt;/em&gt;.&#xA;A bit off-brand, I know: no aliens, demons, or super people.&#xA;Occasionally I &lt;em&gt;do&lt;/em&gt; see things grounded in the here-and-now&#xA;or the non-alternate past.&lt;/p&gt;&#xA;&lt;p&gt;Short review: I liked it.&lt;/p&gt;&#xA;&lt;p&gt;To expand on that, it was essentially a who-dunnit, with a twist.&#xA;(Much like &lt;em&gt;The Last Jedi&lt;/em&gt;, the only other Rian Johnson movie I saw,&#xA;was a Star War that subverted expectations&#xA;yet played well within the bounds of the genre and setting.)&#xA;Christopher Plummer plays a wealthy mystery novel writer&#xA;who is found dead, apparently by his own hand.&#xA;But was it murder?&#xA;Somebody thinks so, and put a famous private detective&#xA;&amp;ndash; Daniel Craig with a passable Cajun accent &amp;ndash;&#xA;on the case.&#xA;Suspects include the deceased&amp;rsquo;s parasitic children,&#xA;overly sheltered grandchildren,&#xA;in-laws,&#xA;and assorted hangers-on,&#xA;all of whom have, as the police detective calls them, &amp;ldquo;weaksauce motives&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog Facelift Underway</title>
      <link>https://frank-mitchell.com/posts/blog-facelift-underway/</link>
      <pubDate>Sat, 21 Dec 2019 18:20:51 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/blog-facelift-underway/</guid>
      <description>&lt;p&gt;In the next few weeks (months? years?) I&amp;rsquo;m going to overhaul this blog.&lt;/p&gt;&#xA;&lt;p&gt;First, I&amp;rsquo;m going to change the&#xA;&lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; theme from&#xA;&lt;a href=&#34;https://themes.gohugo.io/gohugo-theme-ananke/&#34;&gt;Ananke&lt;/a&gt;&#xA;to&#xA;&lt;a href=&#34;https://themes.gohugo.io/hugo-xmin/&#34;&gt;XMin&lt;/a&gt;,&#xA;and then customize the hell out of it.&#xA;You can see an evolving preview of this project at&#xA;&lt;a href=&#34;http://dev.frank-mitchell.com&#34;&gt;http://dev.frank-mitchell.com&lt;/a&gt;.&#xA;(As of Dec 21, 2019, it really doesn&amp;rsquo;t look like much.)&#xA;The &amp;ldquo;dev&amp;rdquo; version&amp;rsquo;s content may lag behind the main site&amp;rsquo;s a bit,&#xA;since I&amp;rsquo;ll only update &amp;ldquo;dev&amp;rdquo; for style changes&#xA;but the main site will update when I add new blog posts&#xA;&amp;hellip; or any other content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Year Zero Probabilities Redux</title>
      <link>https://frank-mitchell.com/posts/year-zero-probabilities-redux/</link>
      <pubDate>Thu, 19 Dec 2019 18:14:11 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/year-zero-probabilities-redux/</guid>
      <description>&lt;p&gt;::: note&#xA;2023-03-18: Added Table of Contents and Titles.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;successes&#34;&gt;In Which I Consider The Number Of Successes&lt;/h2&gt;&#xA;&lt;p&gt;In most versions of the Year Zero System,&#xA;if players roll more than one 6,&#xA;they can spend them for added benefits.&#xA;(&lt;em&gt;Mutant Year Zero&lt;/em&gt; and the &lt;em&gt;Alien&lt;/em&gt; RPG calls them &amp;ldquo;stunts&amp;rdquo;;&#xA;&lt;em&gt;Forbidden Lands&lt;/em&gt; has no special name and only certain skills benefit.)&lt;/p&gt;&#xA;&lt;p&gt;So how likely are you to roll more than one 6?&#xA;Not very.&#xA;The &lt;em&gt;average&lt;/em&gt; number of successes is &lt;em&gt;N&lt;/em&gt;/6,&#xA;where &lt;em&gt;N&lt;/em&gt; is the number of dice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Year Zero Probabilities</title>
      <link>https://frank-mitchell.com/posts/year-zero-probabilities/</link>
      <pubDate>Thu, 12 Dec 2019 21:49:06 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/year-zero-probabilities/</guid>
      <description>&lt;p&gt;::: summary&#xA;SUMMARY: All the Year Zero System games from Free League that I&amp;rsquo;ve seen&#xA;contain the same table of probabilities,&#xA;&lt;em&gt;despite&lt;/em&gt; mechanical differences that should change probabilities.&#xA;In this post I try to derive the results they did,&#xA;&lt;em&gt;fail&lt;/em&gt;,&#xA;and derive tables that are &lt;em&gt;close&lt;/em&gt;&#xA;and as far as I can tell more accurate.&#xA;The post ends with a Lua program to generate a basic probability table.&#xA;You have been warned.&#xA;:::&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Non-Review of Fria Ligan&#39;s Alien RPG</title>
      <link>https://frank-mitchell.com/posts/alien-rpg-nonreview/</link>
      <pubDate>Thu, 12 Dec 2019 11:58:11 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/alien-rpg-nonreview/</guid>
      <description>&lt;p&gt;Rather than review the new &lt;em&gt;Alien&lt;/em&gt; RPG from Fria Ligan (Free League),&#xA;I&amp;rsquo;d like to highlight new mechanics and other stealable content.&lt;/p&gt;&#xA;&lt;h2 id=&#34;stress&#34;&gt;Stress&lt;/h2&gt;&#xA;&lt;p&gt;The most notable new mechanics in &lt;em&gt;Alien&lt;/em&gt;,&#xA;(and the reason I ponied up $25 for the PDF)&#xA;are Stress and Panic.&lt;/p&gt;&#xA;&lt;p&gt;The game uses two distinct sets of six-sided dice,&#xA;Base Dice&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./Alien_RPG_Base_Dice.png&#34; alt=&#34;Alien RPG Base Dice&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;and Stress Dice:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./Alien_RPG_Stress_Dice.png&#34; alt=&#34;Alien RPG Stress Dice&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Images from the &lt;a href=&#34;https://frialigan.se/en/store/&#34;&gt;Free League Store&lt;/a&gt;.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vaesen Rules Preview</title>
      <link>https://frank-mitchell.com/posts/vaesen-preview/</link>
      <pubDate>Thu, 12 Dec 2019 11:52:33 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/vaesen-preview/</guid>
      <description>&lt;p&gt;Recently I spent &lt;em&gt;way&lt;/em&gt; too much money&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; on the&#xA;&lt;a href=&#34;https://www.kickstarter.com/projects/1192053011/vaesen-nordic-horror-roleplaying&#34;&gt;&lt;em&gt;Vaesen&lt;/em&gt; Kickstarter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Still, I&amp;rsquo;m pretty confident about it.&#xA;For one thing, my intended add-ons are&#xA;the currently out of print &lt;em&gt;Forbidden Lands&lt;/em&gt; boxed set (plus PDF),&#xA;the &lt;em&gt;Coriolis&lt;/em&gt; core rules (plus PDF),&#xA;and the art book &lt;em&gt;Vaesen&lt;/em&gt; that inspired the RPG.&#xA;Two of those I was intending to get at some point anyway,&#xA;and the Kickstarter price is cheaper than retail in the States&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;,&#xA;so I&amp;rsquo;m saving money.&#xA;The art book just looks pretty, &lt;em&gt;and&lt;/em&gt; it&amp;rsquo;s nearly $90 USD on Amazon,&#xA;vs. 250 SEK (~$26 USD) in the Kickstarter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Big Companies Suck</title>
      <link>https://frank-mitchell.com/posts/big-companies-suck/</link>
      <pubDate>Fri, 25 Oct 2019 11:13:23 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/big-companies-suck/</guid>
      <description>&lt;p&gt;This past week I&amp;rsquo;ve been struggling,&#xA;physically and morally,&#xA;with the products of a few big tech companies.&lt;/p&gt;&#xA;&lt;h3 id=&#34;apple&#34;&gt;Apple&lt;/h3&gt;&#xA;&lt;p&gt;This past week I upgraded my 2014 Mac Mini to Catalina.&#xA;It took a whole day of updating and rebooting.&#xA;At one point it stopped with the message &amp;ldquo;Estimating time remaining&amp;rdquo; &amp;hellip;&#xA;for &lt;em&gt;hours&lt;/em&gt;.&#xA;I rebooted it manually at that point,&#xA;but that probably just meant it had to start over from the beginning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>She-Ra Season 4</title>
      <link>https://frank-mitchell.com/posts/she-ra-season-4/</link>
      <pubDate>Thu, 10 Oct 2019 00:32:06 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/she-ra-season-4/</guid>
      <description>&lt;p&gt;As usual, I&amp;rsquo;m the last to know &amp;hellip; but Netflix will release&#xA;&lt;em&gt;She-Ra and the Princesses of Power&lt;/em&gt; Season 4 on November 5, 2019.&#xA;(Guy Fawkes Day, for whatever that&amp;rsquo;s worth.)&lt;/p&gt;&#xA;&lt;p&gt;A teaser trailer from the recent New York ComicCon:&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/cSRiyC3cwps&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;So why does a middle-aged guy with no kids care about a cartoon for kids?&lt;/p&gt;&#xA;&lt;p&gt;Have you &lt;em&gt;seen&lt;/em&gt; my other posts about &lt;em&gt;DC Super Hero Girls&lt;/em&gt;?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing RPGs is Hard, Part 3: Dice Pools</title>
      <link>https://frank-mitchell.com/posts/dice-pools/</link>
      <pubDate>Sat, 05 Oct 2019 22:51:51 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dice-pools/</guid>
      <description>&lt;p&gt;::: note&#xA;&lt;strong&gt;UPDATED (2019-12-12):&lt;/strong&gt; Using the apparently official name for the&#xA;Free League&amp;rsquo;s house system: &amp;ldquo;Year Zero&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UPDATED (2023-04-03):&lt;/strong&gt; Added table of contents, revised titles.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;Reading the &amp;ldquo;quickstarts&amp;rdquo; for &lt;em&gt;Mutant: Year Zero&lt;/em&gt; and &lt;em&gt;Forbidden Lands&lt;/em&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;has sparked some thoughts about the Untitled dice pool system&#xA;I&amp;rsquo;m temporarily calling &amp;ldquo;The Third System&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-year-zero-system&#34;&gt;The Year Zero System&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Mutant: Year Zero&lt;/em&gt;, from Free League Publishing&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;,&#xA;uses a d6 dice pool mechanic:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Assemble a pool of color-coded six-sided dice:&lt;/p&gt;</description>
    </item>
    <item>
      <title>FICTION: Bunker Bomb</title>
      <link>https://frank-mitchell.com/posts/bunker-bomb/</link>
      <pubDate>Wed, 18 Sep 2019 02:16:24 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/bunker-bomb/</guid>
      <description>&lt;p&gt;District Attorney Burke concluded his opening arguments.&#xA;Despite promising himself not to, he found himself staring at the defendant.&#xA;The defendant,&#xA;inside his box of bullet-proof glass&#xA;with only a metal grill to talk and breathe through,&#xA;smiled cheerfully and waved.&lt;/p&gt;&#xA;&lt;p&gt;Victor Jackson didn&amp;rsquo;t look like a mass murderer.&#xA;Nothing like the ones Burke&amp;rsquo;s predecessor sent to Death Row.&#xA;Jackson had pale skin,&#xA;thinning straw-colored hair,&#xA;expressive blue eyes.&#xA;Any citizen could pass Jackson in the street and not even notice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>To Hugo or Not to Hugo</title>
      <link>https://frank-mitchell.com/posts/to-hugo-or-not-to-hugo/</link>
      <pubDate>Mon, 16 Sep 2019 22:25:55 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/to-hugo-or-not-to-hugo/</guid>
      <description>&lt;p&gt;When I decided to revive this blog a while ago,&#xA;I decided on &amp;hellip; &lt;a href=&#34;https://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt;, actually.&#xA;Instead of installing Perl, PHP, or other scripts on my hosting provider,&#xA;I could generate static HTML and upload it.&#xA;I wouldn&amp;rsquo;t blog much, I figured.&#xA;And knowing me, each entry would be the length of a term paper.&#xA;It would give me time to reread and polish each post&#xA;before releasing it out into the world,&#xA;a thing discouraged by sites like G+, Facebook, and &lt;em&gt;ugh&lt;/em&gt; Twitter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Paranormality</title>
      <link>https://frank-mitchell.com/posts/about-paranormality/</link>
      <pubDate>Mon, 16 Sep 2019 01:25:40 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/about-paranormality/</guid>
      <description>&lt;p&gt;The first &lt;strong&gt;two&lt;/strong&gt; RPGs I ever tried to write from scratch were&#xA;&lt;a href=&#34;../about-astral/&#34;&gt;&lt;em&gt;Astral&lt;/em&gt;&lt;/a&gt; and &lt;em&gt;Paranormality&lt;/em&gt;, roughly at the same time.&#xA;That may have been the problem.&lt;/p&gt;&#xA;&lt;p&gt;After abandoning both projects for a while I&amp;rsquo;m returning to them.&#xA;Below I&amp;rsquo;ll outline the goals of &lt;em&gt;Paranormality&lt;/em&gt;,&#xA;the history of the project,&#xA;the fairly minimal setting,&#xA;the mechanics I&amp;rsquo;ve currently chosen,&#xA;and a very rough roadmap for future work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;goals&#34;&gt;Goals&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Paranormality&lt;/em&gt; started as a default settting and system for &lt;em&gt;Astral&lt;/em&gt;&#xA;characters in their not-quite-mundane lives.&#xA;It provides ultra-light rules for life in a modern mundane world&#xA;with strange happenings on the edges.&#xA;Any rules with a comaparble setting will suffice.&#xA;Its main advantage lies in that both its setting material and its systems&#xA;translate to &lt;em&gt;Astral&lt;/em&gt;.&#xA;In &lt;em&gt;Paranormality&lt;/em&gt; telepathy and ESP emanate from mental planes&#xA;&amp;ldquo;above&amp;rdquo; the Astral Plane, and astral entities &amp;ndash; the players&amp;rsquo; and others &amp;ndash;&#xA;can wield them.&#xA;Other forms of &amp;ldquo;magic&amp;rdquo; also lie outside the Astral Plane.&#xA;Conversely, creatures from &lt;em&gt;Astral&lt;/em&gt; can show up in the &amp;ldquo;mundane&amp;rdquo; world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Astral</title>
      <link>https://frank-mitchell.com/posts/about-astral/</link>
      <pubDate>Sun, 15 Sep 2019 02:46:49 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/about-astral/</guid>
      <description>&lt;p&gt;The first RPG I tried to write from scratch was&#xA;&lt;em&gt;Astral&lt;/em&gt;, a game about exploring the Astral Plane.&#xA;After abandoning the project for a while I &lt;em&gt;may&lt;/em&gt; return to it.&#xA;Below I&amp;rsquo;ll outline the goals of &lt;em&gt;Astral&lt;/em&gt;,&#xA;the fairly minimal setting,&#xA;the mechanics I&amp;rsquo;ve currently chosen,&#xA;a brief motiviation and history of the project,&#xA;and a very rough roadmap for the system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;goals&#34;&gt;Goals&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Astral&lt;/em&gt; strives to provide rules for encounters in the Astral Plane,&#xA;not just as a standalone game but as an adjunct to other RPGs in any genre.&#xA;It&amp;rsquo;s also an experiment in starting players with a blank character sheet&#xA;and building up their &amp;ldquo;character&amp;rdquo; during play.&#xA;Unlike many other &amp;ldquo;multi-system&amp;rdquo; rules it provides its own&#xA;ultra-lightweight system that stands outside whatever RPG rules&#xA;a group normally uses just as the Astral Plane stands outside&#xA;tangible reality.&#xA;Eventually I will provide conversion notes to and from various common systems.&#xA;To a large degree, though, just as a character&amp;rsquo;s astral body&#xA;obeys vastly different rules from their physical form,&#xA;so too does &lt;em&gt;Astral&lt;/em&gt; define a distinct player avatar&#xA;in a new game world with new game rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing RPGs is Hard, Part 2: Combat Rounds and the M x N Problem</title>
      <link>https://frank-mitchell.com/posts/m-x-n-problem/</link>
      <pubDate>Fri, 13 Sep 2019 04:35:29 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/m-x-n-problem/</guid>
      <description>&lt;p&gt;As I write rules for an ever-expanding number of notional role-playing games,&#xA;I repeatedly crash into the M x N problem&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In a classic situation, Our Heroes, the Player Characters,&#xA;have just gotten into a fight with some less heroic fellows,&#xA;run by the GM.&#xA;Let&amp;rsquo;s say there are &lt;code&gt;M&lt;/code&gt; player characters and a total of &lt;code&gt;N&lt;/code&gt; ruffians&#xA;involved in this scrap.&#xA;&lt;em&gt;In each round&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; of combat&lt;/em&gt;,&#xA;each player decides what their one (1) character does,&#xA;and plays out the consequences.&#xA;During that &lt;em&gt;same&lt;/em&gt; round, the GM has to decide what &lt;code&gt;N&lt;/code&gt; ruffians are doing,&#xA;and play out the consequences of each of their actions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing RPGs is Hard, Part 1</title>
      <link>https://frank-mitchell.com/posts/writing-rpgs-1/</link>
      <pubDate>Wed, 11 Sep 2019 05:22:18 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/writing-rpgs-1/</guid>
      <description>&lt;p&gt;::: note&#xA;&lt;strong&gt;Changed 2023-04-03:&lt;/strong&gt; Added headers, fixed links.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Changed 2024-11-20:&lt;/strong&gt; Fixed links.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In two previous posts&#xA;(&lt;a href=&#34;../quick-update-20190902/&#34;&gt;1&lt;/a&gt;)&#xA;(&lt;a href=&#34;../addendum-20190908/&#34;&gt;2&lt;/a&gt;)&#xA;I talked about trying to write custom RPGs.&#xA;To summarize, here&amp;rsquo;s my working list of projects:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;Astral&lt;/em&gt;,&#xA;an RPG about adventuring in the Astral Plane&#xA;usable standalone or with with any other RPG.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;The Elf Game&lt;/em&gt;,&#xA;D&amp;amp;D if it revolved around Elves.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;Paranormality&lt;/em&gt;,&#xA;rules for paranormal powers in a default modern-ish setting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Is the Best Magic System None At All?</title>
      <link>https://frank-mitchell.com/posts/best-magic-system/</link>
      <pubDate>Wed, 11 Sep 2019 00:16:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/best-magic-system/</guid>
      <description>&lt;p&gt;::: note&#xA;UPDATED (2024-06-20): Extract this essay from another article.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;On page 18 of &lt;em&gt;The Pendragon Campaign&lt;/em&gt;, 1st ed. &lt;a href=&#34;https://www.chaosium.com/the-pendragon-campaign-pdf/&#34;&gt;(link)&lt;/a&gt;,&#xA;Greg Stafford writes:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Pendragon&lt;/strong&gt;&lt;/em&gt; has no magic system.&#xA;All magic is within the hands of the gamemaster,&#xA;and is used to imitate traditional effects&#xA;rather than to make comic-book flash-bang nonsense spells.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At the time I read that I was in the first year of college.&#xA;I thought to myself something like, &lt;em&gt;Wait, I can do that?&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic in RuneQuest and Its Descendants</title>
      <link>https://frank-mitchell.com/rpg/magic-in-d100/</link>
      <pubDate>Wed, 11 Sep 2019 00:16:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/magic-in-d100/</guid>
      <description>&lt;p&gt;::: summary&#xA;This was originally an appendix to&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/d100-magic/&#34;&gt;Magic in D100 Games&lt;/a&gt;&#xA;It&amp;rsquo;s a useful enough reference, though,&#xA;that I decided to make it its own independent article.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;UPDATED 2023-05-26 to update status of OpenQuest.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;RuneQuest&lt;/em&gt;&amp;rsquo;s multiple versions and derivatives have had multiple,&#xA;incompatible magic systems,&#xA;sometimes with identical names.&#xA;Below are the highlights.&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-magic-systems&#34;&gt;Major Magic Systems&lt;/h2&gt;&#xA;&lt;p&gt;These systems were used or adapted in multiple products.&lt;/p&gt;&#xA;&lt;h3 id=&#34;battle--common--spirit-magic-aka-sorcery-but-not-that-one&#34;&gt;Battle / Common / Spirit Magic, a.k.a. Sorcery But Not That One&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;RuneQuest&lt;/em&gt; 2nd ed. a.k.a. &lt;a href=&#34;https://www.chaosium.com/runequest-classic-pdf/&#34;&gt;RQ2&lt;/a&gt; introduced Battle Magic,&#xA;a low-powered set of spells that burned Magic Points&#xA;to give advantages in battle.&#xA;&lt;em&gt;RuneQuest&lt;/em&gt; 3rd ed. a.k.a. RQ3 renamed it Spirit Magic&#xA;and added some spells.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes on a Magic System for d100 Games</title>
      <link>https://frank-mitchell.com/posts/d100-magic/</link>
      <pubDate>Wed, 11 Sep 2019 00:16:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/d100-magic/</guid>
      <description>&lt;p&gt;::: note&#xA;UPDATED (2019-09-13):&#xA;added paragraph on &lt;em&gt;King Arthur Pendragon&lt;/em&gt; history,&#xA;replaced DriveThruRPG links with Chaosium equivalents,&#xA;trimmed bibliography,&#xA;fixed formatting.&lt;/p&gt;&#xA;&lt;p&gt;UPDATED (2020-03-28):&#xA;Appendices moved to &lt;a href=&#34;https://frank-mitchell.com/rpg/magic-in-d100/&#34;&gt;separate article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;UPDATED (2024-06-20):&#xA;Essay on &lt;em&gt;King Arthur Pendragon&lt;/em&gt; moved to&#xA;&lt;a href=&#34;../best-magic-system/&#34;&gt;separate article&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;UPDATED (2024-11-20):&#xA;Changed product links.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../addendum-20190908/&#34;&gt;Earlier&lt;/a&gt; I mentioned wantng to write&#xA;a d100 &lt;del&gt;heartbreaker&lt;/del&gt; system with better approaches to lots of things.&lt;/p&gt;&#xA;&lt;p&gt;One of my sticking points has always been magic systems.&#xA;As I mentioned last time&#xA;it&amp;rsquo;s easy to bolt other rules onto the side of the Chaosium d100 system&amp;rsquo;s core.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Are Drow Dark?</title>
      <link>https://frank-mitchell.com/posts/why-are-drow-dark/</link>
      <pubDate>Mon, 09 Sep 2019 04:02:57 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/why-are-drow-dark/</guid>
      <description>&lt;h2 id=&#34;dark-elves-in-gygaxian-dd&#34;&gt;Dark Elves in Gygaxian D&amp;amp;D&lt;/h2&gt;&#xA;&lt;p&gt;The Drow or Dark Elves as originally envisioned by Gary Gygax &lt;em&gt;et al.&lt;/em&gt;&#xA;have dark skins, despite living underground,&#xA;and are (almost) Always Chaotic Evil.&#xA;Humanoids with dark, sallow, or unnaturally colored skin being morally corrupt&#xA;is a trope that goes back to Tolkien,&#xA;even further to H. P. Lovecraft,&#xA;and ultimately back to white people trying to justify enslaving Africans.&#xA;For that reason I hate this trope with a fiery passion.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Game Fanatic&#39;s Log, Addendum 2019-09-08</title>
      <link>https://frank-mitchell.com/posts/addendum-20190908/</link>
      <pubDate>Sun, 08 Sep 2019 06:16:02 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/addendum-20190908/</guid>
      <description>&lt;p&gt;After a couple of days&amp;rsquo; thought,&#xA;I&amp;rsquo;ve changed my list of prospective homebrew RPGs&#xA;from &lt;a href=&#34;../quick-update-20190902/&#34;&gt;last time&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Astral&lt;/li&gt;&#xA;&lt;li&gt;The Elf Game&lt;/li&gt;&#xA;&lt;li&gt;Paranormality&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Troika!&lt;/em&gt; Redo&lt;/li&gt;&#xA;&lt;li&gt;Zeta World&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Third System&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Quest World&amp;rdquo; (&lt;strong&gt;new&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;astral&#34;&gt;Astral&lt;/h3&gt;&#xA;&lt;p&gt;The basic premise remains the same: &amp;ldquo;PCs explore the Astral Plane.&amp;rdquo;&#xA;Likewise, I&amp;rsquo;m still wrestling with my biggest obstacle:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;this is an &amp;ldquo;embeddable&amp;rdquo; game,&#xA;i.e. someone playing some other RPG can Scheherezade into [Astral]&#xA;to represent their main characters.&#xA;[&amp;hellip;]&#xA;mechanics should be simple enough that anyone can grok them immediately&#xA;[&amp;hellip;]&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick(?) Update 2019-09-02</title>
      <link>https://frank-mitchell.com/posts/quick-update-20190902/</link>
      <pubDate>Mon, 02 Sep 2019 21:40:39 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/quick-update-20190902/</guid>
      <description>&lt;p&gt;Four posts I&amp;rsquo;ve been working on for weeks are still marked as &lt;strong&gt;draft&lt;/strong&gt;s.&#xA;This weekend I also started a post on RPG design that keeps shifting and growing.&#xA;For the sake of posting &lt;em&gt;something&lt;/em&gt;, here&amp;rsquo;s a quick update for both my readers (if I have that many).&lt;/p&gt;&#xA;&lt;p&gt;Three posts in Limbo are attempted followups to the&#xA;&lt;a href=&#34;../all-dwarves-reconsidered/&#34;&gt;dwarf&lt;/a&gt; and &lt;a href=&#34;../giant-steps/&#34;&gt;giant&lt;/a&gt; ones,&#xA;namely less stereotypical elves, dark elves, and other humanoids.&#xA;In the fourth I pontificate on an article on computer memory management&#xA;(Degenbaev, Lippautz, and Payer, &amp;ldquo;Garbage Collection as a Joint Venture&amp;rdquo;,&#xA;&lt;em&gt;Communications of the ACM&lt;/em&gt;, June 2019).&#xA;Riveting stuff, right?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Progress Report 2</title>
      <link>https://frank-mitchell.com/posts/progress-report-2/</link>
      <pubDate>Mon, 03 Jun 2019 20:15:46 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/progress-report-2/</guid>
      <description>&lt;p&gt;My coding projects progress in fits and starts.&#xA;For now I&amp;rsquo;ve suspended work on ELTN and turned my attention to Json Pull Parser.&lt;/p&gt;&#xA;&lt;h3 id=&#34;json-pull-parser&#34;&gt;JSON Pull Parser&lt;/h3&gt;&#xA;&lt;p&gt;Unbeknownst to me, Java already has a JSON standard: &lt;a href=&#34;https://projects.eclipse.org/projects/ee4j.jsonp&#34;&gt;JSONP&lt;/a&gt;.&#xA;Its focus, however, seems to be enterprise application servers.&#xA;The top-level &lt;code&gt;javax.json&lt;/code&gt; package mostly revolves around trees of &lt;code&gt;JsonValue&lt;/code&gt; objects;&#xA;&lt;code&gt;javax.json.stream&lt;/code&gt; resembles a bare bones version of my pull parser.&#xA;My intent was a small library with minimal footprint, yet with enough conveniences to use it as a primary API.&#xA;For example, JSONP reports a key within a JSON Object &lt;em&gt;once&lt;/em&gt; when encountered;&#xA;my JSONPP saves the name until it finishes parsing the corresponding &amp;ldquo;value&amp;rdquo;, which might itself be an Object or Array.&#xA;(Although I might provide an option to turn that off to reduce overhead.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Youtube Vids</title>
      <link>https://frank-mitchell.com/posts/random-youtube-vids/</link>
      <pubDate>Fri, 17 May 2019 20:44:06 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/random-youtube-vids/</guid>
      <description>&lt;h4 id=&#34;music-from-the-first-captain-marvel-trailer&#34;&gt;Music from the first &lt;em&gt;Captain Marvel&lt;/em&gt; trailer&lt;/h4&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/v0GkclkJjXM&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;and from the second trailer &amp;hellip;&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/fWF1fXbCfHA&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;h4 id=&#34;brie-larson-pushing-a-5000-lb-jeep&#34;&gt;Brie Larson pushing a 5,000 lb. Jeep&lt;/h4&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/V8-kLIyp3jY&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;h4 id=&#34;john-bercow-remixed&#34;&gt;John Bercow, remixed&lt;/h4&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/BJcpajX7EdU&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;h4 id=&#34;carol-ferris-is-suuuuper-clingy-in-dc-super-hero-girls-short-picturedaze&#34;&gt;Carol Ferris is &lt;em&gt;suuuuper&lt;/em&gt; clingy in DC Super Hero Girls short &amp;ldquo;#PictureDaze&amp;rdquo;&lt;/h4&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/GCFtLxlmksk&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;For reference, an excerpt from her previous appearance in &amp;ldquo;#HateTriangle&amp;rdquo;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Giant Steps</title>
      <link>https://frank-mitchell.com/posts/giant-steps/</link>
      <pubDate>Fri, 10 May 2019 21:37:28 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/giant-steps/</guid>
      <description>&lt;p&gt;From &lt;a href=&#34;../all-dwarves-reconsidered/&#34;&gt;dwarves&lt;/a&gt; to giants &amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;In role-playing games, giants seem kind of &amp;hellip; uninspiring.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;D&amp;amp;D giants top out at 20 feet or so.&#xA;In miniatures-based combat giants usually take up four or more squares (or three or more hexes);&#xA;their longer reach means they can attack characters one or two spaces away.&#xA;Otherwise they move, attack, and take damage like other figures.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Some versions of &lt;em&gt;RuneQuest&lt;/em&gt; allow larger giants, but damage done and HP scale linearly with the giant&amp;rsquo;s height.&#xA;On one forum I commented that Glorantha giants must be made of aerogel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>All Dwarves Reconsidered</title>
      <link>https://frank-mitchell.com/posts/all-dwarves-reconsidered/</link>
      <pubDate>Sun, 28 Apr 2019 06:26:59 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/all-dwarves-reconsidered/</guid>
      <description>&lt;p&gt;Most fantasy role-playing games stick close to Tolkien&amp;rsquo;s portrayal of elves, dwarves, halflings, and orcs.&#xA;While various FRPs have embellished elves, halflings, and orcs in one way or another, &lt;a href=&#34;https://tvtropes.org/pmwiki/pmwiki.php/Main/OurDwarvesAreAllTheSame&#34;&gt;all dwarves are basically the same&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Myth and literature provide a wider range of portrayals.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In Viking myth, from which Tolkien drew his version, four dwarves hold up the sky.&#xA;They fell half-giants and demigods, build divine weapons like Mjolnir, and brew the &lt;a href=&#34;https://en.wikipedia.org/wiki/Mead_of_poetry&#34;&gt;Mead of Poetry&lt;/a&gt;.&#xA;Original sources used the terms dwarfs (&lt;em&gt;dvergar&lt;/em&gt;) and dark elves (&lt;em&gt;svartalfar&lt;/em&gt;) interchangeably, and the lines between dwarfs, elves, trolls, and spirits of the dead are &lt;a href=&#34;https://norse-mythology.org/gods-and-creatures/dwarves/&#34;&gt;often blurred&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Captain Marvel Second Viewing</title>
      <link>https://frank-mitchell.com/posts/captain-marvel-second-viewing/</link>
      <pubDate>Wed, 17 Apr 2019 10:54:45 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/captain-marvel-second-viewing/</guid>
      <description>&lt;p&gt;(&lt;strong&gt;Note:&lt;/strong&gt; I&amp;rsquo;ll keep this as spoiler-free as possible.&#xA;As I personally don&amp;rsquo;t care about spoilers, though &amp;ndash;&#xA;I call it the Rosebud Theory of Surprise Endings &amp;ndash;&#xA;I may inadvertently let something slip.&#xA;&lt;em&gt;Caveat lector.&lt;/em&gt;)&lt;/p&gt;&#xA;&lt;p&gt;Yesterday I saw &lt;em&gt;Captain Marvel&lt;/em&gt; for a second time.&#xA;This movie rewards a second viewing.&lt;/p&gt;&#xA;&lt;p&gt;Granted, my first viewing at the local &lt;a href=&#34;https://drafthouse.com/dfw/theater/richardson&#34;&gt;Alamo Drafthouse&lt;/a&gt; had some distractions.&#xA;The waitperson took my order when I was sitting in the wrong seat.&#xA;(Off by one.  Typical programmer error.)&#xA;Somehow it got confused with the order of the guy who &lt;em&gt;actually&lt;/em&gt; had a ticket for that seat, and neither of us got our order until halfway through the movie.&#xA;That, the waiter&amp;rsquo;s apology, and the &lt;em&gt;manager&amp;rsquo;s&lt;/em&gt; apology kinda distracted me.&#xA;On the plus side, they comped both our meals.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unwanted Software Thoughts Syndrome</title>
      <link>https://frank-mitchell.com/posts/unwanted-software-thoughts-syndrome/</link>
      <pubDate>Sat, 13 Apr 2019 06:26:14 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/unwanted-software-thoughts-syndrome/</guid>
      <description>&lt;p&gt;Working on &lt;a href=&#34;../progress-on-eltn/&#34;&gt;ELTN&lt;/a&gt; opened a floodgate of backburnered projects I was going to work on in my copious free time.&#xA;A few have begun to haunt me again.&#xA;In order of likelihood, they are:&lt;/p&gt;&#xA;&lt;h2 id=&#34;luaenv&#34;&gt;Lua Version Manager a.k.a. Lua-Env (name not final)&lt;/h2&gt;&#xA;&lt;p&gt;Even though &lt;a href=&#34;http://www.lua.org&#34;&gt;Lua&lt;/a&gt; was intended as an embedded language,&#xA;its standalone interpreter makes testing modules much easier.&#xA;However, testing against multiple versions of Lua isn&amp;rsquo;t exactly straightforward.&#xA;&lt;a href=&#34;https://luarocks.org/&#34;&gt;luarocks&lt;/a&gt;, a module manager similar to Ruby Gems, hard-codes the path to Lua not only in config files but the &lt;code&gt;luarocks&lt;/code&gt; script itself.&#xA;Worse, Lua&amp;rsquo;s module loader assumes Lua is installed in &lt;code&gt;/usr/local&lt;/code&gt; on Unix systems.&#xA;Users can override the search path in the standlone interpreter by setting an environment variable, and within the interpreter one can change &lt;code&gt;package.path&lt;/code&gt; and &lt;code&gt;package.cpath&lt;/code&gt;.&#xA;It might be simpler, though, to change those defaults to the directory in which Lua is installed &amp;ndash; found once in &lt;em&gt;luaconfig.h&lt;/em&gt; &amp;ndash; and then compile the interpreter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DC Super Hero Girls Rebooted</title>
      <link>https://frank-mitchell.com/posts/dc-super-hero-girls-rebooted/</link>
      <pubDate>Tue, 09 Apr 2019 09:49:06 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/dc-super-hero-girls-rebooted/</guid>
      <description>&lt;p&gt;New obsession: the Cartoon Network TV version of &lt;em&gt;DC Super Hero Girls&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Promo:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/LzhzULFgrjU&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;strong&gt;Scene from the excellent pilot, &lt;a href=&#34;https://www.cartoonnetwork.com/video/dc-super-hero-girls/episodes/&#34;&gt;&amp;quot;#SweetJustice&amp;quot;&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/qG4S-RF6pXo&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;strong&gt;Scene from the most recent episode, &amp;ldquo;#MeetTheCheetah&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/VskiAHINPEk&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;See?  Much better than the previous YouTube series.&#xA;(From what I could tell, the YT series existed to sell dolls to pre-teen girls.)&lt;/p&gt;&#xA;&lt;p&gt;Sadly my new obsession has severral flaws:&lt;/p&gt;</description>
    </item>
    <item>
      <title>What, me update?</title>
      <link>https://frank-mitchell.com/posts/what-me-update/</link>
      <pubDate>Thu, 28 Mar 2019 15:36:40 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/what-me-update/</guid>
      <description>&lt;p&gt;So I wrote a week&amp;rsquo;s worth of posts and haven&amp;rsquo;t uploaded any of them.&#xA;My bad.&lt;/p&gt;&#xA;&lt;p&gt;As explained previously, I write posts on my computer(s) in&#xA;&lt;a href=&#34;https://daringfireball.net/projects/markdown/syntax&#34;&gt;Markdown&lt;/a&gt;,&#xA;generate all the Website files using &lt;a href=&#34;http://gohugo.io&#34;&gt;Hugo&lt;/a&gt;,&#xA;zip them up,&#xA;upload the archive to my hosting provider using their Web tool,&#xA;&lt;em&gt;unzip&lt;/em&gt; them (overwriting existing files),&#xA;then check that everything looks OK.&lt;/p&gt;&#xA;&lt;p&gt;Ideally I should automate all this:&#xA;a script would check my &lt;a href=&#34;http://subversion.apache.org&#34;&gt;Subversion&lt;/a&gt; repository&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; for any updates,&#xA;run &lt;code&gt;hugo&lt;/code&gt; to generate new site files,&#xA;zip them up (or, hey, just the ones that changed),&#xA;&lt;code&gt;sftp&lt;/code&gt; them up to my hosting provider,&#xA;&lt;em&gt;unzip&lt;/em&gt; them,&#xA;then alert me somehow so I can double check.&#xA;All I have to do is:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Progress on ELTN</title>
      <link>https://frank-mitchell.com/posts/progress-on-eltn/</link>
      <pubDate>Tue, 26 Mar 2019 22:19:10 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/progress-on-eltn/</guid>
      <description>&lt;p&gt;In an &lt;a href=&#34;../gplus-roundup-1/&#34;&gt;earlier post&lt;/a&gt; I introduced ELTN, the&#xA;Extended &lt;a href=&#34;http://www.lua.org/&#34;&gt;Lua&lt;/a&gt; Table Notation.&lt;/p&gt;&#xA;&lt;p&gt;Well, I decided to try writing the thing.&#xA;In Lua.&#xA;Which seems pointless except for the &lt;a href=&#34;http://json.org/&#34;&gt;JSON&lt;/a&gt; parsers in&#xA;JavaScript.&#xA;I chose Lua since:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;It&amp;rsquo;s more function-oriented (&amp;ldquo;functional&amp;rdquo;) than object-oriented, and&#xA;I haven&amp;rsquo;t worked with function-oriented languages since college.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The syntax is simple but a little unfamiliar.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The interpreter however, was faster than Ruby or Python several years ago.&#xA;(Since then Ruby began using a virtual machine and Python started&#xA;experimenting with Just In Time compiling, so that may not be true anymore.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>G&#43; Roundup 2: We Have To Talk About Brexit</title>
      <link>https://frank-mitchell.com/posts/gplus-roundup-2/</link>
      <pubDate>Fri, 22 Mar 2019 18:12:27 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/gplus-roundup-2/</guid>
      <description>&lt;p&gt;OK, we don&amp;rsquo;t &lt;strong&gt;have&lt;/strong&gt; to talk about Brexit.&#xA;But I&amp;rsquo;m going to, so keep reading.&#xA;Or don&amp;rsquo;t.&#xA;I&amp;rsquo;m not your mom.&lt;/p&gt;&#xA;&lt;p&gt;For those who&amp;rsquo;ve been without Internet or cable for the last three years,&#xA;here&amp;rsquo;s a summary of Brexit, up until March 6, 2019.&lt;/p&gt;&#xA;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/gDxBN1y5C8o&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;Since then it&amp;rsquo;s gotten weirder.&#xA;&lt;a href=&#34;https://tldrnews.co.uk/&#34;&gt;TLDR News&lt;/a&gt; has the latest, but to tl;dr TLDR:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Parliament voted down May&amp;rsquo;s deal &lt;em&gt;again&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The Speaker of the House of Commons&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; ruled she can&amp;rsquo;t present it a third time&#xA;unless it&amp;rsquo;s &amp;ldquo;substantially&amp;rdquo; different.&lt;/p&gt;</description>
    </item>
    <item>
      <title>G&#43; Roundup 1: Links about Software and Such</title>
      <link>https://frank-mitchell.com/posts/gplus-roundup-1/</link>
      <pubDate>Fri, 22 Mar 2019 09:27:25 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/gplus-roundup-1/</guid>
      <description>&lt;p&gt;G+ will disappear at the beginning of April.&#xA;(Much like the British economy.)&#xA;Despite its impending doom, I&amp;rsquo;ve been posting images and links, because it&amp;rsquo;s easy.&#xA;As stated previously, I have an archive of (most of) my G+ posts but reposting them all will be a non-trivial amount of work.&#xA;Some of these one-offs don&amp;rsquo;t merit oblivion, though.&#xA;So this is the first in an irregular series of repost &amp;hellip; posts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Agents of A.X.E.</title>
      <link>https://frank-mitchell.com/posts/agents-of-axe/</link>
      <pubDate>Fri, 08 Feb 2019 01:09:37 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/agents-of-axe/</guid>
      <description>&lt;p&gt;&lt;em&gt;Since Marvel Comics has S.H.I.E.L.D., S.W.O.R.D., S.P.E.A.R., A.R.M.O.R., and briefly H.A.M.M.E.R., I decided to come up with my own secret agency with a melee combat acronym.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The origins of the Applied Xenoscience Executive are, to put it mildly, murky.&#xA;In World War II, a memo from the S.O.E. with Winston Churchill&amp;rsquo;s signature proposed an &lt;em&gt;Allied&lt;/em&gt; Xenoscience Executive.&#xA;No copy of this memo appears in Churchill&amp;rsquo;s papers, and no other documents from World War II mention such an agency.&#xA;The memo itself is a master class in doubletalk and obfuscation.&#xA;Depending on the reader&amp;rsquo;s background and beliefs, one could believe A.X.E. was&#xA;a cryptography group that discovered occult-sounding nonsense was a clever code for practical weapons projects,&#xA;a disinformation campaign to encourage Nazi pseudoscience over science,&#xA;or&#xA;a weapons project involving newly discovered physical principles&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>In Defense of Cosmic Horror</title>
      <link>https://frank-mitchell.com/posts/on-cosmic-horror/</link>
      <pubDate>Thu, 07 Feb 2019 14:32:27 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/on-cosmic-horror/</guid>
      <description>&lt;h3 id=&#34;for-the-prosecution&#34;&gt;For the Prosecution&lt;/h3&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a lot to dislike about the Cthulhu Mythos:&lt;/p&gt;&#xA;&lt;h4 id=&#34;lovecraft-was-racist&#34;&gt;Lovecraft Was Racist&lt;/h4&gt;&#xA;&lt;p&gt;H. P. Lovecraft, credited with inventing cosmic horror. was a neurotic racist xenophobe.&#xA;His racism was sometimes blatant like the name of the cat in &amp;ldquo;Rats In The Walls&amp;rdquo;, and sometimes implicit like the recurring theme of &amp;ldquo;degenerate&amp;rdquo; races, often darker skinned.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;Imitators occasionally adopted these tropes along with the creatures that embodied them: ghouls, Deep Ones, the &amp;ldquo;Black Goat of the Woods With a Thousand Young&amp;rdquo;, probably others I&amp;rsquo;m forgetting.&#xA;His stories and those of his imitators are worse for it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Barbarians of Lemuria Playtest</title>
      <link>https://frank-mitchell.com/posts/barbarians-of-lemuria-playtest/</link>
      <pubDate>Wed, 30 Jan 2019 11:56:49 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/barbarians-of-lemuria-playtest/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;../about-barbarians-of-lemuria/&#34;&gt;two &lt;em&gt;Barbarians of Lemuria&lt;/em&gt; adventures I ran&lt;/a&gt; provided me with information on how readily my current group would accept the system, how easily &lt;em&gt;I&lt;/em&gt; could handle the system, and inevitably my failings as a GM.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-plains-of-death&#34;&gt;&amp;ldquo;The Plains of Death&amp;rdquo;&lt;/h3&gt;&#xA;&lt;p&gt;This was one of the short adventures in the back of the core book.&lt;/p&gt;&#xA;&lt;p&gt;In this adventure, a shady merchant hires the PCs to protect his carts on the long journey from Oomis.&#xA;Sooner or later the PCs realize that a Blue Giant riding an elephon (Lemurian mammoth) is pursuing the merchant.&#xA;In our playtest, one of the PCs approached the giant to hear his side.&#xA;According to the giant, the merchant stole one of his tribe&amp;rsquo;s idols.&#xA;After the players discussed the ethics and professional consequences of the situation at length, the PCs opted to step aside and let the Giant take his revenge, with maybe a little help.&#xA;The giant asked them to escort him and the idol back to his tribe;&#xA;in return, &lt;em&gt;he&amp;rsquo;d&lt;/em&gt; escort them wherever they were going next and give them whatever help he could.&#xA;(Plundering the merchant&amp;rsquo;s other wares made a nice bonus.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>About Barbarians of Lemuria</title>
      <link>https://frank-mitchell.com/posts/about-barbarians-of-lemuria/</link>
      <pubDate>Wed, 23 Jan 2019 01:41:25 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/about-barbarians-of-lemuria/</guid>
      <description>&lt;p&gt;The past two weekends (Jan 12 and Jan 19) I ran &lt;em&gt;Barbarians of Lemuria: Mythic Edition&lt;/em&gt;.&#xA;In an upcoming post I&amp;rsquo;ll describe lessons learned and future plans.&#xA;In this post, however, I&amp;rsquo;ll give a brief overview of the system.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Barbarians of Lemuria&lt;/em&gt; (BoL) has been around for at least a decade.&#xA;Despite three editions &amp;ndash; the original &amp;ldquo;free&amp;rdquo; edition, Legendary, and Mythic &amp;ndash; the basics haven&amp;rsquo;t changed.&#xA;Below I&amp;rsquo;ll describe the system as briefly as I can (so not very) and conclude with why on the whole I like it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Troika Playtest</title>
      <link>https://frank-mitchell.com/posts/troika-playtest/</link>
      <pubDate>Mon, 07 Jan 2019 11:01:57 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/troika-playtest/</guid>
      <description>&lt;p&gt;A little over a week ago I ran a one-shot &lt;em&gt;&lt;a href=&#34;https://www.drivethrurpg.com/product/199604/Troika--Free-Artless-Edition&#34;&gt;Troika!&lt;/a&gt;&lt;/em&gt; game for two of my regular Numenera group.&lt;/p&gt;&#xA;&lt;h3 id=&#34;recap&#34;&gt;Recap&lt;/h3&gt;&#xA;&lt;p&gt;A Red Priest and a Vengeful Child read (and stole) a posting on the Adventurer&amp;rsquo;s Guild bulletin board.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;After winding their way through the goblin tunnels they found their would-be employer: a wealthy goblin who needed &lt;del&gt;expendables&lt;/del&gt; adventurers to explore the other side of a mirror portal.&#xA;They emerged through a mirror in a curio shop on what they would eventually discover was called Sabaziopolis.&#xA;Customers in the curio shop ran screaming into the streets shouting for the &amp;ldquo;Sparthexes&amp;rdquo;.&#xA;The Red Priest took the curio shop owner as a traditional hostage.&#xA;A few minutes later, two Sparthexes arrived: armored and fusil&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;-armed guards whose full-face helms made them mute except when they played pre-recorded discs containing &amp;ldquo;the word of Sabazios&amp;rdquo;.&#xA;A firefight ensued, the traditional hostage died as did one Sparthex, and our pair ran into the street.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RPG Design Diary 1</title>
      <link>https://frank-mitchell.com/posts/rpg-design-diary-1/</link>
      <pubDate>Tue, 18 Dec 2018 11:16:51 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/rpg-design-diary-1/</guid>
      <description>&lt;p&gt;Over the years(?) I&amp;rsquo;ve babbled about writing my own RPG rules and settings.&#xA;I&amp;rsquo;ve done some small amount of work lately, so here&amp;rsquo;s where they stand:&lt;/p&gt;&#xA;&lt;h2 id=&#34;astral&#34;&gt;Astral&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Premise:&lt;/strong&gt; Travel in the Astral Plane, perhaps between adventures under other&#xA;rules.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been slowly poking at this thing.&#xA;So far I know that I know the basic mechanic will be 2d6 vs. a GM-determined&#xA;target number and that players will roll (nearly?) all dice.&#xA;Everything else seems to be up in the air?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Space Ship Habitat</title>
      <link>https://frank-mitchell.com/posts/space-ship-habitat/</link>
      <pubDate>Tue, 18 Dec 2018 09:43:47 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/space-ship-habitat/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve written about this before and I&amp;rsquo;ll say it again: fore-and-aft spaceship design is silly.&#xA;By which I mean the common assumption that a space-going vessel is laid out like a sea-going boat:&#xA;horizontal decks,&#xA;a bridge in &amp;ldquo;front&amp;rdquo;,&#xA;engines in &amp;ldquo;back&amp;rdquo;,&#xA;and some kind of gravity operating at right angles to the direction of motion.&lt;/p&gt;&#xA;&lt;p&gt;The Space Shuttle looked like that because it was a &lt;em&gt;shuttle&lt;/em&gt; between Earth&amp;rsquo;s gravity well and orbit.&#xA;TV and movie space opera get a pass because they&amp;rsquo;re shooting on Earth.  A few movies tried to get it right:&#xA;&lt;em&gt;2001&lt;/em&gt; strove mightily to simulate near-future space travel with 1960s practical effects,&#xA;and &lt;em&gt;The Black Hole&lt;/em&gt; despite its other problems &lt;em&gt;started&lt;/em&gt; with its cast on wires floating around their tiny ship.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#39;The Only RPG Book I Need&#39;</title>
      <link>https://frank-mitchell.com/posts/only-rpg-i-need/</link>
      <pubDate>Tue, 11 Dec 2018 05:16:26 -0600</pubDate>
      <guid>https://frank-mitchell.com/posts/only-rpg-i-need/</guid>
      <description>&lt;p&gt;Somewhere I read that an old-school Dungeon Master &amp;ndash; Arneson maybe? &amp;ndash; carried only Allston&amp;rsquo;s &lt;em&gt;D&amp;amp;D Rules Cyclopedia&lt;/em&gt;.&#xA;(Presumably he also had dice and notes on whatever he was running.&#xA;But maybe not.)&#xA;He said it was the only book he ever needed.&lt;/p&gt;&#xA;&lt;p&gt;Maybe some people have found their One True RPG.&#xA;Most likely it&amp;rsquo;s some edition of D&amp;amp;D.&#xA;Not me, though.&#xA;I&amp;rsquo;ve found some that have come close: &lt;em&gt;The Fantasy Trip&lt;/em&gt;,&#xA;&lt;em&gt;Traveller&lt;/em&gt;,&#xA;&lt;em&gt;RuneQuest&lt;/em&gt; and its descendants,&#xA;GURPS,&#xA;Fate, PDQ, Open D6, Gumshoe,&#xA;Cypher System.&#xA;Each fell short in some respect.&#xA;TFT characters were too simple,&#xA;&lt;em&gt;Traveller&lt;/em&gt; characters were too random,&#xA;and GURPS characters were too complex.&#xA;The D100 lineage &amp;ndash; &lt;em&gt;RuneQuest&lt;/em&gt;, &lt;em&gt;Call of Cthulhu&lt;/em&gt;, and so on &amp;ndash; looked &amp;ldquo;just right&amp;rdquo;: only slightly complex character generation, easy to run at the table, easily customized for genre&#xA;&amp;hellip; but seemingly simple percentile skill values needed on-the-fly math adjustments when making adjustments for task difficulty.&#xA;(Other people can do arithmetic flawlessly in their heads; I can&amp;rsquo;t.)&#xA;Systems without fixed attributes like Fate, &lt;em&gt;HeroQuest&lt;/em&gt; (the Moon Design one), and some versions of D6 &lt;em&gt;look&lt;/em&gt; simpler, but everyone has to agree on what all the terms mean, which leads to building a common vocabulary of &amp;ldquo;freeform&amp;rdquo; abilities.&#xA;Gumshoe works for investigative scenarios, and that&amp;rsquo;s about it.&#xA;Cypher System looked most promising, but it assumes heroic if not street-level superheroic characters.&#xA;Plus all the player-facing class-and-level trappings are kind of off-putting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Too Many Thoughts</title>
      <link>https://frank-mitchell.com/posts/too-many-thoughts/</link>
      <pubDate>Tue, 16 Oct 2018 04:39:22 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/too-many-thoughts/</guid>
      <description>&lt;p&gt;Speaking of tabletop RPGs and way too many ideas &amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;For some reason I&amp;rsquo;m obsessed with &lt;a href=&#34;https://www.drivethrurpg.com/product/199604/Troika--Free-Artless-Edition&#34;&gt;&lt;em&gt;Troika!&lt;/em&gt;&lt;/a&gt;,&#xA;which someone described as &amp;ldquo;hipster Planescape&amp;rdquo;.&#xA;Maybe it&amp;rsquo;s because the &lt;em&gt;Fighting Fantasy&lt;/em&gt;-derived rules are dead simple.&#xA;Maybe because the text drops tantalizing hints about a bizarre setting it never actually describes.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;Maybe because to date the only publisher that&amp;rsquo;s paid me real money for something I wrote is Melsonian Arts Council.&lt;/p&gt;&#xA;&lt;p&gt;In any case Saturday morning I knew what my &amp;ldquo;pilot&amp;rdquo; for a &lt;em&gt;Troika!&lt;/em&gt; campaign would be.&#xA;A lot of recent influences dropped into place:&lt;/p&gt;</description>
    </item>
    <item>
      <title>So Much G&#43; ...</title>
      <link>https://frank-mitchell.com/posts/so-much-gplus/</link>
      <pubDate>Tue, 16 Oct 2018 04:24:44 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/so-much-gplus/</guid>
      <description>&lt;p&gt;Sunday night I went through a download of my G+ posts.&lt;/p&gt;&#xA;&lt;p&gt;Hoo boy.&lt;/p&gt;&#xA;&lt;p&gt;The past couple of years I&amp;rsquo;ve been posting a &lt;em&gt;lot&lt;/em&gt;.&#xA;Even screening out &amp;ldquo;hey lookit this&amp;rdquo; links and political moaning, I still found 200+ posts that might be worth republishing&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&#xA;Many of them are about things I planned to do but haven&amp;rsquo;t (so far).&#xA;So right now I&amp;rsquo;m considering a few options:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Do some Ruby-fu to turn HTML into Markdown and then do cleanup by hand.&#xA;Which means also figuring out how &lt;code&gt;hugo&lt;/code&gt; handles posts with images.&#xA;Mostly I created text, but in a few the image was vital.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Livejournal Live</title>
      <link>https://frank-mitchell.com/posts/livejournal-live/</link>
      <pubDate>Sun, 14 Oct 2018 01:33:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/livejournal-live/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve copied all the &amp;ldquo;interesting&amp;rdquo; posts from my old LiveJournal.&#xA;Next on the list:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google+,&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.penandpapergames.com/forums/blog.php/222&#34;&gt;Pen and Paper Games&lt;/a&gt;,&lt;/li&gt;&#xA;&lt;li&gt;old &lt;a href=&#34;https://basicroleplaying.org&#34;&gt;BRP Central&lt;/a&gt; posts maybe?&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Elf System Basic Rules, 3d6 Version (Pre Alpha)</title>
      <link>https://frank-mitchell.com/rpg/game-designs/elf-game-3d6-pre-alpha/</link>
      <pubDate>Sat, 13 Oct 2018 16:58:59 -0500</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/elf-game-3d6-pre-alpha/</guid>
      <description>&lt;p&gt;::: note&#xA;This was the core engine for the&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/rpg-design-diary-1/#the-elf-game&#34;&gt;&amp;ldquo;Elf Game&amp;rdquo;&lt;/a&gt;&#xA;I keep threatening to write.&#xA;I passed this document around my gaming group in 2018&#xA;and won some praise for the document.&#xA;(They were less sanguine about its intended use.)&#xA;Except for a little cleanup, I&amp;rsquo;ve left the text alone.&#xA;Maybe someone can do something with it?&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;The “Elf System” is a set of lightweight rules for table-top role&#xA;playing games. It vaguely resembles The World’s Most Popular Fantasy&#xA;Role-Playing Game and its many, many successors. All players but one&#xA;takes on the role of protagonists (a.k.a. “player characters” or PCs)&#xA;in a collaborative story. That last player takes on the role of&#xA;Game Master&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; or GM to portray all the antagonists and incidental&#xA;characters, called non-player characters or NPCs. The GM also devises&#xA;situations that the protagonists find themselves in. For more about&#xA;this type of game, see&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Role-playing_game&#34;&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Elf System Basic Rules (Pre-Alpha)</title>
      <link>https://frank-mitchell.com/rpg/game-designs/elf-game-pre-alpha/</link>
      <pubDate>Sat, 13 Oct 2018 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/elf-game-pre-alpha/</guid>
      <description>&lt;p&gt;::: note&#xA;This was the core engine for the&#xA;&lt;a href=&#34;https://frank-mitchell.com/posts/rpg-design-diary-1/#the-elf-game&#34;&gt;&amp;ldquo;Elf Game&amp;rdquo;&lt;/a&gt;&#xA;I keep threatening to write.&#xA;I passed this document around my gaming group in 2018&#xA;and won some praise for the document.&#xA;(They were less sanguine about its intended use.)&#xA;Except for a little cleanup, I&amp;rsquo;ve left the text alone.&#xA;Maybe someone can do something with it?&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;The &amp;ldquo;Elf System&amp;rdquo; is a set of lightweight rules for table-top role playing games.&#xA;It vaguely resembles The World&amp;rsquo;s Most Popular Fantasy Role-Playing Game and its many, many successors.&#xA;All players but one takes on the role of protagonists (a.k.a. &amp;ldquo;player characters&amp;rdquo; or PCs) in a collaborative story.&#xA;That last player takes on the role of Game Master&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; or GM to portray all the antagonists and incidental characters, called non-player characters or NPCs.&#xA;The GM also devises situations that the protagonists find themselves in.&#xA;For more about this type of game, see&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Role-playing_game&#34;&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Negative Waves</title>
      <link>https://frank-mitchell.com/posts/negative-waves/</link>
      <pubDate>Wed, 10 Oct 2018 17:30:56 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/negative-waves/</guid>
      <description>&lt;p&gt;(Originally posted on G+.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Here I am, spreading these negative waves &amp;hellip;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Reading all these farewells to G+, I can&amp;rsquo;t help but think of something my&#xA;father said, well maybe once or twice: &amp;ldquo;You get what you pay for.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Cold comfort, I know.&lt;/p&gt;&#xA;&lt;p&gt;In 2004 I bought a domain of my own and I&amp;rsquo;ve been paying $60 a year for&#xA;Web hosting.&#xA;So far I&amp;rsquo;ve done relatively little with it.&#xA;Definitely not $60 a year worth.&#xA;Part of that is that building something like Blogspot or LiveJournal is&#xA;hard.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Here We Are</title>
      <link>https://frank-mitchell.com/posts/here-we-are/</link>
      <pubDate>Tue, 09 Oct 2018 01:19:44 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/here-we-are/</guid>
      <description>&lt;p&gt;In November of 2004 I bought the domain &lt;a href=&#34;http://frank-mitchell.com&#34;&gt;http://frank-mitchell.com&lt;/a&gt;.&#xA;Then some stuff happened.&lt;/p&gt;&#xA;&lt;p&gt;In January of this year (2018) I resolved to start blogging on this site, for reals this time.&#xA;In October of this year (2018) we learned that G+ would soon be no more.&#xA;And today I finally use this site for its original purpose.&#xA;Or at least that&amp;rsquo;s the plan.&lt;/p&gt;&#xA;&lt;p&gt;The blog you&amp;rsquo;re reading now is all static pages generated by&#xA;&lt;a href=&#34;http://gohugo.io&#34;&gt;Hugo&lt;/a&gt;.&#xA;I&amp;rsquo;d considered &lt;a href=&#34;http://jekyllrb.com&#34;&gt;Jekyll&lt;/a&gt;&#xA;but people kept telling me &amp;ldquo;Hugo is fast&amp;rdquo;.&#xA;That&amp;rsquo;s kinda all they said really.&#xA;After some research I found out it&amp;rsquo;s modeled after Jekyll.&#xA;And it&amp;rsquo;s a single compiled executable written in Go, not interpreted Ruby code.&#xA;(Except I read and write Ruby, and don&amp;rsquo;t know Go.&#xA;So, theoretically at least, if Jekyll doesn&amp;rsquo;t do what I want I can patch it.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Black Panther Redux</title>
      <link>https://frank-mitchell.com/posts/black-panther-redux/</link>
      <pubDate>Tue, 03 Apr 2018 16:00:43 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/black-panther-redux/</guid>
      <description>&lt;p&gt;Another G+ article rescued from the archives.&#xA;Save for some markdown it&amp;rsquo;s what I wrote back in 2018.&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original Post&lt;/h2&gt;&#xA;&lt;p&gt;So I&amp;rsquo;ve seen &lt;em&gt;Black Panther&lt;/em&gt; twice in the theaters within a span of a few&#xA;weeks. I also watched &lt;em&gt;Civil War&lt;/em&gt; and &lt;em&gt;Guardians of the Galaxy 2&lt;/em&gt; on Netflix&#xA;a day or so ago.&lt;/p&gt;&#xA;&lt;p&gt;And I want to see &lt;em&gt;Black Panther&lt;/em&gt; again. I have the orchestral soundtrack on&#xA;now.&lt;/p&gt;&#xA;&lt;p&gt;Granted, CW and GotG2 were pretty good movies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Non-Review of Black Panther</title>
      <link>https://frank-mitchell.com/posts/black-panther-non-review/</link>
      <pubDate>Mon, 12 Mar 2018 17:37:48 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/black-panther-non-review/</guid>
      <description>&lt;p&gt;This is a G+ post I pulled out of the archives for no reason.&#xA;Except for removing an Obama joke&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; and some markdown, this is what I&#xA;wrote back in 2018.&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-article&#34;&gt;Original Article&lt;/h2&gt;&#xA;&lt;p&gt;Last night I left my hermitage to see Black Panther. In my opinion it&amp;rsquo;s most&#xA;&lt;strong&gt;definitely&lt;/strong&gt; not over-hyped: a special effects superhero extravaganza like&#xA;we&amp;rsquo;d expect from Marvel with excellent performances, an ethical dilemma at its&#xA;heart, and a resonance with Africa&amp;rsquo;s tragic history. I can&amp;rsquo;t really speak to&#xA;that last part; many others &lt;strong&gt;can&lt;/strong&gt; and &lt;strong&gt;have&lt;/strong&gt;, far more eloquently than I.&#xA;But the part I can relate to, as a suburban white guy, is the tale of a modern&#xA;superhero.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Apparatus of Talamira, A History</title>
      <link>https://frank-mitchell.com/posts/apparatus-of-talamira-history/</link>
      <pubDate>Thu, 28 Dec 2017 16:03:00 -0500</pubDate>
      <guid>https://frank-mitchell.com/posts/apparatus-of-talamira-history/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;Originally posted on G+.&#xA;Except for editing two posts together and assorted Markdown,&#xA;this is what I posted in 2017.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;(For those who read &lt;a href=&#34;../apparatus-of-talamira/&#34;&gt;The Apparatus of Talamira&lt;/a&gt;,&#xA;I&amp;rsquo;ve decided to bore you.)&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-first-apparatus&#34;&gt;The First Apparatus&lt;/h2&gt;&#xA;&lt;h3 id=&#34;i-discovery&#34;&gt;I. Discovery&lt;/h3&gt;&#xA;&lt;p&gt;The &amp;ldquo;Talamira&amp;rdquo; in the Apparatus&amp;rsquo;s common name was not its inventor. To&#xA;this day, no one knows who created any of the Apparatuses, and no wizard has&#xA;managed to duplicate it.&lt;/p&gt;&#xA;&lt;p&gt;At the time she discovered the First Apparatus, Talamira of Riverbend in Tannis&#xA;Valley was but a journeyman (journeyperson?) sorceress. She discovered the&#xA;Apparatus while on an expedition to explore ruins of the Tekmal-Ku, i.e.&#xA;tomb-robbing. Most of what we know about the Apparatus comes from her detailed&#xA;notes.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Items: The Trinkets of Talamira</title>
      <link>https://frank-mitchell.com/posts/trinkets-of-talamira/</link>
      <pubDate>Wed, 05 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/trinkets-of-talamira/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;Originally posted on G+.&#xA;Except for markup and a little editing, this is exactly as I posted it&#xA;in 2017.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;During the enchantress Talamira&amp;rsquo;s centuries as a disembodied floating head, she&#xA;discovered her less &amp;ldquo;encumbered&amp;rdquo; form posed several problems, most notably&#xA;luggage. To this end she developed an enchantment that allowed her to carry&#xA;those necessities and luxuries she simply could not do without.&lt;/p&gt;&#xA;&lt;p&gt;Many critics dismiss this enchantment as wholly unnecessary when Bags of&#xA;Holding are, comparatively, plentiful. From comments attributed to&#xA;Talamira&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; the two main drawbacks of a Bag of Holding, from her&#xA;perspective, are a) that they do not function in certain planes of existence&#xA;which she was known to frequent, and b) a floating head carrying a Bag of&#xA;Holding, or any bag for that matter, resembles a penanggalan far too closely&#xA;for comfort.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Astral RPG Essential Rules v0.1</title>
      <link>https://frank-mitchell.com/rpg/game-designs/astral-rpg-essence-0-1/</link>
      <pubDate>Tue, 23 May 2017 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/game-designs/astral-rpg-essence-0-1/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This is an early, skeletal version of the &#34;Astral RPG&#34; I&#39;ve described&#xA;&lt;a href=&#34;https://frank-mitchell.com/tags/astral&#34;&gt;in blog entries&lt;/a&gt;.&#xA;It was also an attempt to &#xA;&lt;a href=&#34;https://200wordrpg.github.io/&#34;&gt;define an RPG in 200 words&lt;/a&gt;,&#xA;which failed.&#xA;I&#39;m leaving it here for historical interest.&#xA;I &lt;b&gt;hope&lt;/b&gt; I can define a version that&#39;s both simpler and more versatile.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;&gt;&lt;img alt=&#34;Creative Commons License&#34; style=&#34;border-width:0&#34; src=&#34;https://i.creativecommons.org/l/by-sa/4.0/88x31.png&#34; /&gt;&lt;/a&gt;&lt;br /&gt;This work is licensed under a &lt;a rel=&#34;license&#34; href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;&gt;Creative Commons Attribution-ShareAlike 4.0 International License&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Change Log:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2017-05-22: Initial version.&lt;/li&gt;&#xA;&lt;li&gt;2017-05-23: Simplified mutual attacks, clarified DEFEND action, added Task rules.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;strong&gt;PREMISE:&lt;/strong&gt; You project your spirit into the Astral Plane and start exploring.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Coins of Ys</title>
      <link>https://frank-mitchell.com/writing/coins-of-ys-pub/</link>
      <pubDate>Tue, 01 Nov 2016 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/writing/coins-of-ys-pub/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;Inspired by &#xA;&lt;a href=&#34;http://www.kickstarter.com/projects/campaigncoins/electrum-campaign-coins&#34;&gt;Electrum Campaign Coins&lt;/a&gt;&#xA;(available&#xA;&lt;a href=&#34;https://campaigncoins.com/collections/classic-fantasy/finish_black-nickel&#34;&gt;here&lt;/a&gt;).&#xA;&lt;/div&gt;&#xA;&lt;p&gt;On many Earths, they tell a story about &lt;a href=&#34;http://en.wikipedia.org/wiki/Ys&#34;&gt;Kêr-Ys&lt;/a&gt;, drowned by the thoughtless action of Dahut, the wicked daughter of good king Gradlon.  On other Earths, they tell this one.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;One evening, centuries after Ys grew into an economic empire, the Chancellor of the Exchequer of Ys received a summons to the throne room.  Dread made him almost plead illness.  At this hour, the summons could only have come from one source.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Magic Item: The Apparatus of Talamira</title>
      <link>https://frank-mitchell.com/posts/apparatus-of-talamira/</link>
      <pubDate>Thu, 01 Sep 2016 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/apparatus-of-talamira/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;Originally posted on G+.&#xA;Except for some Markdown, this is exactly what I posted in 2016.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;When James Raggi held a contest for Lamentations-worthy magic items, I came up&#xA;with an idea I rejected as too useful and insufficiently cursed.  Yesterday I&#xA;wrote it up anyway.  Here it is.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;the-apparatus-of-talamira&#34;&gt;The Apparatus of Talamira&lt;/h1&gt;&#xA;&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;To date, scholars know of only three Apparatuses.&lt;/p&gt;&#xA;&lt;p&gt;All three at first appeared to be a wooden square about two feet (60 cm) on a&#xA;side, with a circular hole less than 1 foot (30 cm) cut in the center.  What&#xA;appears to be a metal sheet fills the hole from side to side.  A padded&#xA;&amp;ldquo;leather&amp;rdquo; rim lines the interior of the hole on each face.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minimalist d20</title>
      <link>https://frank-mitchell.com/posts/minimalist-d20/</link>
      <pubDate>Tue, 27 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/minimalist-d20/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;,&#xA;under the title &#34;Searchers of the Unknown + True20 + Numenera = ???&#34;.&#xA;Only formatting and links have been changed.&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;searchers-of-the-unknown--true20--numenera--&#34;&gt;Searchers of the Unknown + True20 + Numenera = ???&lt;/h2&gt;&#xA;&lt;p&gt;Lately I&amp;rsquo;ve found myself fascinated by minimalist D&amp;amp;D rules like&#xA;&lt;a href=&#34;https://searchersoftheunknown.wordpress.com/wp-content/uploads/2014/12/searchers-of-the-unknown.pdf&#34; title=&#34;PDF&#34;&gt;&amp;ldquo;Searchers of the Unknown&amp;rdquo;&lt;/a&gt; and its worthy successor &lt;a href=&#34;https://searchersoftheunknown.wordpress.com/wp-content/uploads/2015/01/1974-style-rulese280942014-02-01.pdf&#34; title=&#34;PDF&#34;&gt;&amp;ldquo;1974 Style&amp;rdquo;&lt;/a&gt;.&#xA;I also like the d20-only philosophy of &lt;em&gt;True20&lt;/em&gt; and&#xA;&lt;em&gt;Numenera&lt;/em&gt;&amp;rsquo;s Only Players Roll principle.&#xA;All three have collided in my brain to create the following incomplete rules:&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Questionable Review of The Strange Bestiary</title>
      <link>https://frank-mitchell.com/posts/strange-bestiary-non-review/</link>
      <pubDate>Mon, 24 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/strange-bestiary-non-review/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on &#xA;&lt;a href=&#34;http://www.penandpapergames.com/&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;. &#xA;Only some markup (markdown) has changed. &#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;These ambiguities, redundancies and deficiencies remind us&#xA;of those which doctor Franz Kuhn attributes to a certain&#xA;Chinese encyclopaedia entitled &amp;lsquo;Celestial Empire of Benevolent Knowledge&amp;rsquo;.&#xA;In its remote pages it is written that the animals are divided into:&#xA;(a) belonging to the emperor,&#xA;(b) embalmed,&#xA;(c) tame,&#xA;(d) sucking pigs,&#xA;(e) sirens,&#xA;(f) fabulous,&#xA;(g) stray dogs,&#xA;(h) included in the present classification,&#xA;(i) frenzied,&#xA;(j) innumerable,&#xA;(k) drawn with a very fine camelhair brush,&#xA;(l) et cetera,&#xA;(m) having just broken the water pitcher,&#xA;(n) that from a long way off look like flies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Space Opera Recursion for The Strange</title>
      <link>https://frank-mitchell.com/posts/space-opera-for-the-strange/</link>
      <pubDate>Fri, 14 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/space-opera-for-the-strange/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;.&#xA;Only some markup (markdown) has changed.&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original Post&lt;/h2&gt;&#xA;&lt;p&gt;Recently I&amp;rsquo;ve been playing &lt;em&gt;The Strange&lt;/em&gt; with a reasonably stable group.&#xA;Yesterday I had an idea for a space-opera style recursion&#xA;(parallel world for the rest of the gaming world),&#xA;and having nobody else to tell I&amp;rsquo;m telling you. Don&amp;rsquo;t you feel special?&lt;/p&gt;&#xA;&lt;p&gt;The problem with wedging an entire galaxy, or even a solar system,&#xA;into one of the Strange&amp;rsquo;s recursions&#xA;is that recursions are supposed to be small, much smaller than Earth,&#xA;so that the GM isn&amp;rsquo;t madly mapping planets for every adventure.&#xA;The two best defined &amp;ndash; and canonically largest &amp;ndash; recursions are Ardeyn&#xA;(about 2000 miles across)&#xA;and Ruk (about 200 miles across, or so the map appears).&#xA;Most are only as big as a city; some are as small as a house, or a room.&#xA;The only real planet is our Earth;&#xA;everything else is a fragment in the vast dark matter cyberspace of the Strange.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Idea: Sixgun and Planet</title>
      <link>https://frank-mitchell.com/posts/sixgun-and-planet/</link>
      <pubDate>Mon, 26 May 2014 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/sixgun-and-planet/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;.&#xA;Only some markup (markdown) has changed.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;For those of you who don&amp;rsquo;t know what&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Sword_and_planet&#34;&gt;&amp;ldquo;sword and planet&amp;rdquo;&lt;/a&gt;&#xA;is, it&amp;rsquo;s science fiction in which our lone Earthling hero is thrown onto&#xA;an alien planet with generally low technology and must fight to survive.&#xA;Examples include Edgar Rice Burroughs&amp;rsquo;s Barsoom series&#xA;(&lt;em&gt;A Princess on Mars&lt;/em&gt;, etc.) and some of Jack Vance&amp;rsquo;s work&#xA;(particularly the Planet of Adventure series).&#xA;The excuse for swords being the weapon of choice varies from decaying cultures&#xA;to alien oppressors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rules as Interfaces Redux</title>
      <link>https://frank-mitchell.com/posts/rules-as-interfaces-redux/</link>
      <pubDate>Thu, 09 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/rules-as-interfaces-redux/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on &#xA;&lt;a href=&#34;http://www.penandpapergames.com/&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;. &#xA;Only some markup (markdown) has changed. &#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../rules-as-interfaces/&#34;&gt;Yesterday&lt;/a&gt;&#xA;I babbled about viewing RPG rules as an interface between players and&#xA;GMs, similar to a GUI or API in computer programs.  In this view, the game&#xA;rules, like GUIs or APIs, are most useful when they avoid unnecessary clutter&#xA;and complexity.&lt;/p&gt;&#xA;&lt;p&gt;One other interesting consequence of this analogy is that, like interfaces,&#xA;rules have to be &lt;em&gt;stable&lt;/em&gt; in order to be useful.  This applies both to official&#xA;versions of the rules and house rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rules as Interfaces</title>
      <link>https://frank-mitchell.com/posts/rules-as-interfaces/</link>
      <pubDate>Wed, 08 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/rules-as-interfaces/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on &#xA;&lt;a href=&#34;http://www.penandpapergames.com/&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;. &#xA;Only some markup (markdown) has changed. &#xA;&lt;/div&gt;&#xA;&lt;p&gt;Reading &lt;em&gt;Numernera&lt;/em&gt; and a few other rule sets reminded me of a (not terribly&#xA;original) idea that popped in my head ages ago: rules are the interface between&#xA;players and GM.&lt;/p&gt;&#xA;&lt;p&gt;By &amp;ldquo;interface&amp;rdquo; I&amp;rsquo;m thinking of programming interfaces in object-oriented&#xA;design, but the analogy works just as well with Advanced Programming Interfaces&#xA;(APIs) in applications like Excel, Graphical User Interfaces (GUIs) in any&#xA;window-keyboard-mouse desktop application, a Web site&amp;rsquo;s interface of forms and&#xA;links, or the protocols between remote processes (like HTTP between a Web&#xA;browser and a Web server). In every case the interface defines a set of&#xA;concepts or abstractions, operations one can perform on those abstractions, and&#xA;discrete elements that make up an abstraction or operation. In object-oriented&#xA;programming one strives for the smallest or narrowest interface that expresses&#xA;all relevant operations and information; graphic design follows a similar&#xA;principle which strives for the greatest amount of information relevant for a&#xA;task without cluttering the display with useless information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Numenera Stream-of-Consciousness Quasi-Review</title>
      <link>https://frank-mitchell.com/posts/numenera-quasi-review/</link>
      <pubDate>Sat, 28 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/numenera-quasi-review/</guid>
      <description>&lt;p&gt;::: note&#xA;This post originally appeared on&#xA;&lt;a href=&#34;https://www.penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;.&#xA;Only some markup (markdown) has changed.&#xA;:::&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original Post&lt;/h2&gt;&#xA;&lt;p&gt;So far I&amp;rsquo;ve read the &lt;em&gt;Player&amp;rsquo;s Guide&lt;/em&gt; and skipped through the core book.&#xA;I&amp;rsquo;m not sure whether I like &lt;em&gt;Numenera&lt;/em&gt; or not.&lt;/p&gt;&#xA;&lt;p&gt;The central mechanics are pretty cool:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The system requires only three dice: a d20, a d6, and a d100.&#xA;(OK, a d100 is two dice unless one is brave/stupid enough to use a&#xA;Zocchihedron.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alignment: Heresy and a Reformation</title>
      <link>https://frank-mitchell.com/posts/alignment-heresy/</link>
      <pubDate>Thu, 17 May 2012 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/alignment-heresy/</guid>
      <description>&lt;p&gt;::: note&#xA;This essay originally appeared in multiple parts on&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;.&#xA;Only some markup (markdown) has changed.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;D&amp;amp;D&amp;rsquo;s various alignment systems provoke a lot of discussion, partly because&#xA;they have multiple interpretations and multiple purposes.  To quickly review&#xA;changes across editions:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Original D&amp;amp;D&lt;/strong&gt; and &lt;strong&gt;Basic D&amp;amp;D&lt;/strong&gt;&#xA;had only three alignments: Law, Neutrality, and Chaos.&#xA;(One version of Basic, I forget which, added &amp;ldquo;Good&amp;rdquo; and &amp;ldquo;Evil&amp;rdquo;.  Not&#xA;Lawful Good or Chaotic Good, just &amp;ldquo;Good&amp;rdquo;.)  Essentially it represented which&#xA;&amp;ldquo;side&amp;rdquo; a character was on in an epic struggle, and spells could detect&#xA;alignment.  If I recall correctly, in OD&amp;amp;D Clerics could only be Lawful or&#xA;Chaotic, and Chaotic clerics had &amp;ldquo;evil&amp;rdquo; replacements for a Lawful cleric&amp;rsquo;s&#xA;&amp;ldquo;good&amp;rdquo; spells.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Traveler and an Emperor</title>
      <link>https://frank-mitchell.com/posts/a-traveler-and-an-emperor/</link>
      <pubDate>Thu, 19 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/a-traveler-and-an-emperor/</guid>
      <description>&lt;p&gt;(Originally posted on LiveJournal)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;[Based on two different copyrighted properties. Kudos to those who know the other one.]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the most powerful city in the greatest intergalactic empire mankind had yet known, The Temple loomed over all.&lt;/p&gt;&#xA;&lt;p&gt;From orbit the Old City resembled a human figure with outstretched arms, with a nimbus of urban sprawl. The Temple roof, atop glass-steel shoulders, bore an orichalcum image of a square-jawed face smiling beatifically. Anyone in the Empire would recognize that face from countless icons and medallions: the God-Emperor of the Empire of Man.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Chromatic Kingdoms</title>
      <link>https://frank-mitchell.com/posts/the-chromatic-kingdoms/</link>
      <pubDate>Thu, 19 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/the-chromatic-kingdoms/</guid>
      <description>&lt;p&gt;(Originally posted on LiveJournal)&lt;/p&gt;&#xA;&lt;p&gt;A tweet on my feed reminded me of a science fantasy location I dreamed up ages ago. It&amp;rsquo;s inspired by post-apocalyptic fiction, medieval romance, Greek classics, colors from &lt;em&gt;Magic: The Gathering&lt;/em&gt;, simplified Mendelian genetics and racism.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-chromatic-kingdoms&#34;&gt;The Chromatic Kingdoms&lt;/h2&gt;&#xA;&lt;p&gt;The so-called &amp;ldquo;Chromatic Kingdoms&amp;rdquo; are two opposed kingdoms of several cities each, seemingly in a continuous race war with an implicit war of the sexes.&lt;/p&gt;&#xA;&lt;h3 id=&#34;races-of-the-white-kingdom&#34;&gt;Races of the White Kingdom&lt;/h3&gt;&#xA;&lt;h4 id=&#34;kyrioi-whites&#34;&gt;&lt;em&gt;Kyrioi&lt;/em&gt; (Whites)&lt;/h4&gt;&#xA;&lt;p&gt;A fair-skinned and fair-haired people, males are tall and athletic, while females are small, frail, almost dwarfish. Reflecting this disparity, Kyrioi have a patriarchal, hierarchical society: men rule the women, and the king has absolute power over his dukes, who rule iron-fisted over their barons, who dominate their knights, who dominate free craftsmen and merchants. All Kyrioi, even women technically, have absolute authority over Khloroi serfs/slaves (see below) and a minority of enslaved Kobolds (see below), who do all the work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My House, My Rules</title>
      <link>https://frank-mitchell.com/posts/my-house-my-rules/</link>
      <pubDate>Thu, 19 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/my-house-my-rules/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;A version of post originally appeared on&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;.&#xA;Changes apart from formatting have been noted.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;em&gt;Some random house-ruling thoughts.&lt;/em&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;fate&#34;&gt;FATE&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Dispense with fixed stunts.&#xA;Instead, I&amp;rsquo;d adopt a house rule (which I can&amp;rsquo;t find a reference for now)&#xA;that allowed players to &amp;ldquo;lock&amp;rdquo; an aspect to behave like a stunt:&#xA;substitute one skill for another, grant a &amp;ldquo;permanent&amp;rdquo; circumstance bonus,&#xA;a new function for an existing skill, etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New time-waster</title>
      <link>https://frank-mitchell.com/posts/new-time-waster/</link>
      <pubDate>Wed, 28 Dec 2011 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/new-time-waster/</guid>
      <description>&lt;p&gt;(Originally posted on LiveJournal)&lt;/p&gt;&#xA;&lt;p&gt;Somehow I discovered &lt;a href=&#34;https://www.deviantart.com/foxrichards/art/FaceMaker-52755515&#34;&gt;Face-Maker&lt;/a&gt;, a limited but still useful program for making anime-ish character faces. It allows you to save faces as a long numeric code; to save the actual faces requires a screen grab. Here&amp;rsquo;s a few faces I&amp;rsquo;ve worked up and their codes:&lt;/p&gt;&#xA;&lt;p&gt;Me:&lt;/p&gt;&#xA;&lt;p&gt;002007033005001001013015001001001001003004001001100100100100055054088100100100100100100100100100038026020086100100100100000000060100100100100100100100100061100100100100100100100000&lt;/p&gt;&#xA;&lt;p&gt;Ming the Merciless (the politically correct, green-not-yellow version):&lt;/p&gt;&#xA;&lt;p&gt;005004017026001001014001001005001001005001001001079100063100100100100100100100100100091085063100020020020100080060040100100000000100100100100100100100100100100100100100100100100100&lt;/p&gt;&#xA;&lt;p&gt;Yavandir (Warhammer Fantasy, High Elf Thief):&lt;/p&gt;&#xA;&lt;p&gt;005003028009001002007003001001001001002001003001100100100100100100000100100100100100100100100100020020020100080060040100080080060100100100100100100100100100100100100100100100100100&lt;/p&gt;&#xA;&lt;p&gt;Orianna (D&amp;amp;D 4e, Tiefling Warlord):&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Uncounted Worlds</title>
      <link>https://frank-mitchell.com/posts/uncounted-worlds/</link>
      <pubDate>Wed, 28 Sep 2011 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/uncounted-worlds/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This essay originally appeared in multiple parts on&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;.&#xA;Only some markup (markdown) has changed.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is an alternate worlds / time travel idea I might use in the future.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-basic-model&#34;&gt;The Basic Model&lt;/h2&gt;&#xA;&lt;p&gt;The &amp;ldquo;Many Worlds&amp;rdquo; interpretation of quantum mechanics posits that a new&#xA;universe springs into existence to account for all possibilities. The massive&#xA;number of quantum events each second would spawn billions of universes. For all&#xA;practical purposes, there are four categories of alternate timelines:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Constructs in BRP (2011 version)</title>
      <link>https://frank-mitchell.com/rpg/constructs-in-brp-2011/</link>
      <pubDate>Fri, 24 Jun 2011 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/constructs-in-brp-2011/</guid>
      <description>&lt;p&gt;::: summary&#xA;I wrote this article in 2011 for an irregular &lt;a href=&#34;https://www.drivethrurpg.com/en/product/24384/basic-roleplaying&#34;&gt;Basic Roleplaying&lt;/a&gt;&#xA;fanzine that ended before the article could run.&#xA;Except for formatting&#xA;&amp;ndash; the original was an &lt;em&gt;RTF&lt;/em&gt; file &amp;ndash;&#xA;it&amp;rsquo;s exactly as I wrote it back then.&#xA;It&amp;rsquo;s not really playtested, not that organized, and very out of date.&#xA;I present it here mostly for historical interest,&#xA;and in case it sparks ideas in readers.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;From the bronze giant Talos in Greek myth and Rabbi Loew&amp;rsquo;s clay golem&#xA;to Terminators, droids, and Major Kusanagi, speculative fiction abounds&#xA;with animate artificial beings.  That Other Game calls man-made&#xA;creatures &amp;ldquo;constructs&amp;rdquo;, a name as good as any.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Time Travel and Keyboard Cat</title>
      <link>https://frank-mitchell.com/posts/time-travel-and-keyboard-cat/</link>
      <pubDate>Tue, 31 May 2011 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/time-travel-and-keyboard-cat/</guid>
      <description>&lt;p&gt;(Originally posted on LiveJournal)&lt;/p&gt;&#xA;&lt;p&gt;Excuse me while I have a strange interlude:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Lately I&amp;rsquo;ve been thinking of time travel and alternate universes. (Not too&#xA;surprising, since new Doctor Who episodes started this month.) This past week&#xA;I&amp;rsquo;ve bought PDF copies of Pacesetter&amp;rsquo;s RPG Time Master and its supplement&#xA;Timetricks &amp;hellip; as yet unread, just like &lt;em&gt;GURPS Infinite Worlds&lt;/em&gt;,&#xA;&lt;em&gt;C°NTINUUM&lt;/em&gt;,&#xA;&lt;em&gt;Timestream&lt;/em&gt;, &lt;em&gt;Time &amp;amp; Temp&lt;/em&gt;, &lt;em&gt;Timelord&lt;/em&gt; (based on &lt;em&gt;Doctor Who&lt;/em&gt;), BTRC&amp;rsquo;s &lt;em&gt;Time&#xA;Lords&lt;/em&gt;, newly released &lt;em&gt;Microscope RPG&lt;/em&gt; (not time travel per se, but history&#xA;building nonetheless), not to mention a whole bunch of historical settings and&#xA;supplements. I buy games and books like Imelda Marcos bought shoes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Tale of Two Games</title>
      <link>https://frank-mitchell.com/posts/a-tale-of-two-games/</link>
      <pubDate>Sat, 14 May 2011 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/a-tale-of-two-games/</guid>
      <description>&lt;p&gt;(Originally posted on LiveJournal)&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; a thread on &lt;a href=&#34;http://forums.rpg.net/&#34;&gt;RPG.net&lt;/a&gt; concerned playing D&amp;amp;D in a world-spanning &amp;ldquo;anti-magic field&amp;rdquo;; commenters who implied the whole idea was stupid triggered the following gibberish.&lt;/p&gt;&#xA;&lt;p&gt;Imagine a session of D&amp;amp;D with four characters: Brother Julian, a male human cleric, Russ the Slayer, a male human fighter, Morgan Ironwolf, a female human fighter, and Carathel Prestameril, a female elf magic-user. Any resemblance to anyone living or dead is a damn shame. (The last two names come from a classic D&amp;amp;D module and an Elvish name generator.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>In Memoriam - Elisabeth Sladen, 1948-2011</title>
      <link>https://frank-mitchell.com/posts/in-memoriam-elisabeth-sladen/</link>
      <pubDate>Mon, 11 Apr 2011 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/in-memoriam-elisabeth-sladen/</guid>
      <description>&lt;p&gt;(Originally posted on LiveJournal)&lt;/p&gt;&#xA;&lt;p&gt;Elisabeth Sladen, who portrayed Sarah Jane Smith in Doctor Who&amp;rsquo;s old and new series, and in spin-off &lt;em&gt;The Sarah Jane Adventures&lt;/em&gt;, passed away today at 63. The &lt;a href=&#34;https://www.bbc.com/news/entertainment-arts-13137674&#34;&gt;BBC News website&lt;/a&gt;, among others, includes what details there are and testimonials from former co-workers.&lt;/p&gt;&#xA;&lt;p&gt;Like many Americans, I first saw Doctor Who in the Tom Baker years, starting with the 1974 serials. Sarah Jane Smith was his companion in those first two years, and (as I found out later) in the last year of John Pertwee before him. The character, and actress, struck a fine balance between the &amp;ldquo;scream queen&amp;rdquo; stereotype typical of previous companions and the plucky, courageous assistant overdone to various degrees by Leela, Romana, and Rose. She also made overalls look good.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparative Character Generation, Part 6: The Last Roundup</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/part-6/</link>
      <pubDate>Thu, 16 Sep 2010 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/part-6/</guid>
      <description>&lt;p&gt;This, the last installment, will take a look at some other interesting systems,&#xA;detail some possible campaigns, and try to make sense of all this mess.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-story-so-far&#34;&gt;The Story So Far&lt;/h2&gt;&#xA;&lt;p&gt;In the &lt;a href=&#34;../part-1/&#34;&gt;first installment&lt;/a&gt; I considered six&#xA;relatively light-weight, generic, modifiable role-playing systems.&#xA;In the &lt;a href=&#34;../part-2/&#34;&gt;following&lt;/a&gt; &lt;a href=&#34;../part-3/&#34;&gt;installments&lt;/a&gt;,&#xA;I looked at variations of d20.&#xA;In the most recent installments, I &lt;a href=&#34;../part-4/&#34;&gt;finished with d20&lt;/a&gt;,&#xA;and looked at &lt;a href=&#34;../part-4/&#34;&gt;various&lt;/a&gt; &lt;a href=&#34;../part-5/&#34;&gt;others&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Some criteria for consideration include:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;How long it takes to translate a character concept to a valid character?&#xA;How complex is character generation?&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Tellurian Primer</title>
      <link>https://frank-mitchell.com/rpg/tellurian-primer/</link>
      <pubDate>Thu, 11 Feb 2010 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/tellurian-primer/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This is a fantasy RPG setting I wrote in 2010.&#xA;Originally I meant it as an alternative to Lemuria in &#xA;&lt;i&gt;Barbarians of Lemuria&lt;/i&gt;,&#xA;although any other low magic swords-and-sorcery system&#xA;would probably also work.&#xA;This is the same text I first put on the old site,&#xA;but with some formatting tweaks.&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;what-is-telluria&#34;&gt;What is Telluria?&lt;/h2&gt;&#xA;&lt;p&gt;Telluria is the largest continent on the planet of Tellus.  It&amp;rsquo;s the center of&#xA;human civilization, what there is of it.  It&amp;rsquo;s a place where demons stalk&#xA;darkened streets, city-states worship fraudulent patron gods, and the&#xA;wilderness holds wonders and terrors undreamed of.  Here, heroes forever strive&#xA;against overwhelming forces, winning small victories against the darkness;&#xA;here, wise men know that evil may wear a pretty face and a twisted body may&#xA;harbor a pure heart.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparative Character Generation, Part 5: New Year, New Games</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/part-5/</link>
      <pubDate>Tue, 02 Feb 2010 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/part-5/</guid>
      <description>&lt;h2 id=&#34;the-story-so-far&#34;&gt;The Story So Far&lt;/h2&gt;&#xA;&lt;p&gt;So far I have reviewed some &lt;a href=&#34;../part-1/&#34;&gt;lightweight game systems&lt;/a&gt;,&#xA;&lt;a href=&#34;../part-2/&#34;&gt;agonized&lt;/a&gt;&#xA;&lt;a href=&#34;../part-3/&#34;&gt;over d20&lt;/a&gt;,&#xA;and tried &lt;a href=&#34;../part-4/&#34;&gt;random character generation&lt;/a&gt;&#xA;in &lt;em&gt;Traveller&lt;/em&gt;, &lt;em&gt;Warhammer Fantasy Roleplay&lt;/em&gt; 2nd Edition, and &lt;em&gt;Labyrinth Lord&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Summarizing character creation times, our consistent and possibly irrelevant&#xA;metric, we have:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&lt;th&gt;Game&lt;/th&gt;&lt;th&gt;Time (mins)&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&lt;td&gt;PDQ Plain&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;#&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;Terra Incognita (Fudge)&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;######&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;ASCB (Fudge)&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;####&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;FATE 2nd ed&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;#########&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;Call of Cthulhu&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;#####&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;HeroQuest 1st ed&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;####&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;GURPS Lite, 4th Edition&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;#########&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;D&amp;D (Standard)&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;#########&lt;/td&gt;&#xA;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;D&amp;D (Generic)&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;#########&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;True20&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;####&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;Labyrinth Lord&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;###&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;Warhammer 2nd ed&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;######&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;Traveller&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;#########&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;meanwhile-back-at-the-ranch&#34;&gt;Meanwhile, Back at the Ranch&lt;/h2&gt;&#xA;&lt;p&gt;A lot has changed since I began this seemingly unending series:&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Time Lord Problem</title>
      <link>https://frank-mitchell.com/posts/the-time-lord-problem/</link>
      <pubDate>Tue, 02 Feb 2010 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/the-time-lord-problem/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on&#xA;&lt;a href=&#34;http://penandpapergames.com&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;.&#xA;Only some markup (markdown) has changed.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;After watching the Doctor&amp;rsquo;s recent regeneration for the Nth time, I realized&#xA;how to solve a persistent problem in &lt;em&gt;Doctor Who&lt;/em&gt; RPGs:&#xA;Time Lords rock, companions suck.&lt;/p&gt;&#xA;&lt;p&gt;A traditional solution is to make all players Junior Time Lords.&#xA;The &lt;em&gt;Buffy&lt;/em&gt; game gives non-Slayers more Drama Points, and I&amp;rsquo;m sure some&#xA;&lt;em&gt;Doctor Who&lt;/em&gt; game has tried a similar equalizing factor.&#xA;Another suggestion I&amp;rsquo;ve heard is that the Time Lord is an NPC Patron,&#xA;who makes the Companions do all the work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparative Character Generation, Part 4: Let&#39;s Make Some Characters, Already!</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/part-4/</link>
      <pubDate>Wed, 13 May 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/part-4/</guid>
      <description>&lt;p&gt;The title of this series is &amp;ldquo;Comparative Character Generation&amp;rdquo;, and yet the&#xA;past two installments involve me going into Analysis Paralysis over whether to&#xA;run a d20 game or not.  I&amp;rsquo;ve pretty much decided &lt;strong&gt;NOT&lt;/strong&gt;, at this point.&lt;/p&gt;&#xA;&lt;p&gt;However, let me build three characters under the d20 system, just to wrap up.&#xA;Then I&amp;rsquo;d like to explore random character generation in &lt;em&gt;Labyrinth Lord&lt;/em&gt;,&#xA;&lt;em&gt;Warhammer Fantasy Roleplay&lt;/em&gt; (2nd Edition), and Mongoose&amp;rsquo;s &lt;em&gt;Traveller&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Dominion of Man</title>
      <link>https://frank-mitchell.com/rpg/dominion-of-man/</link>
      <pubDate>Wed, 29 Apr 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/dominion-of-man/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;Subtitled &#34;A Campaign World for &lt;i&gt;Traveller&lt;/i&gt; or &lt;i&gt;GURPS Space&lt;/i&gt;,&#xA;this article appeared on the old verson of my site in 2009.&#xA;Save for some formatting tweaks, corrected typos,&#xA;and a table of contents,&#xA;it&#39;s just how I wrote it back then.&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;in-a-nutshell&#34;&gt;In A Nutshell&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Humans populate nearly all of the Known Worlds.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Aliens are extremely rare, and not suitable for player characters.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Computers and robots in the Dominion of Man have very sophisticated behavior,&#xA;but aren&amp;rsquo;t true sophonts/sapients.  True artificial sophonts do exist, but have&#xA;their own society.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparative Character Generation, Part 3: Same Crap, Different Year</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/part-3/</link>
      <pubDate>Sat, 11 Apr 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/part-3/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been close to three years since I started this &amp;ldquo;series&amp;rdquo;&#xA;(see &lt;a href=&#34;../part-1/&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;../part-2/&#34;&gt;here&lt;/a&gt;.&#xA;A lot has happened since then:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;After years of talking, I finally started a BRP campaign &amp;hellip; which has two&#xA;players, and so far two sessions after I announced it in January.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Another edition of D&amp;amp;D has come out, completely unlike 3.5 or any preceding&#xA;edition.  Having played in one short game, I can&amp;rsquo;t say I like it much: too much&#xA;attention to tactical combat, and only a bare-bones set of skills for all&#xA;non-combat activities.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Orclands Session 2: Mar 1</title>
      <link>https://frank-mitchell.com/posts/orclands-2/</link>
      <pubDate>Fri, 10 Apr 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/orclands-2/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on &#xA;&lt;a href=&#34;http://www.penandpapergames.com/&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;. &#xA;Only some markup (markdown) has changed. &#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-story-so-far&#34;&gt;The Story So Far&lt;/h2&gt;&#xA;&lt;h3 id=&#34;the-village-of-red-briar&#34;&gt;The Village of Red Briar&lt;/h3&gt;&#xA;&lt;p&gt;Red Briar resembled an armed camp, thanks to the War Chief, Swift Sword. He&amp;rsquo;s&#xA;convinced of an imminent attack from the Blood Axe tribe, the Over-Sea Folk,&#xA;the now-disappeared Shadow Foot tribe, the Stone Home tribe in the mountains,&#xA;or possibly neighboring Ashen Hand villages. He trust no one &amp;hellip; except Saddle,&#xA;who humored him as long as possible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Orclands Session 1: Feb 15</title>
      <link>https://frank-mitchell.com/posts/orclands-1/</link>
      <pubDate>Fri, 20 Mar 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/orclands-1/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on &#xA;&lt;a href=&#34;http://www.penandpapergames.com/&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;. &#xA;Only some markup (markdown) has changed. &#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-story-so-far&#34;&gt;The Story So Far&lt;/h2&gt;&#xA;&lt;h3 id=&#34;intruders&#34;&gt;Intruders!&lt;/h3&gt;&#xA;&lt;p&gt;All the People of the Ashen Hand have a duty to stand watch at the borders of&#xA;their lands. &lt;strong&gt;Saddle&lt;/strong&gt; the shaman and &lt;strong&gt;Thinks Much&lt;/strong&gt; the scholar, as&#xA;residents of Green Plains Village, spent their mandatory two weeks standing&#xA;watch at a camp near the Swiftwater River, within sight of the Over-Sea-Folk&#xA;settlement on the other side.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Orc Lands: An Introduction</title>
      <link>https://frank-mitchell.com/posts/orclands-0/</link>
      <pubDate>Wed, 25 Feb 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/orclands-0/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;This post originally appeared on &#xA;&lt;a href=&#34;http://www.penandpapergames.com/&#34;&gt;the Pen and Paper Games Forum&lt;/a&gt;. &#xA;Only some markup (markdown) has changed. &#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;em&gt;The Orc Lands&lt;/em&gt; is a BRP-based campaign I&amp;rsquo;m running every other week.&#xA;All the PCs are members of the People &amp;ndash; what humans call &amp;ldquo;orcs&amp;rdquo;.&#xA;They live in a land haunted by spirits and the Forest Folk,&#xA;mysterious beings who guard the deepest forests.&lt;/p&gt;&#xA;&lt;p&gt;In the time of legend, the People built great cities&#xA;and created wondrous devices in what is now the Wasteland.&#xA;Somehow, according to legend, they fell under the sway of the Shining God,&#xA;whose symbol was an eye, and that led to their ruin.&#xA;To this day, the People have many superstitions about eyes;&#xA;they never refer to eyes except in euphemism,&#xA;never make eye contact for more than a second,&#xA;and never draw a representation of an eye.&#xA;(Dots are OK, but blank circles push the edge.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resume</title>
      <link>https://frank-mitchell.com/resume/</link>
      <pubDate>Sun, 08 Feb 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/resume/</guid>
      <description>&lt;p&gt;Richardson, TX, 75080&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:fmitchell238@gmail.com&#34;&gt;fmitchell238@gmail.com&lt;/a&gt;&#xA;|&#xA;[email for phone number]&#xA;|&#xA;&lt;a href=&#34;https://www.linkedin.com/in/frank-mitchell-250481/&#34;&gt;https://www.linkedin.com/in/frank-mitchell-250481/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;profile&#34;&gt;Profile&lt;/h2&gt;&#xA;&lt;p&gt;In every job I have learned new languages and tools in a few weeks.&#xA;I&amp;rsquo;ve evaluated many new technologies;&#xA;some work well, some promise more than they deliver.&#xA;My relentless focus on automated testing, performance measurement, code&#xA;metrics, and process improvement uncovers surprisingly simple solutions to&#xA;hard problems.&#xA;Over my long career I&amp;rsquo;ve mentored junior programmers,&#xA;taught even veteran programmers the virtues of unit testing,&#xA;and learned to winnow important tasks from the chaff of urgent tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resume, Long Version</title>
      <link>https://frank-mitchell.com/resume-long/</link>
      <pubDate>Sun, 08 Feb 2009 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/resume-long/</guid>
      <description>&lt;p&gt;Richardson, TX, 75080&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;mailto:fmitchell238@gmail.com&#34;&gt;fmitchell238@gmail.com&lt;/a&gt;&#xA;|&#xA;[email for phone number]&#xA;|&#xA;&lt;a href=&#34;https://www.linkedin.com/in/frank-mitchell-250481/&#34;&gt;https://www.linkedin.com/in/frank-mitchell-250481/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;experience&#34;&gt;Experience&lt;/h2&gt;&#xA;&lt;h3 id=&#34;senior-programmeranalyst-hotelscom-dallas-tx&#34;&gt;Senior Programmer/Analyst, Hotels.com, Dallas, TX&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;Mar 2007 - Feb 2009&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Implemented architectural improvements to Hotels.com&amp;rsquo;s primary&#xA;e-commerce web application.&#xA;Wrote support services for QA and production infrastructure.&#xA;Evaluated technologies and tools to improve application architecture&#xA;or streamline development process.&#xA;Gave technical presentations on architectural changes.&#xA;Specific tasks include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Wrote a web application that caches results from an Expedia&#xA;development web service, and emulates the booking portion of the&#xA;Expedia web services API. This application allows testers to isolate a&#xA;particular data set with minimal effort, and avoids round-trip traffic&#xA;to Expedia for Hotels.com performance and stress tests.&lt;/li&gt;&#xA;&lt;li&gt;Removed all Java-side EDI calls to AS/400s that once provided&#xA;inventory, but now returned zero or error results. By removing these&#xA;calls, I allowed Operations to decommission a block of AS/400s.&lt;/li&gt;&#xA;&lt;li&gt;Removed long-standing code dependencies on ATG Dynamo, in preparation&#xA;for deploying the Hotels.com and Web Sales Entry applications on&#xA;&lt;strong&gt;Tomcat&lt;/strong&gt; or another J2EE-compliant servlet container. Eliminating&#xA;ATG dependencies set the stage for deploying code tied to&#xA;front-end web applications into independent middle-tier or back-end&#xA;services.&lt;/li&gt;&#xA;&lt;li&gt;Evaluated caching solutions for database and web service query&#xA;results. Candidates were &lt;strong&gt;Terracotta&lt;/strong&gt;, &lt;strong&gt;Ehcache&lt;/strong&gt;, and a home-grown&#xA;solution.&lt;/li&gt;&#xA;&lt;li&gt;Implemented a simple A-B test between the US Hotels.com site and an&#xA;equivalent in Europe.&lt;/li&gt;&#xA;&lt;li&gt;Evaluated Jira as a replacement for a home-grown issue tracking&#xA;system.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;senior-developer-aeroxchange-irving-tx&#34;&gt;Senior Developer, AeroXchange, Irving, TX&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;Aug 2006 - Oct 2006&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>All Right, Who Started the Apocalypse?</title>
      <link>https://frank-mitchell.com/writing/apocalypse/</link>
      <pubDate>Mon, 08 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/writing/apocalypse/</guid>
      <description>&lt;p&gt;Kyzrath scuttled timidly into the chamber.  THEY would commend it,&#xA;surely THEY would commend it, but Kyzrath had survived uncounted&#xA;centuries in the shadows while mortals had ruled the Earth, and THEY&#xA;were far more terrible.  Far more terrible.&lt;/p&gt;&#xA;&lt;p&gt;(The last pair of true eyes were being plucked out of a screaming&#xA;woman&amp;rsquo;s skull at the same time this meeting occurred.  If there had&#xA;been a pair of eyes observing this chamber, they would have noted that&#xA;Kyzrath might have passed for a human, except that its knees bent in&#xA;the wrong direction; the shabby clothes and shapeless broad-brimmed&#xA;hat that it yet wore hung at odd angles, and the glowing yellow eyes,&#xA;all three, swivelled in peculiar ways.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Invaders</title>
      <link>https://frank-mitchell.com/writing/invaders/</link>
      <pubDate>Mon, 08 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/writing/invaders/</guid>
      <description>&lt;p&gt;Duke K&amp;rsquo;thkryli of the Chul Hoch Empire, captain of the interstellar&#xA;dreadnought &lt;em&gt;Swift Retribution&lt;/em&gt;, drifted serenely in his tank,&#xA;tentacles curled under his massive head-body.  Yet the Ztarrian crew&#xA;knew his eyes watched their every move, his vast, cool, unsympathetic&#xA;intellect searching for even the slightest violation of protocol.  Yet&#xA;the crew could do nothing, except their duty: chitinous digits tapped&#xA;crystalline controls, multifaceted eyes scanning sensor readouts for&#xA;the slight anomalies that could indicate enemy activity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparative Character Generation, Part 2: An Overview of d20 Systems</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/part-2/</link>
      <pubDate>Sun, 26 Nov 2006 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/part-2/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;AUTHOR&amp;rsquo;S NOTE (2006): I wrote much of this report in previous months, but&#xA;left huge gaping holes for actual character generation.  I have&#xA;decided to present the &amp;ldquo;fluff&amp;rdquo; text, and defer the &amp;ldquo;crunch&amp;rdquo; to&#xA;my next report.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;../part-1/&#34;&gt;Last time&lt;/a&gt; I considered six relatively&#xA;light-weight, generic, modifiable role-playing systems.  This time&#xA;I&amp;rsquo;ll give an overview of some d20-based systems: &lt;em&gt;Dungeons and&#xA;Dragons&lt;/em&gt;, &lt;em&gt;Iron Heroes&lt;/em&gt; and &lt;em&gt;True20&lt;/em&gt;, plus some PDF-only material I&amp;rsquo;ve&#xA;found on RPGNow or elsewhere on the internet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Story for Amy&#39;s Dad</title>
      <link>https://frank-mitchell.com/posts/the-cat-story/</link>
      <pubDate>Wed, 04 Oct 2006 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/posts/the-cat-story/</guid>
      <description>&lt;p&gt;(Originally posted on LiveJournal)&lt;/p&gt;&#xA;&lt;p&gt;Michael had started to doubt his sanity over the past few months, ever since the stray black cat had calmly walked into his life. First had come the nagging feeling someone was watching him, or trying to talk to him. Then had come the dreams, no nightmares of tentacled horrors and walking dead, of rending claws and twisted parodies of human beings, of giants and rats, and cats, always cats.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gods and Religions in RPGs</title>
      <link>https://frank-mitchell.com/rpg/gods-and-religions/</link>
      <pubDate>Thu, 21 Sep 2006 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/gods-and-religions/</guid>
      <description>&lt;p&gt;(Special thanks to Gary McBride and Ron Pyatt.)&lt;/p&gt;&#xA;&lt;p&gt;::: note&#xA;Apart from some minor Markdown fixes, and some fixed links, this article&#xA;is essentially as I wrote it in 2006&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;After reading Monte Cook&amp;rsquo;s &lt;em&gt;Requiem for a God&lt;/em&gt; I began thinking about&#xA;the nature of gods in role-playing games.  D&amp;amp;D presents a sort of&#xA;polytheism unknown in history: each god acknowledges the existence of&#xA;others, but insists on exclusive worship.  As this &lt;a href=&#34;http://www.rpg.net/columns/kosher/kosher22.phtml&#34; title=&#34;Keeping the Faith&#34;&gt;RPG.net&#xA;article&lt;/a&gt; notes, in polytheistic cultures like Egypt, Greece,&#xA;and the pre-Islamic Middle East, worshippers pray to one or another&#xA;depending on the nature of their request.  Even if a priest dedicates&#xA;himself to one shrine or another, he&amp;rsquo;d might still pray to another&#xA;god, or at least ask his god to intercede with another.  On the other&#xA;hand, religions with one primary god usually regard others as&#xA;subordinates, demons, or empty delusions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Immortal Characters in RPGs</title>
      <link>https://frank-mitchell.com/rpg/immortals/</link>
      <pubDate>Fri, 07 Jul 2006 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/immortals/</guid>
      <description>&lt;p&gt;::: note&#xA;Apart from fixing Markdown and broken links,&#xA;this essay is essentially what I wrote and posted in 2006.&#xA;:::&lt;/p&gt;&#xA;&lt;p&gt;One rainy day I got to thinking about representing an &amp;ldquo;immortal&amp;rdquo;&#xA;character &amp;ndash; hundreds, thousands, or maybe millions of years old &amp;ndash; in&#xA;a role-playing game system.  If the GM needs to create NPCs, or if an&#xA;entire campaign revolves around immortal characters amidst mortals,&#xA;maybe the following ideas would prove useful.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparative Character Generation, Part 1: Generic, Lightweight Systems</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/part-1/</link>
      <pubDate>Fri, 14 Apr 2006 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/part-1/</guid>
      <description>&lt;p&gt;(With corrections and comments by Gary McBride and Ron Pyatt.)&lt;/p&gt;&#xA;&lt;div class=&#34;note&#34;&gt;&#xD;&#xA;Except for broken links and markup, &#xD;&#xA;and some commentary from 2020 in the footnotes,&#xD;&#xA;I&#39;ve left this document as is.&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;For the past few months I&amp;rsquo;ve been thinking (and proclaiming) I&amp;rsquo;m going&#xA;to run my own role-playing game, but I have yet to settle on a system,&#xA;or even a genre.  After some thought, genre is likely to be either&#xA;low-magic heroic fantasy or modern &amp;ldquo;dark fantasy&amp;rdquo;/occult horror, but I&#xA;still need a system for the style of play I settle on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HeroQuest Simple Contest Probabilities of Success</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/hq-prob-table/</link>
      <pubDate>Fri, 14 Apr 2006 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/hq-prob-table/</guid>
      <description>&lt;html&gt;&#xA;    &lt;head&gt;&#xA;       &lt;title&gt;HeroQuest Simple Contest Probabilities of Success&lt;/title&gt;&#xA;       &lt;style&gt;td { text-align: right }&lt;/style&gt;&#xA;    &lt;/head&gt;&#xA;  &lt;body&gt;&#xA;    &lt;h1&gt;&lt;i&gt;HeroQuest&lt;/i&gt; Simple Contest Probabilities of Success&lt;/h1&gt;&#xA;&lt;h2&gt;Quick Probability Guide&lt;/h2&gt;&#xA;    &lt;p&gt;&#xA;       In the absence of mastery levels, there is a relationship&#xA;       between probability of any victory and the difference between &#xA;       Ranks:&#xA;    &lt;p&gt;&#xA;    &lt;table border=&#34;1&#34;&gt;&#xA;&lt;tr&gt;&lt;th&gt; 0&lt;/th&gt;&lt;th&gt; 1&lt;/th&gt;&lt;th&gt; 2&lt;/th&gt;&lt;th&gt; 3&lt;/th&gt;&lt;th&gt; 4&lt;/th&gt;&lt;th&gt; 5&lt;/th&gt;&lt;th&gt; 6&lt;/th&gt;&lt;th&gt; 7&lt;/th&gt;&lt;th&gt; 8&lt;/th&gt;&lt;th&gt; 9&lt;/th&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;47.50%&lt;/td&gt;&lt;td&gt;47.75%&lt;/td&gt;&lt;td&gt;48.25%&lt;/td&gt;&lt;td&gt;49.00%&lt;/td&gt;&lt;td&gt;50.00%&lt;/td&gt;&lt;td&gt;51.25%&lt;/td&gt;&lt;td&gt;52.75%&lt;/td&gt;&lt;td&gt;54.50%&lt;/td&gt;&lt;td&gt;56.50%&lt;/td&gt;&lt;td&gt;58.75%&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;th&gt;10&lt;/th&gt;&lt;th&gt;11&lt;/th&gt;&lt;th&gt;12&lt;/th&gt;&lt;th&gt;13&lt;/th&gt;&lt;th&gt;14&lt;/th&gt;&lt;th&gt;15&lt;/th&gt;&lt;th&gt;16&lt;/th&gt;&lt;th&gt;17&lt;/th&gt;&lt;th&gt;18&lt;/th&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;61.25%&lt;/td&gt;&lt;td&gt;64.00%&lt;/td&gt;&lt;td&gt;67.00%&lt;/td&gt;&lt;td&gt;70.25%&lt;/td&gt;&lt;td&gt;73.75%&lt;/td&gt;&lt;td&gt;77.50%&lt;/td&gt;&lt;td&gt;81.50%&lt;/td&gt;&lt;td&gt;85.75%&lt;/td&gt;&lt;td&gt;90.25%&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;/table&gt;&#xA;  &lt;p&gt;&#xA;    Absent differences in mastery, the probability of ties is equal to &#xA;    &lt;code&gt;(20 + lower-rank - higher-rank) x 0.25%&lt;/code&gt;.&#xA;    For example, between equal ranks, a tie will occur 5% of the time.&#xA;    If the difference is 4 (e.g. 17 and 13), the chance of a tie is 4%.&#xA;  &lt;/p&gt;</description>
    </item>
    <item>
      <title>hq-prob-table.rb</title>
      <link>https://frank-mitchell.com/rpg/comp-char-gen/hq-prob-table-rb/</link>
      <pubDate>Fri, 14 Apr 2006 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/rpg/comp-char-gen/hq-prob-table-rb/</guid>
      <description>&lt;div class=&#34;note&#34;&gt;&#xA;&lt;p&gt;This is really old Ruby code from 2006. I&#39;m sorry.&lt;/p&gt;&#xA;&lt;p&gt;The syntax higlighter screws up at the first &amp;ldquo;here document&amp;rdquo;&#xA;at line 128, but at that point the code just generates HTML.&#xA;I thought about rewriting the code&#xA;to generate terse Markdown instead of paragraphs in HTML&#xA;and/or to replace here documents with literal strings,&#xA;but I think I&amp;rsquo;ll leave it be.&lt;/p&gt;&#xA;&lt;/div&gt; &#xA;&lt;p&gt;&lt;a href=&#34;./hq-prob-table_rb.txt&#34;&gt;Original Text&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;definitions-and-probability-functions&#34;&gt;Definitions and Probability Functions&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#!/usr/bin/env ruby&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;# hq-prob-table.rb: generate a probability table for Issaries&amp;#39;s HeroQuest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                   RPG, and interactively assess probabilities between&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#                   two Ability Ranks.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#408080;font-style:italic&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;CRIT_ROLL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;FUMB_ROLL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;CRITICAL&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;SUCCESS&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;FAILURE&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;FUMBLE&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;DEGREES&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:complete_victory&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:major_victory&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:minor_victory&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;21&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:marginal_victory&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;22&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:tie&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;23&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:marginal_defeat&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;24&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:minor_defeat&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;25&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:major_defeat&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;26&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#19177c&#34;&gt;:complete_defeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;27&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;28&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;29&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;outcome&lt;/span&gt;(rank, roll)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;30&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; roll &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;CRIT_ROLL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;31&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;CRITICAL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;32&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; roll &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;FUMB_ROLL&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;33&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;FUMBLE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;34&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; roll &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;=&lt;/span&gt; rank &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;35&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;SUCCESS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;36&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;37&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;FAILURE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;38&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;39&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;40&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;41&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;degree&lt;/span&gt;(mastery, a, r, rolla, rollr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;42&lt;/span&gt;&lt;span&gt;  diff &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; mastery &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; outcome(a, rolla) &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; outcome(r, rollr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;43&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;44&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;case&lt;/span&gt; diff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;45&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;46&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:complete_victory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;47&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;48&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:major_victory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;49&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;50&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:minor_victory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;51&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;52&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; rolla &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt; rollr &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;53&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:marginal_victory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;54&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; rolla &lt;span style=&#34;color:#666&#34;&gt;==&lt;/span&gt; rollr &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;55&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:tie&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;56&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;57&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#19177c&#34;&gt;:marginal_defeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;58&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;59&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;60&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:minor_defeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;61&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;62&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:major_defeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;63&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;64&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:complete_defeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;65&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;66&lt;/span&gt;&lt;span&gt;    (diff &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;) ? &lt;span style=&#34;color:#19177c&#34;&gt;:complete_victory&lt;/span&gt; : &lt;span style=&#34;color:#19177c&#34;&gt;:complete_defeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;67&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;68&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;69&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;70&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;counts&lt;/span&gt;(mastery, a, r)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;71&lt;/span&gt;&lt;span&gt;  result &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Hash&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;new(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;72&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;rolla&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;73&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;rollr&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;74&lt;/span&gt;&lt;span&gt;      result&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;degree(mastery, a, r, rolla, rollr)&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;75&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;76&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;77&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;78&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;79&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;80&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;total_success&lt;/span&gt;(c)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;81&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;82&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:complete_victory&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;83&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:major_victory&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;84&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:minor_victory&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;85&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#19177c&#34;&gt;:marginal_victory&lt;/span&gt;,&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;inject(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;) { &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;sum, d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; sum &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; c&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;to_f&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;86&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;output-routines&#34;&gt;Output Routines&lt;/h2&gt;&#xA;&lt;h3 id=&#34;parse_rank&#34;&gt;&lt;code&gt;parse_rank&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 89&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;parse_rank&lt;/span&gt;(s)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 90&lt;/span&gt;&lt;span&gt;  match &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b68&#34;&gt;/(\d+)([MmWw])?(\d+)?/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;match(s)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 91&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 92&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;unless&lt;/span&gt; match&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 93&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 94&lt;/span&gt;&lt;span&gt;  a &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; match&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;to_i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 95&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; match&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 96&lt;/span&gt;&lt;span&gt;    m &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; match&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;to_i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 97&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;elsif&lt;/span&gt; match&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 98&lt;/span&gt;&lt;span&gt;    m &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 99&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;100&lt;/span&gt;&lt;span&gt;    m &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;101&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;102&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; a, m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;103&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;rank&#34;&gt;&lt;code&gt;rank&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;105&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;rank&lt;/span&gt;(a, m)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;106&lt;/span&gt;&lt;span&gt;  astr &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; a&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;107&lt;/span&gt;&lt;span&gt;  astr &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; m &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;108&lt;/span&gt;&lt;span&gt;  astr &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; m&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; m &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;109&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;return&lt;/span&gt; astr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;110&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;print_header&#34;&gt;&lt;code&gt;print_header&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;112&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print_header&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;113&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;higher rank&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;lower rank&amp;lt;/th&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;114&lt;/span&gt;&lt;span&gt;&#x9; (&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;th&amp;gt;%s&amp;lt;/th&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;DEGREES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size) &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;115&lt;/span&gt;&lt;span&gt;&#x9; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;116&lt;/span&gt;&lt;span&gt;&#x9; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;(&lt;span style=&#34;color:#800&#34;&gt;DEGREES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;collect { &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; d&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;to_s&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;tr(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;_&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;) }))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;117&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;print_probabilities&#34;&gt;&lt;code&gt;print_probabilities&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;119&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print_probabilities&lt;/span&gt;(m, a, r)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;120&lt;/span&gt;&lt;span&gt;  c &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; counts(m, a, r)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;121&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;122&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;%s&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;%d&amp;lt;/th&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;123&lt;/span&gt;&lt;span&gt;&#x9; (&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;td&amp;gt;%5.2f%%&amp;lt;/td&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;DEGREES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size) &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;124&lt;/span&gt;&lt;span&gt;&#x9; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;125&lt;/span&gt;&lt;span&gt;&#x9; rank(a, m), r, &lt;span style=&#34;color:#666&#34;&gt;*&lt;/span&gt;(&lt;span style=&#34;color:#800&#34;&gt;DEGREES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;collect { &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; c&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;to_f&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt; }))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;126&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;print_probability_page&#34;&gt;&lt;code&gt;print_probability_page&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;128&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print_probability_page&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;129&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;lt;&amp;lt;EOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;130&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;html&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;131&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;head&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;132&lt;/span&gt;&lt;span&gt;       &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;title&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;HeroQuest&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Simple&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Contest&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Probabilities&lt;/span&gt; of &lt;span style=&#34;color:#800&#34;&gt;Success&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/title&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;133&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;       &amp;lt;style&amp;gt;td { text-align: right }&amp;lt;/s&lt;/span&gt;tyle&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;134&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/head&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;135&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;  &amp;lt;body&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;136&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;    &amp;lt;h1&amp;gt;&amp;lt;i&amp;gt;HeroQuest&amp;lt;/i&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Simple&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Contest&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Probabilities&lt;/span&gt; of &lt;span style=&#34;color:#800&#34;&gt;Success&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/h1&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;137&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;EOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;138&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;139&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;  puts &amp;#34;&amp;lt;h2&amp;gt;Quick Probability Guide&amp;lt;/&lt;/span&gt;h2&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;140&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;  print_difference_prob_table&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;141&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;142&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;  puts &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;h2&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;Detailed&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;Probabilities&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/h2&amp;gt;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;143&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;  print_probability_table&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;144&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;  puts &amp;#34;&amp;lt;/&lt;/span&gt;body&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/html&amp;gt;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;145&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;print_difference_prob_table&#34;&gt;&lt;code&gt;print_difference_prob_table&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;147&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print_difference_prob_table&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;148&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;lt;&amp;lt;EOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;149&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;150&lt;/span&gt;&lt;span&gt;       &lt;span style=&#34;color:#800&#34;&gt;In&lt;/span&gt; the absence of mastery levels, there is a relationship&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;151&lt;/span&gt;&lt;span&gt;       between probability of any victory &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; the difference between &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;152&lt;/span&gt;&lt;span&gt;       &lt;span style=&#34;color:#19177c&#34;&gt;Ranks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;153&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;154&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;table border&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;155&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;EOT&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;156&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;tr&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;157&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#666&#34;&gt;9&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;158&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;th&amp;gt;%2d&amp;lt;/th&amp;gt;&amp;#34;&lt;/span&gt;, df)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;159&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;160&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;161&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;tr&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;162&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#666&#34;&gt;9&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;163&lt;/span&gt;&lt;span&gt;    c &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; counts(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; df)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;164&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;td&amp;gt;%5.2f%%&amp;lt;/td&amp;gt;&amp;#34;&lt;/span&gt;, total_success(c))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;165&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;166&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;167&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;tr&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;168&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;10&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;169&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;th&amp;gt;%2d&amp;lt;/th&amp;gt;&amp;#34;&lt;/span&gt;, df)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;170&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;171&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;172&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;tr&amp;gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;173&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;10&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#666&#34;&gt;18&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;df&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;174&lt;/span&gt;&lt;span&gt;    c &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; counts(&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; df)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;175&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;td&amp;gt;%5.2f%%&amp;lt;/td&amp;gt;&amp;#34;&lt;/span&gt;, total_success(c))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;176&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;177&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;178&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/table&amp;gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;179&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;180&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;lt;&amp;lt;EOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;181&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;182&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;Absent&lt;/span&gt; differences &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;in&lt;/span&gt; mastery, the probability of ties is equal to &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;183&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;code&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;(&lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;+&lt;/span&gt; lower&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;rank &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; higher&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;rank) x &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;25&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;%&amp;lt;/code&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;184&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;For&lt;/span&gt; example, between equal ranks, a tie will occur &lt;span style=&#34;color:#666&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;%&lt;/span&gt; of the time&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;185&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;If&lt;/span&gt; the difference is &lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt; (e&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;g&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;17&lt;/span&gt; &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;13&lt;/span&gt;), the chance of a tie is &lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;%.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;186&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;187&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;EOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;188&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;print_probability_table&#34;&gt;&lt;code&gt;print_probability_table&lt;/code&gt;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;190&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;print_probability_table&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;191&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;lt;&amp;lt;EOT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;192&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;193&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#800&#34;&gt;How&lt;/span&gt; to use this &lt;span style=&#34;color:#19177c&#34;&gt;table&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;194&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;195&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;    &amp;lt;ol&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;196&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;      &amp;lt;li&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;197&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;        If both parties have levels of Mastery, reduce each by the &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;198&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;        lower of the two levels.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;199&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;      &amp;lt;/&lt;/span&gt;li&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;200&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;li&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;201&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;Determine&lt;/span&gt; which party has the higher &lt;span style=&#34;color:#800&#34;&gt;Rank&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;  A &lt;span style=&#34;color:#800&#34;&gt;Victory&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; the &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;202&lt;/span&gt;&lt;span&gt;        party with the higher rank is equivalent to a &lt;span style=&#34;color:#800&#34;&gt;Defeat&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; the &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;203&lt;/span&gt;&lt;span&gt;        other party&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;204&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/li&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;205&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;      &amp;lt;li&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;206&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;        Convert ranks of 20, 20w, etc. into 19, 19w, etc.  Mathematically,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;207&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;        they&amp;#39;re equivalent, due to automatic Fumble at 20.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;208&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;      &amp;lt;/&lt;/span&gt;li&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;209&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;li&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;210&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#800&#34;&gt;Look&lt;/span&gt; up the probabilities on this chart&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;  &lt;span style=&#34;color:#800&#34;&gt;Note&lt;/span&gt; that &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;5w&amp;#34;&lt;/span&gt; is &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;211&lt;/span&gt;&lt;span&gt;        &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;five Mastery&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a2f;font-weight:bold&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;1w2&amp;#34;&lt;/span&gt; is &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;one Mastery two&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;  &lt;span style=&#34;color:#800&#34;&gt;Representing&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;212&lt;/span&gt;&lt;span&gt;        the actual &lt;span style=&#34;color:#800&#34;&gt;Mastery&lt;/span&gt; rune (&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;_&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;_&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ASCII&lt;/span&gt; art) using &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;213&lt;/span&gt;&lt;span&gt;        programmatically&lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt;generated &lt;span style=&#34;color:#800&#34;&gt;HTML&lt;/span&gt; is just too annoying&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;214&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/li&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;215&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;    &amp;lt;/o&lt;/span&gt;l&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;216&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;217&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;218&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#800&#34;&gt;Note&lt;/span&gt; that this chart is meant only &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;for&lt;/span&gt; informational purposes&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;219&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#800&#34;&gt;To&lt;/span&gt; actually resolve conflicts, roll as instructed &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;in&lt;/span&gt; the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;220&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;i&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#800&#34;&gt;HeroQuest&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#b68&#34;&gt;/i&amp;gt; rules.  (You&amp;#39;d need two d20 to use these &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;221&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;      percentages anyway ...)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;222&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#b68&#34;&gt;    &amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#008000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;223&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;224&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#666&#34;&gt;&amp;lt;&lt;/span&gt;table border&lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;225&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#800&#34;&gt;EOT&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;226&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;227&lt;/span&gt;&lt;span&gt;  print_header&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;228&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;229&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(&lt;span style=&#34;color:#666&#34;&gt;61&lt;/span&gt;) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;t&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;230&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;231&lt;/span&gt;&lt;span&gt;    m &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; t &lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;232&lt;/span&gt;&lt;span&gt;    a &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; t &lt;span style=&#34;color:#666&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;233&lt;/span&gt;&lt;span&gt;    maxr &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; (t &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt;) ? &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt; : t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;234&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;235&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;if&lt;/span&gt; a &lt;span style=&#34;color:#666&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;236&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;upto(maxr) &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;r&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;237&lt;/span&gt;&lt;span&gt;&#x9;print_probabilities(m, a, r)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;238&lt;/span&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;239&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;240&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;241&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;242&lt;/span&gt;&lt;span&gt;  print_probabilities(&lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#666&#34;&gt;19&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;243&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&amp;lt;/table&amp;gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;244&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;main-loop&#34;&gt;Main Loop&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;246&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;247&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;248&lt;/span&gt;&lt;span&gt;  print_probability_page&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;249&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;when&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;250&lt;/span&gt;&lt;span&gt;  a, ma &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parse_rank(&lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;251&lt;/span&gt;&lt;span&gt;  r, mr &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; parse_rank(&lt;span style=&#34;color:#800&#34;&gt;ARGV&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;252&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;253&lt;/span&gt;&lt;span&gt;  c &lt;span style=&#34;color:#666&#34;&gt;=&lt;/span&gt; counts(ma &lt;span style=&#34;color:#666&#34;&gt;-&lt;/span&gt; mr, a, r)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;254&lt;/span&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;255&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%16s: %5.2f%%&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#39;SUCCESS&amp;#39;&lt;/span&gt;, total_success(c))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;256&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#800&#34;&gt;DEGREES&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;.&lt;/span&gt;each &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;257&lt;/span&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;%16s: %5.2f%%&lt;/span&gt;&lt;span style=&#34;color:#b62;font-weight:bold&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;&lt;/span&gt;, d, c&lt;span style=&#34;color:#666&#34;&gt;[&lt;/span&gt;d&lt;span style=&#34;color:#666&#34;&gt;].&lt;/span&gt;to_f&lt;span style=&#34;color:#666&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#666&#34;&gt;4&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;258&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;259&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;260&lt;/span&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;puts&lt;/span&gt; &lt;span style=&#34;color:#ba2121&#34;&gt;&amp;#34;usage: &lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;#{&lt;/span&gt;&lt;span style=&#34;color:#19177c&#34;&gt;$0&lt;/span&gt;&lt;span style=&#34;color:#b68;font-weight:bold&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#ba2121&#34;&gt; [ active-rank resist-rank ]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;261&lt;/span&gt;&lt;span&gt;&lt;span style=&#34;color:#008000;font-weight:bold&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;../hq-prob-table/&#34;&gt;OUTPUT w/ no arguments&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>... And The American Way</title>
      <link>https://frank-mitchell.com/writing/ultragirl/</link>
      <pubDate>Sun, 26 Dec 2004 00:00:00 +0000</pubDate>
      <guid>https://frank-mitchell.com/writing/ultragirl/</guid>
      <description>&lt;p&gt;Karen waited nervously in her gynecologist&amp;rsquo;s office.  &lt;em&gt;It&amp;rsquo;s been&#xA;twenty minutes, at least.  What&amp;rsquo;s the deal?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Again her eyes darted from the rhododendron, to the window overlooking&#xA;another window, to the other vivid orange chair, to the pinewood desk&#xA;stacked with manilla folders and loose papers.  In the seat of the&#xA;doctor&amp;rsquo;s faux leather chair lay a folded newspaper, and for something&#xA;to do she walked over and picked it up.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
