<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>yyhh.org</title><link href="https://yyhh.org/" rel="alternate"></link><link href="https://yyhh.org/feeds/all.atom.xml" rel="self"></link><id>https://yyhh.org/</id><updated>2026-09-07T17:00:00+00:00</updated><subtitle>Homepage of Yunyao and Huahai</subtitle><entry><title>Datalevin 1.1.0: State-of-the-Art Performance Across Data Models</title><link href="https://yyhh.org/blog/2026/09/datalevin-1-1-0-performance" rel="alternate"></link><published>2026-09-07T17:00:00+00:00</published><updated>2026-09-07T17:00:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2026-09-07:/blog/2026/09/datalevin-1-1-0-performance</id><summary type="html">&lt;p&gt;Datalevin 1.1.0 combines fast durable transactions with leading results on relational, graph, document, and logical workloads. Six charts show the measurements, their scope, and the remaining gaps.&lt;/p&gt;</summary><content type="html">&lt;p&gt;When we released &lt;a href="/blog/2026/07/datalevin-100-is-here-one-database-for-application-state-and-agent-memory/"&gt;Datalevin 1.0.0&lt;/a&gt;,
the message was that one database could handle application state across
relational, graph, document, and logical workloads. With
&lt;a href="https://github.com/datalevin/datalevin/releases/tag/1.1.0"&gt;Datalevin 1.1.0&lt;/a&gt;,
we can make a stronger case: that breadth comes with state-of-the-art
performance on demanding benchmarks.&lt;/p&gt;
&lt;p&gt;The results cover durable transactions, complex relational joins, social graph
queries, nested documents, and recursive rules. Datalevin competes with SQLite,
PostgreSQL, Neo4j, MongoDB, and dedicated logic engines, using the same database
and Datalog query interface.&lt;/p&gt;
&lt;p&gt;Here are the headline observations from the benchmark artifacts in the
&lt;a href="https://github.com/datalevin/datalevin/tree/1.1.0/benchmarks"&gt;Datalevin repository&lt;/a&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Datalevin result&lt;/th&gt;
&lt;th&gt;Comparison in the measured configuration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Durable transactions&lt;/td&gt;
&lt;td&gt;114,739 records/s, synchronous strict WAL, batches of 1,000&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.57×&lt;/strong&gt; SQLite's throughput&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relational queries&lt;/td&gt;
&lt;td&gt;All 113 JOB queries in 38.073 seconds&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.37×&lt;/strong&gt; as fast as PostgreSQL by total query time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Graph queries&lt;/td&gt;
&lt;td&gt;Lower latency on 20 of 21 LDBC-derived read queries&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8.56×&lt;/strong&gt; as fast as Neo4j by summed time; &lt;strong&gt;5.55×&lt;/strong&gt; by geometric mean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document reads&lt;/td&gt;
&lt;td&gt;11,454 operations/s, one worker, workload C with document queries&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3.99×&lt;/strong&gt; MongoDB, the next fastest system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logical queries&lt;/td&gt;
&lt;td&gt;Lowest latency on all ten selected OpenRuleBench-derived tasks&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.07×–18.11×&lt;/strong&gt; as fast as the fastest alternative for each task&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each comparison applies to the configuration and workload measured. Together,
they make the case for Datalevin as a serious performance choice
across data models. The details also show where other systems remain ahead.&lt;/p&gt;
&lt;h2&gt;Durable transactions&lt;/h2&gt;
&lt;p&gt;A useful database has to accept changes quickly while maintaining its indexes
and honoring its commit promises.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/datalevin/datalevin/tree/1.1.0/benchmarks/write-bench"&gt;write benchmark&lt;/a&gt;
inserts one million person records. Each contains a UUID string identity, first
name, last name, and age. SQLite maintains its primary-key index and three
explicit value indexes; Datalevin maintains its entity-attribute-value and
attribute-value-entity indexes automatically. The comparison aligns logical
records and API transaction boundaries, although the physical index work differs.&lt;/p&gt;
&lt;p&gt;The chart uses Datalevin's &lt;strong&gt;strict WAL&lt;/strong&gt; profile and SQLite's &lt;strong&gt;WAL with
&lt;code&gt;synchronous=FULL&lt;/code&gt;&lt;/strong&gt;. Both use their ordinary OS sync behavior; the benchmark's
separate macOS &lt;code&gt;fullfsync&lt;/code&gt; condition is outside this chart. Data generation,
transaction processing, and commit completion contribute to throughput.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Strict WAL throughput for batches of 1, 10, 100, and 1,000 records. Datalevin synchronous: 8,186, 26,519, 44,747, 114,739 records/s. SQLite: 8,822, 17,609, 22,840, 32,105. Datalevin asynchronous: 102,133, 195,976, 245,485, 238,974." src="/images/datalevin-1.1.0/transactions.svg"&gt;&lt;/p&gt;
&lt;p&gt;For synchronous writes, SQLite is slightly faster at one record per
transaction. Datalevin pulls ahead as batches grow: &lt;strong&gt;1.51×&lt;/strong&gt; at ten records,
&lt;strong&gt;1.96×&lt;/strong&gt; at 100, and &lt;strong&gt;3.57×&lt;/strong&gt; at 1,000.&lt;/p&gt;
&lt;p&gt;The asynchronous API adds another useful capability. It combines queued
requests into physical transactions, reaching &lt;strong&gt;245,485 records per second&lt;/strong&gt;
at a request batch size of 100 while retaining strict WAL acknowledgment.
This is a different submission pattern from the blocking APIs: multiple
requests remain outstanding, so request throughput should not be read as the
number of physical commits or as single-request latency.&lt;/p&gt;
&lt;p&gt;Concurrent callers also benefit. With four synchronous callers and
1,000-record batches, Datalevin reaches &lt;strong&gt;151,622 records/s&lt;/strong&gt;, compared with
SQLite's &lt;strong&gt;50,735&lt;/strong&gt;, a &lt;strong&gt;2.99×&lt;/strong&gt; throughput advantage. In the mixed workload,
each iteration looks up a person and upserts a complete record. The blocking
strict-WAL paths deliver &lt;strong&gt;5,616 pairs/s&lt;/strong&gt; for Datalevin and &lt;strong&gt;5,041&lt;/strong&gt; for SQLite.
Datalevin's asynchronous path reaches &lt;strong&gt;16,996 pairs/s&lt;/strong&gt;, with reads using the
latest available snapshot and no read-your-write barrier between outstanding
requests. These results come from the retained
&lt;a href="https://github.com/datalevin/datalevin/blob/1.1.0/benchmarks/write-bench/results/2026-08-31-strict-wal-concurrent.edn"&gt;concurrent&lt;/a&gt;
and &lt;a href="https://github.com/datalevin/datalevin/blob/1.1.0/benchmarks/write-bench/results/2026-08-31-strict-wal-mixed.edn"&gt;mixed&lt;/a&gt;
artifacts.&lt;/p&gt;
&lt;p&gt;The practical result is that Datalevin offers both a competitive blocking
transaction path and substantial throughput when an application can batch or
pipeline its work.&lt;/p&gt;
&lt;h2&gt;Relational queries: complex joins in 38 seconds&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/datalevin/datalevin/tree/1.1.0/benchmarks/JOB-bench"&gt;Join Order Benchmark&lt;/a&gt;
asks a harder question than point-lookup benchmarks do: can an optimizer choose
good plans for complex joins over real, correlated data?&lt;/p&gt;
&lt;p&gt;JOB contains 113 queries over an IMDB dataset comprising 21 tables. In
Datalevin, the data becomes &lt;strong&gt;277,878,411 datoms&lt;/strong&gt;. Each engine executes a
complete warmup pass followed by a complete measurement pass. PostgreSQL and
Datalevin report planning and execution time inside the database, excluding
client startup and communication overhead.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Total JOB query time: Datalevin 38.1 seconds, PostgreSQL 128.2 seconds, SQLite at least 821.8 seconds including nine 60-second timeouts." src="/images/datalevin-1.1.0/relational.svg"&gt;&lt;/p&gt;
&lt;p&gt;Datalevin completes the suite in &lt;strong&gt;38.073 seconds&lt;/strong&gt;, versus &lt;strong&gt;128.231 seconds&lt;/strong&gt;
for PostgreSQL. SQLite spends &lt;strong&gt;281.849 seconds&lt;/strong&gt; on the 104 queries it
finishes, and nine more queries hit the 60-second cutoff. Charging only that
cutoff for each timeout gives SQLite a lower bound of &lt;strong&gt;821.849 seconds&lt;/strong&gt;, or
&lt;strong&gt;21.59×&lt;/strong&gt; Datalevin's total. The hatched part of its bar makes those timeouts
visible.&lt;/p&gt;
&lt;p&gt;Datalevin's advantage comes from the suite as a whole: it is faster than
PostgreSQL on &lt;strong&gt;65 of 113 queries&lt;/strong&gt;. PostgreSQL wins the other 48, including
some queries where Datalevin's planning overhead is substantial. Datalevin
spends 6.689 seconds planning, about &lt;strong&gt;17.6%&lt;/strong&gt; of its total. There is still
room to make planning cheaper while preserving the execution savings.&lt;/p&gt;
&lt;p&gt;For applications with complex relationships, the result challenges the idea
that moving away from a relational storage model requires giving up relational
query performance.&lt;/p&gt;
&lt;h2&gt;Graph queries: a general database takes on Neo4j&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/datalevin/datalevin/tree/1.1.0/benchmarks/LDBC-SNB-bench"&gt;graph harness&lt;/a&gt;
implements all 14 Interactive Complex reads and seven Interactive Short reads
from LDBC Social Network Benchmark Interactive v1. The SF1 dataset represents
a social network; the Neo4j import contains approximately 3.65 million nodes
and 20.63 million relationships.&lt;/p&gt;
&lt;p&gt;Both engines run embedded, eliminating network transport from this comparison.
Each gets a complete warmup pass, followed by a measurement pass in a fresh
JVM. Filesystem pages can remain warm, while query parsing and planning are
included in the measured call. Final-result caching is disabled.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Neo4j-to-Datalevin latency ratios for all 21 graph queries on a logarithmic scale. Datalevin leads on 20 queries; Neo4j leads narrowly on IC10. Summed-time ratio is 8.56 and geometric mean is 5.55." src="/images/datalevin-1.1.0/graph.svg"&gt;&lt;/p&gt;
&lt;p&gt;In the &lt;a href="https://github.com/datalevin/datalevin/blob/1.1.0/benchmarks/LDBC-SNB-bench/results/comparison-20260901T235851Z.edn"&gt;September 1 comparison&lt;/a&gt;,
Datalevin takes &lt;strong&gt;4.480 seconds&lt;/strong&gt; across all 21 reads, versus &lt;strong&gt;38.346 seconds&lt;/strong&gt;
for Neo4j Community Embedded 2026.06.0. Datalevin wins 20 queries; Neo4j is
about 5% faster on IC10.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;8.56×&lt;/strong&gt; summed-time advantage is influenced heavily by IC14. Giving each
query equal weight through the geometric mean of its latency ratio still
favors Datalevin by &lt;strong&gt;5.55×&lt;/strong&gt;. Across the seven short reads, the summed-time
advantage is &lt;strong&gt;2.95×&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Indexing policy matters here. Neo4j has ID uniqueness constraints and its
automatic token lookup indexes, with no workload-specific secondary indexes.
Datalevin automatically indexes attribute values. IC6 illustrates the
difference: its selected parameter produces an empty result, and Datalevin can
use an indexed tag-name lookup. Its 161.67× ratio describes that particular
case; it should not be generalized to every graph traversal.&lt;/p&gt;
&lt;p&gt;This is an &lt;strong&gt;LDBC-derived read-latency study&lt;/strong&gt;, not an official audited LDBC
throughput result. It retains one observation for one bundled parameter per
query, and the first query can include lazy compiler initialization in the
fresh JVM. All result counts agree; 17 queries also have identical canonical
result digests across engines. Four have documented output-representation
differences. Those details define what this strong result establishes.&lt;/p&gt;
&lt;h2&gt;Documents: indexed paths and fast application operations&lt;/h2&gt;
&lt;p&gt;Datalevin's indexed document type stores nested documents and indexes their
paths. An application can query fields, numeric ranges, wildcard paths, and
array contents while keeping documents intact.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/datalevin/datalevin/tree/1.1.0/benchmarks/idoc-bench"&gt;document benchmark&lt;/a&gt;
compares this feature with PostgreSQL JSONB, SQLite JSON1, and MongoDB. It uses
10,000 documents and 10,000 measured operations per pass. The base mixes are
reads and updates for A, reads for C, and read-modify-write for F. Each adds
document queries with weight 30, producing roughly &lt;strong&gt;23% document queries&lt;/strong&gt;
in the actual schedules.&lt;/p&gt;
&lt;p&gt;All systems use explicit durable acknowledgment settings: Datalevin strict
WAL, PostgreSQL &lt;code&gt;synchronous_commit=on&lt;/code&gt;, SQLite WAL &lt;code&gt;synchronous=FULL&lt;/code&gt;, and
MongoDB &lt;code&gt;{w: 1, j: true}&lt;/code&gt;. PostgreSQL, SQLite, and MongoDB receive indexes for
the query mix where supported. Measurements include client-observed execution,
transfer, and complete result-ID realization; Datalevin and SQLite are
embedded, while PostgreSQL and MongoDB use local servers.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Document workload throughput with one and four workers. Datalevin leads A, C, and F with one worker, and C with four workers. PostgreSQL leads four-worker A and F." src="/images/datalevin-1.1.0/documents.svg"&gt;&lt;/p&gt;
&lt;p&gt;With one worker, Datalevin leads all three mixes. Its &lt;strong&gt;11,454 operations/s&lt;/strong&gt;
on C is &lt;strong&gt;3.99×&lt;/strong&gt; MongoDB's 2,868, the best alternative. On A and F, its
advantage over runner-up PostgreSQL is approximately &lt;strong&gt;1.48×&lt;/strong&gt; and &lt;strong&gt;1.50×&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/datalevin/datalevin/blob/1.1.0/benchmarks/idoc-bench/results/2026-09-01-strict-two-pass-summary.edn"&gt;four-worker results&lt;/a&gt;
show a more varied picture. Datalevin reaches &lt;strong&gt;32,192 operations/s&lt;/strong&gt; on C,
&lt;strong&gt;2.43×&lt;/strong&gt; PostgreSQL's throughput. PostgreSQL leads A by about &lt;strong&gt;10.5%&lt;/strong&gt; and F
by about &lt;strong&gt;5.3%&lt;/strong&gt;. Datalevin's strongest advantage here is document querying;
concurrent mutation remains an area for further improvement.&lt;/p&gt;
&lt;p&gt;The latency breakdown shows where the query advantage comes from.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Single-worker workload C p50 latency for five document query shapes. Datalevin ranges from 0.051 to 0.328 milliseconds and has the lowest p50 on every shape. SQLite's nested-array shapes take over 22 milliseconds." src="/images/datalevin-1.1.0/document-latency.svg"&gt;&lt;/p&gt;
&lt;p&gt;Datalevin has the lowest p50 for all five query shapes. Nested equality takes
&lt;strong&gt;0.057 ms&lt;/strong&gt;; an any-depth wildcard takes &lt;strong&gt;0.147 ms&lt;/strong&gt;; array matching takes
&lt;strong&gt;0.207 ms&lt;/strong&gt;. SQLite is competitive on indexed scalar paths, but the two
nested-array shapes require scanning documents in this implementation.&lt;/p&gt;
&lt;p&gt;Automatic path indexing makes a concrete difference for applications that
store evolving, nested records and later need to ask precise questions about
their contents.&lt;/p&gt;
&lt;h2&gt;Logical workloads: recursion and derived relations&lt;/h2&gt;
&lt;p&gt;Recursive rules are central to Datalog. They express reachability, dependency
analysis, and relationships derived from other relationships in a compact
form. Their execution can also generate enormous intermediate results.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/datalevin/datalevin/tree/1.1.0/benchmarks/openrulebench"&gt;portable OpenRuleBench-derived suite&lt;/a&gt;
tests transitive closure (TC), same generation (SG), and trees of joins
(Join1). It compares Datalevin with SQLite, PostgreSQL, XSB, Soufflé, Clara
Rules, and O'Doyle Rules under a query-and-full-result-materialization timing
boundary. Data loading and program compilation are outside that interval.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Ten logical tasks across seven engines. Datalevin has the lowest measured latency in every row. The matrix retains unsupported cells, Clara's out-of-memory failure, and O'Doyle's timeouts." src="/images/datalevin-1.1.0/logic.svg"&gt;&lt;/p&gt;
&lt;p&gt;The chart uses the &lt;a href="https://github.com/datalevin/datalevin/blob/1.1.0/benchmarks/openrulebench/results/2026-09-01-datalevin-rerun.edn"&gt;September 1 Datalevin 1.1.0 rerun&lt;/a&gt;
and the &lt;a href="https://github.com/datalevin/datalevin/blob/1.1.0/benchmarks/openrulebench/results/2026-08-26-representative.edn"&gt;August 26 alternative-engine measurements&lt;/a&gt;.
Input digests and completed answer counts match across those artifacts.&lt;/p&gt;
&lt;p&gt;Datalevin has the lowest measured latency in &lt;strong&gt;all ten selected tasks&lt;/strong&gt;. For
cyclic transitive closure over 50,000 input facts, it materializes one million
result rows in &lt;strong&gt;102.59 ms&lt;/strong&gt;. The fastest alternative, Soufflé, takes
&lt;strong&gt;1,030.36 ms&lt;/strong&gt;, a &lt;strong&gt;10.04×&lt;/strong&gt; ratio. For Join1 &lt;code&gt;b1&lt;/code&gt; with both arguments free,
Datalevin takes &lt;strong&gt;99.14 ms&lt;/strong&gt;, versus XSB's &lt;strong&gt;1,795 ms&lt;/strong&gt;, an &lt;strong&gt;18.11×&lt;/strong&gt; ratio.&lt;/p&gt;
&lt;p&gt;Other leads are much smaller. Join1 &lt;code&gt;b2&lt;/code&gt; is &lt;strong&gt;162.41 ms&lt;/strong&gt; in Datalevin and
&lt;strong&gt;174.00 ms&lt;/strong&gt; in XSB. The observed 1.07× ratio is useful to report alongside
the large wins, especially with only one retained measurement per task.&lt;/p&gt;
&lt;p&gt;The suite uses deterministic generated relations following the paper's task
definitions; it does not recreate the lost historical input files. These ten
tasks are a representative subset, excluding the designated Join1 &lt;code&gt;a&lt;/code&gt;
free/free stress case and the full scale/binding matrix. Clara's out-of-memory
cell and O'Doyle's 60-second timeouts occurred during warmup. Unsupported cells
remain marked N/A. Each Clojure wrapper uses an 8 GiB maximum heap; external
engines have their own resource configuration.&lt;/p&gt;
&lt;p&gt;This is particularly encouraging for a persistent database: expressive rules
can deliver performance competitive with specialized logic systems.&lt;/p&gt;
&lt;h2&gt;What changed in 1.1.0&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/datalevin/datalevin/blob/1.1.0/CHANGELOG.md"&gt;release changelog&lt;/a&gt;
describes improvements throughout the engine: better join-cost estimates,
selective indexed lookups, parallel scans, execution in smaller work units,
specialized transitive-closure evaluation, and faster batched writes and local
identity upserts. Together, these changes target wasted intermediate work,
allocation, and transaction overhead.&lt;/p&gt;
&lt;p&gt;The release also makes strict durability the default when enabling WAL without
an explicit profile. Python and JavaScript gain idiomatic, composable query
and transaction APIs. Performance and usability move forward together.&lt;/p&gt;
&lt;p&gt;These cross-system results measure the builds recorded in the artifacts. They
are not a controlled 1.0-versus-1.1 experiment, so they do not assign a numerical
speedup to an individual optimization.&lt;/p&gt;
&lt;p&gt;The larger lesson is architectural. Relational joins, graph edges, document
paths, and logical rules all benefit when the database can find relevant facts
quickly and avoid producing unnecessary intermediate results. Datalevin's
fact-based model gives those capabilities a common foundation.&lt;/p&gt;
&lt;h2&gt;Read the numbers, then try your workload&lt;/h2&gt;
&lt;p&gt;The measurements were collected on a 12-core Apple Silicon macOS host with
Java 21.0.11; the JOB and logic studies identify the machine as an M3 Pro
MacBook Pro with 36 GB of memory. They are project-run benchmarks with specific
datasets, configurations, and timing boundaries.&lt;/p&gt;
&lt;p&gt;The write study includes database growth in one measurement pass with no
discarded warmup. JOB, graph, and document studies retain a measurement pass
after a separate-process warmup; document runs also warm the newly built
database within each pass. Logic uses a complete warmup and measurement in the
same child JVM. These protocols produce observations, not confidence intervals,
and their different metrics should not be combined into one overall score.&lt;/p&gt;
&lt;p&gt;For reproducibility, the charts have a downloadable
&lt;a href="/extra/datalevin-1.1.0/benchmark-data.json"&gt;data snapshot with source-file hashes&lt;/a&gt;.
The repository links above contain the harnesses and retained artifacts.
The graph and logic charts use newer 1.1.0 artifacts than the older tables
still present in their benchmark READMEs.&lt;/p&gt;
&lt;p&gt;Datalevin 1.1.0 makes a strong case that one database can combine broad
expressiveness with leading performance across demanding workloads. That
opens up a useful design choice: keep application facts together, and use
relations, graphs, documents, and logic wherever each is most natural.&lt;/p&gt;
&lt;p&gt;Get &lt;a href="https://github.com/datalevin/datalevin/releases/tag/1.1.0"&gt;Datalevin 1.1.0&lt;/a&gt;,
explore the &lt;a href="https://datalevin.org/docs"&gt;guide&lt;/a&gt;, and run the benchmark closest to
your application. I would love to see what you build with it.&lt;/p&gt;</content><category term="experience"></category><category term="Datalevin"></category><category term="Database"></category><category term="Datalog"></category><category term="Performance"></category><category term="Benchmark"></category></entry><entry><title>AI Coding Has Erased the Supposed Advantage of Statically Typed Languages</title><link href="https://yyhh.org/blog/2026/08/ai-coding-has-erased-the-supposed-advantage-of-statically-typed-languages" rel="alternate"></link><published>2026-08-13T12:00:00+00:00</published><updated>2026-08-13T12:00:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2026-08-13:/blog/2026/08/ai-coding-has-erased-the-supposed-advantage-of-statically-typed-languages</id><summary type="html">&lt;p&gt;An argument that AI coding shifts the advantage from static typing toward concise languages, where fewer tokens leave less room for misunderstanding.&lt;/p&gt;</summary><content type="html">&lt;p&gt;For years, advocates of statically typed languages have made the same argument:
types catch mistakes earlier, compilers provide better feedback, IDEs offer
better assistance, and large codebases become safer to maintain.&lt;/p&gt;
&lt;p&gt;That argument rests on an assumption that is rapidly becoming outdated: The
person writing the code is human.&lt;/p&gt;
&lt;p&gt;AI is not human. It does not prefer Python because Python feels simple. It does
not admire Rust because Rust feels rigorous. It has no taste, no emotional
attachment, and no programming-language identity.&lt;/p&gt;
&lt;p&gt;To an AI, languages differ primarily in how much code, and therefore how many
tokens, it must generate to express the same idea.&lt;/p&gt;
&lt;p&gt;The more complicated the language, the more tokens it requires. The more tokens
it requires, the more opportunities the model has to make a mistake.&lt;/p&gt;
&lt;p&gt;It really is that simple.&lt;/p&gt;
&lt;h2&gt;AI Does Not Need a Type System to Catch Errors&lt;/h2&gt;
&lt;p&gt;Compiler feedback matters when humans write code.&lt;/p&gt;
&lt;p&gt;People forget function signatures. They confuse return types, overlook null
values, miss fields, and call methods that do not exist. A type checker acts as
a guardrail, catching these mistakes before the program runs.&lt;/p&gt;
&lt;p&gt;It is therefore tempting to apply the same logic to AI:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Statically typed languages give AI more feedback, so AI produces better code
in them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is mostly cargo-cult reasoning inherited from human programming.&lt;/p&gt;
&lt;p&gt;When was the last time you saw a capable coding model remain stuck on an
ordinary compilation error?&lt;/p&gt;
&lt;p&gt;A missing parenthesis, an incorrect primitive type, or a nonexistent method is
no longer the central problem in AI-generated software. Such errors
occasionally happen, but the model reads the compiler message and fixes them
almost immediately.&lt;/p&gt;
&lt;p&gt;AI's expensive mistakes are not usually compilation errors. They are
misunderstandings.&lt;/p&gt;
&lt;p&gt;The model implements the wrong business rule. It overlooks an edge case. It
misinterprets the meaning of the data. It breaks an unstated concurrency
assumption. It produces a system that is perfectly type-correct and logically
wrong. A type checker cannot save you from that.&lt;/p&gt;
&lt;p&gt;The claim that AI needs "more compiler feedback" sounds technical, but it often
amounts to repeating an old argument without looking at the reality: AI almost
always one-shot the code, and compiler feedbacks are not involved for the most
part.&lt;/p&gt;
&lt;h2&gt;Types Are Cost Too&lt;/h2&gt;
&lt;p&gt;Types are usually described as protection. They are rarely counted as cost.&lt;/p&gt;
&lt;p&gt;For AI-generated code, however, a type declaration is first and foremost
additional information that must be generated, maintained, and kept consistent.&lt;/p&gt;
&lt;p&gt;Types are valuable when they encode real domain constraints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An order total cannot be negative.&lt;/li&gt;
&lt;li&gt;A cancelled transaction cannot be settled again.&lt;/li&gt;
&lt;li&gt;An unauthenticated user cannot perform an administrative operation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But much type information does not express constraints like these. It merely
repeats facts that are already obvious from the implementation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This argument is a string.&lt;/li&gt;
&lt;li&gt;This function returns a list of users.&lt;/li&gt;
&lt;li&gt;This value might be absent.&lt;/li&gt;
&lt;li&gt;This structure implements this interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the human-programming era, this repetition helped programmers understand
unfamiliar code. It also allowed IDEs and compilers to catch simple mistakes.&lt;/p&gt;
&lt;p&gt;But an AI model is already an extraordinarily capable pattern recognizer. It
can often infer these relationships from names, implementations, call sites,
tests, and surrounding context.&lt;/p&gt;
&lt;p&gt;Requiring the model to state everything again does not automatically improve
correctness. It increases output length and adds another consistency
obligation.&lt;/p&gt;
&lt;p&gt;If a constraint cannot eliminate a meaningful business error but requires
dozens of additional tokens, it may be providing ceremony rather than safety.&lt;/p&gt;
&lt;h2&gt;Compilation Is No Longer the Scarce Capability&lt;/h2&gt;
&lt;p&gt;The most commonly advertised benefit of static typing is that it moves errors
into the compilation stage. In AI-assisted development, compilation errors are
among the cheapest errors possible.&lt;/p&gt;
&lt;p&gt;The expensive errors are the ones the compiler cannot see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The requirement was misunderstood.&lt;/li&gt;
&lt;li&gt;The tests encode the wrong assumption.&lt;/li&gt;
&lt;li&gt;The data model does not reflect the real business.&lt;/li&gt;
&lt;li&gt;The API appears reasonable but breaks compatibility.&lt;/li&gt;
&lt;li&gt;The concurrent code type-checks but contains a race condition.&lt;/li&gt;
&lt;li&gt;The authorization logic compiles but permits unauthorized access.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A program compiling successfully proves only that it satisfies the small subset
of rules represented by its type system. Nowadays, this does not buy much,
because any frontier AI can almost always meet this narrow requirement in a
single shot.&lt;/p&gt;
&lt;p&gt;Since AI-generated code already spends very little time stuck on basic compilation
failures, continuing to present compiler feedback as a decisive advantage is
like advertising a self-driving car on the strength of its gear-change
indicator. It may not be entirely useless, but it is simply no longer an
important issue.&lt;/p&gt;
&lt;h2&gt;More Types Means More Tokens&lt;/h2&gt;
&lt;p&gt;For AI, one of the most meaningful differences between languages is how many
tokens are required to express the same behavior.&lt;/p&gt;
&lt;p&gt;In a static typed language, a simple operation may require:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explicit type declarations&lt;/li&gt;
&lt;li&gt;Generic parameters&lt;/li&gt;
&lt;li&gt;Interfaces or traits&lt;/li&gt;
&lt;li&gt;Lifetime annotations&lt;/li&gt;
&lt;li&gt;Error-type conversions&lt;/li&gt;
&lt;li&gt;Optional-value wrappers&lt;/li&gt;
&lt;li&gt;Data-transfer objects&lt;/li&gt;
&lt;li&gt;Serialization annotations&lt;/li&gt;
&lt;li&gt;Several layers of adapter code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those additional structures are not free. Longer code requires more generated
tokens. More symbols must remain consistent across the context. Changes touch
more declarations and more files. Every additional abstraction creates another
place where the model can misunderstand the programmer's intent.&lt;/p&gt;
&lt;p&gt;AI does not automatically become more correct merely because the code looks
more rigorous. It simply now has more things to keep consistent.&lt;/p&gt;
&lt;p&gt;More tokens mean more opportunities for error. More abstraction layers mean
more room for misunderstanding. More type machinery means more code that does
not directly express the business requirement.&lt;/p&gt;
&lt;p&gt;On the other hand, dynamic languages may express the same behavior in a lot less
number of lines of code. For example, Clojure, a dynamic language, is shown to be the
most token efficient in &lt;a href="https://martinalderson.com/posts/which-programming-languages-are-most-token-efficient/"&gt;this
study&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Language Costs Must Be Recalculated for the AI Era&lt;/h2&gt;
&lt;p&gt;This does not mean types have no value. Types can document interfaces, define
module boundaries, support tooling, and encode genuine domain constraints.&lt;/p&gt;
&lt;p&gt;But that cost must now be evaluated honestly. Static typing should not be
treated as inherently superior.&lt;/p&gt;
&lt;p&gt;Historically, type systems added code and complexity in exchange for reducing
human cognitive load and catching human mistakes.&lt;/p&gt;
&lt;p&gt;Now, an increasing share of code is generated, modified, and interpreted by AI.
AI does not have the same memory limitations, and it rarely remains stuck on
syntax or elementary type errors. Its weaknesses lie elsewhere: ambiguous
requirements, hidden assumptions, sprawling context, and imperfect semantic
understanding.&lt;/p&gt;
&lt;p&gt;The old benefit is shrinking while the old cost remains.&lt;/p&gt;
&lt;p&gt;And now that tokens are a measurable expense, that cost is more visible than
ever.&lt;/p&gt;
&lt;p&gt;AI does not care about language ideology. It is not participating in the
culture war between static and dynamic typing. It is generating tokens.&lt;/p&gt;
&lt;p&gt;If two languages can solve the same problem, but one requires more declarations,
more boilerplate, more adapters, and more type gymnastics, that complexity does
not disappear. It becomes a longer context, a higher generation cost, and a
larger surface area for mistakes.&lt;/p&gt;
&lt;p&gt;The supposed advantage of statically typed languages was built on a world in
which humans were the primary producers of code. That premise has changed. The
conclusion should change with it.&lt;/p&gt;</content><category term="opinion"></category><category term="AI"></category><category term="Programming Languages"></category><category term="Static Typing"></category><category term="Software Development"></category><category term="LLM"></category><category term="Clojure"></category></entry><entry><title>Datalevin 1.0.0 Is Here: One Database for Application State and Agent Memory</title><link href="https://yyhh.org/blog/2026/07/datalevin-100-is-here-one-database-for-application-state-and-agent-memory" rel="alternate"></link><published>2026-07-20T16:00:00+00:00</published><updated>2026-07-20T16:00:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2026-07-20:/blog/2026/07/datalevin-100-is-here-one-database-for-application-state-and-agent-memory</id><summary type="html">&lt;p&gt;Introducing Datalevin 1.0.0 for application state and agent memory, with relational, graph, document, logical, full-text, and vector capabilities.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today, after six years of development, I am thrilled to announce the
availability of &lt;strong&gt;&lt;a href="https://github.com/datalevin/datalevin"&gt;Datalevin 1.0.0&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We started Datalevin in 2020 with a deceptively simple question: why should SQL
databases remain the default center of application state?&lt;/p&gt;
&lt;p&gt;Six years of research, engineering, benchmarking, production use, and community
feedback later, Datalevin 1.0.0 is our answer. Datalevin is open source under
the &lt;a href="https://github.com/datalevin/datalevin/blob/master/LICENSE"&gt;Eclipse Public License
2.0&lt;/a&gt;. It is a
durable, high-performance, fact-first database that brings relational queries,
graph traversal, logical reasoning, document access, full-text search, and
vector search into one compact system.&lt;/p&gt;
&lt;p&gt;The release completes the roadmap we set for 1.0: automatic path indexing for
documents; write-ahead logging and transaction-log access; read-only replicas
and high availability; a JSON API; broad libraries for Clojure, Java, Python,
and JavaScript; and much more.&lt;/p&gt;
&lt;p&gt;It also arrives with two new ways to learn Datalevin. The new
&lt;strong&gt;&lt;a href="https://datalevin.org"&gt;Datalevin website&lt;/a&gt;&lt;/strong&gt; contains the online guide, with
examples in Clojure, Java, Python, and JavaScript. The complete book,
&lt;strong&gt;&lt;em&gt;&lt;a href="https://www.amazon.com/dp/B0H8X1QF2Q/"&gt;Datalevin: The Definitive Guide to Logical and Intelligent
Databases&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;, is available in print and
ebook formats. In addition to the full database guide, the book contains five
chapters devoted to persistent memory for intelligent systems.&lt;/p&gt;
&lt;p&gt;This is a release, a book, and a website. More importantly, it is the point at
which the original Datalevin idea becomes a complete platform.&lt;/p&gt;
&lt;h2&gt;Replace SQL at the Center&lt;/h2&gt;
&lt;p&gt;Datalevin is not intended to be one more specialized database sitting beside a
SQL system. Its goal is to &lt;strong&gt;replace SQL databases at the center of application
state&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That does not mean recreating SQL with different syntax. It means replacing the
table as the center of gravity with the &lt;strong&gt;fact&lt;/strong&gt;. Datalevin stores small
entity-attribute-value facts, or datoms. The same fact can participate in a
row-like record, a graph edge, a nested document workflow, a search result, or a
logical rule without being copied into a different data model.&lt;/p&gt;
&lt;p&gt;Why make such a fundamental change? There are three main arguments.&lt;/p&gt;
&lt;h3&gt;1. SQL Is an Awkward Application Interface&lt;/h3&gt;
&lt;p&gt;SQL is a string-shaped language embedded inside programs. It has a large,
English-like syntax, many dialects, and poor composition with host-language
code. The enormous ecosystems of ORMs, query builders, migration tools, and
object mapping layers are not signs that SQL is a natural application
interface. They are evidence of how much machinery is needed to make it behave
like one.&lt;/p&gt;
&lt;p&gt;Datalevin queries are data. Datalog expresses the facts that must be true, while
shared variables create joins implicitly. Rules package reusable logic, and
recursive rules use the same form as ordinary queries. The programmer describes
relationships instead of spelling out a sequence of join mechanics.&lt;/p&gt;
&lt;p&gt;This smaller, more regular surface is easier for people to learn and easier for
programs to construct. It is also a better target for AI-generated queries:
fewer syntactic branches, fewer vendor-specific choices, and less
planner-sensitive ceremony.&lt;/p&gt;
&lt;h3&gt;2. Table-Shaped Storage Makes Complex Query Planning Harder&lt;/h3&gt;
&lt;p&gt;Rows bundle many individual facts into containers. When data are sparse,
skewed, or correlated, a SQL optimizer has a hard time estimating how many rows
will survive each predicate and join. Those cardinality estimates often depend
on histograms, independence assumptions, and other approximations. A bad
estimate can turn a reasonable query into a huge intermediate result.&lt;/p&gt;
&lt;p&gt;A fact-first store begins with explicit, independently indexed data items.
Missing facts are absent rather than represented by positional &lt;code&gt;NULL&lt;/code&gt; values.
Datalevin can count and sample the same indexed facts that query execution will
use, giving its cost-based optimizer better raw material for planning complex
joins.&lt;/p&gt;
&lt;p&gt;This is not only a theoretical advantage. In the Join Order Benchmark,
Datalevin has demonstrated that a triplestore can
&lt;a href="https://yyhh.org/blog/2024/09/competing-for-the-job-with-a-triplestore/"&gt;outperform PostgreSQL and SQLite on complex relational
queries&lt;/a&gt;.
The same query engine also performs strongly on recursive logic and
&lt;a href="https://yyhh.org/blog/2026/01/triple-store-triple-progress-datalevin-posited-for-the-future/"&gt;industry-standard graph
workloads&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;3. Stacking Extensions Creates an Integration Tax&lt;/h3&gt;
&lt;p&gt;Modern SQL databases can add JSON, full-text search, vector indexes, graph
features, recursive queries, and procedural extensions. Each capability is
useful. The trouble starts when one application question needs several of them
at once.&lt;/p&gt;
&lt;p&gt;Every extension tends to bring its own syntax, operators, index types, cost
model, and operational rules. If the capabilities are split into separate
services, the application must also synchronize copies of data and reconcile
results across network boundaries. Either way, the glue moves into application
code.&lt;/p&gt;
&lt;p&gt;Datalevin makes these capabilities composable over one database state in the
same elegant fact based model. A single query can ask for documents that contain
a phrase, are close to a question in embedding space, belong to a particular
entity in a graph, satisfy a nested document predicate, and pass exact
permission and lifecycle rules. The database does the integration work where it
belongs.&lt;/p&gt;
&lt;h2&gt;A Memory Substrate for AI Agents&lt;/h2&gt;
&lt;p&gt;That unified model matters even more for AI agents.&lt;/p&gt;
&lt;p&gt;An agent needs more than a transcript and more than a vector database. It needs
durable episodes, structured facts, goals, tasks, permissions, tool results,
source documents, relationships, and a bounded view of what matters now. It
needs to recall by similarity, but it must also know which facts are current,
which source supports them, who is allowed to see them, and what they are
connected to.&lt;/p&gt;
&lt;p&gt;Datalevin is designed to be the &lt;strong&gt;memory substrate&lt;/strong&gt; underneath that system:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full-text search&lt;/strong&gt; recalls information by words, phrases, and boolean search
  expressions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vector and embedding search&lt;/strong&gt; recalls information by semantic similarity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logical access&lt;/strong&gt; uses Datalog queries and rules to enforce exact conditions,
  derive facts, and reason recursively.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph access&lt;/strong&gt; follows relationships among users, episodes, facts, goals,
  tasks, evidence, and documents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document access&lt;/strong&gt; keeps nested EDN, JSON, and Markdown values intact while
  automatically indexing their paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relational access&lt;/strong&gt; joins structured application state without giving up the
  fact-first model.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not six disconnected products. They are six ways to see and retrieve
the same durable fact based state.&lt;/p&gt;
&lt;p&gt;That distinction is crucial. Similarity search can find plausible memories, but
similarity alone cannot decide whether a fact is authorized, supported,
superseded, or relevant to the active goal. Datalevin lets vector and full-text
recall produce candidates, then lets logic, graph relationships, document
predicates, and ordinary joins constrain and explain the result.&lt;/p&gt;
&lt;p&gt;Datalevin does not try to be an agent runtime. The application still owns model
calls, tool authorization, ingestion policy, consolidation, truth maintenance,
and prompt assembly. Datalevin provides the durable, transactional environment
in which those decisions can be stored, inspected, queried, and resumed. Its
built-in MCP server can also expose this memory directly to MCP-compatible AI
tools.&lt;/p&gt;
&lt;p&gt;In other words, a context window is temporary attention. Datalevin is memory.&lt;/p&gt;
&lt;h2&gt;One Database, Almost the Same API Everywhere&lt;/h2&gt;
&lt;p&gt;Datalevin began as a Clojure library, but 1.0 is not limited to Clojure
applications. The Clojure, Java, Python, and JavaScript APIs now cover almost
the same public surface:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Clojure&lt;/th&gt;
&lt;th&gt;Java&lt;/th&gt;
&lt;th&gt;Python&lt;/th&gt;
&lt;th&gt;JavaScript&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Embedded and remote connections&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datalog query, pull, and explain&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Synchronous and asynchronous transactions&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Datoms, index reads, bulk loading, and re-indexing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key-value APIs and explicit KV transactions&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full-text, vector, embedding, and idoc access&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standalone search and vector indexes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UDF registries and query, transaction, and analyzer UDFs&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backup, snapshots, transaction logs, replicas, and HA administration&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The remaining differences are small and explicit. JavaScript does not expose
the Datalog transaction callback because callback re-entry through the Node/JVM
bridge can deadlock. Staged mutation of an existing entity object remains a
Clojure-only convenience; Java, Python, and JavaScript use transaction maps or
builders instead. The full, current list lives in the
&lt;a href="https://github.com/datalevin/datalevin/blob/master/doc/language-compatibility.md"&gt;language compatibility
matrix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Whatever language you choose, the important parts do not change: the same
facts, schema, transactions, Datalog queries, and indexes.&lt;/p&gt;
&lt;h2&gt;Embedded, Server, or Script: Choose at Deployment Time&lt;/h2&gt;
&lt;p&gt;The data model should not have to change when the deployment topology changes.
Datalevin therefore supports three primary ways to run:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Use it for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Embedded&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Link Datalevin into a Clojure, Java, Python, or Node.js process for fast local access, much like SQLite.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Share databases across processes or machines with remote clients, role-based access control, read-only replicas, and high availability.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scripting&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use the Babashka pod for fast-starting automation, command-line tools, data jobs, and operational scripts.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There is also an MCP server mode for local AI-tool integration. You can begin
with an embedded prototype, move to a shared server as the application grows,
and automate it from scripts without rewriting the data model or query language.&lt;/p&gt;
&lt;p&gt;Deployment changes. The facts do not.&lt;/p&gt;
&lt;h2&gt;Start Building&lt;/h2&gt;
&lt;p&gt;Datalevin 1.0.0 is available now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read the new guide at &lt;strong&gt;&lt;a href="https://datalevin.org"&gt;datalevin.org&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Get the complete print or ebook edition of &lt;strong&gt;&lt;em&gt;&lt;a href="https://www.amazon.com/dp/B0H8X1QF2Q/"&gt;Datalevin: The Definitive
  Guide&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Explore, use, and contribute to the open-source code on
  &lt;strong&gt;&lt;a href="https://github.com/datalevin/datalevin"&gt;GitHub&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use Datalevin from
  &lt;strong&gt;&lt;a href="https://clojars.org/datalevin"&gt;Clojure&lt;/a&gt;&lt;/strong&gt;,
  &lt;strong&gt;&lt;a href="https://central.sonatype.com/artifact/org.datalevin/datalevin-java"&gt;Java&lt;/a&gt;&lt;/strong&gt;,
  &lt;strong&gt;&lt;a href="https://pypi.org/project/datalevin/"&gt;Python&lt;/a&gt;&lt;/strong&gt;, or
  &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/datalevin-node"&gt;JavaScript&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Reaching 1.0 took six years because the goal was never merely to ship another
query language or another storage wrapper. The goal was to build one coherent
place for application state: simple enough to embed, serious enough to run as a
server, expressive enough for relational, graph, document, and logical work,
and intelligent enough to become durable memory for the next generation of AI
systems.&lt;/p&gt;
&lt;p&gt;Thank you to everyone who tested Datalevin, reported issues, contributed code,
shared benchmarks, trusted it in production, or simply asked hard questions.
You helped turn an ambitious idea into a 1.0 database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Datalevin 1.0.0 is here. Let us build applications and agents that remember.&lt;/strong&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Datalevin"></category><category term="Database"></category><category term="Datalog"></category><category term="AI"></category><category term="Agent Memory"></category></entry><entry><title>SQLite in Production? Not So Fast for Complex Queries</title><link href="https://yyhh.org/blog/2026/01/sqlite-in-production-not-so-fast-for-complex-queries" rel="alternate"></link><published>2026-01-27T12:00:00+00:00</published><updated>2026-01-27T12:00:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2026-01-27:/blog/2026/01/sqlite-in-production-not-so-fast-for-complex-queries</id><summary type="html">&lt;p&gt;Examining SQLite's performance on complex queries and why join optimization deserves attention alongside the usual deployment and concurrency trade-offs.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="/images/datalevin_speedup_vs_sqlite.svg" alt="Datalevin speedup over SQLite on JOB benchmark" width="700"/&gt;&lt;/p&gt;
&lt;p&gt;There is a growing movement to use SQLite for everything. Kent C. Dodds
argues for &lt;a href="https://www.epicweb.dev/why-you-should-probably-be-using-sqlite"&gt;defaulting to SQLite in web
development&lt;/a&gt;
due to its zero-latency reads and minimal operational burden. Wesley
Aptekar-Cassels makes a &lt;a href="https://blog.wesleyac.com/posts/consider-sqlite"&gt;strong
case&lt;/a&gt; that SQLite works for
web apps with large user bases, provided they don't need tens of thousands of
writes per second. Discussions on Hacker News and elsewhere cite companies
like Apple, Adobe, and Dropbox using SQLite in production. Even the &lt;a href="https://www.sqlite.org/whentouse.html"&gt;official
SQLite documentation&lt;/a&gt; encourages its
use for most websites with fewer than 100K hits per day.&lt;/p&gt;
&lt;p&gt;These points are fair. The overarching theme is a pushback against
automatically choosing complex, client-server databases like PostgreSQL when
SQLite is often more than sufficient, simpler to manage, and faster for the
majority of use cases. I agree with that framing. The debate has settled into
a well-understood set of tradeoffs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;For "SQLite for everything"&lt;/th&gt;
&lt;th&gt;Known limitations&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Zero-latency reads as an embedded library&lt;/td&gt;
&lt;td&gt;Write concurrency limited to a single writer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No separate server to set up or maintain&lt;/td&gt;
&lt;td&gt;Not designed for distributed or clustered systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliable, self-contained, battle-tested (most deployed DB in the world)&lt;/td&gt;
&lt;td&gt;No built-in user management; relies on filesystem permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast enough for most human-driven web workloads&lt;/td&gt;
&lt;td&gt;Schema migration can be more complex in large projects&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These are the terms of the current discussion. But there is an important,
often overlooked dimension missing from this framing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQLite struggles with complex queries&lt;/strong&gt;. More specifically, SQLite is not
well-suited to handle the kind of multi-join queries that arise naturally in any
serious production system. This goes beyond the usual talking points about
deployment concerns (write concurrency, distribution, and so on). It points to
a system-level limitation: the query optimizer itself. That limitation matters even for
read-heavy, single-node deployments, which is exactly the use case where SQLite
is supposed to shine.&lt;/p&gt;
&lt;p&gt;I have &lt;a href="https://github.com/datalevin/datalevin/tree/master/benchmarks/JOB-bench"&gt;benchmark
evidence&lt;/a&gt;
showing this clearly. This post focuses on join-heavy analytical queries, not on
the many workloads where SQLite is already the right choice. But first, let me
explain why this matters more than people think.&lt;/p&gt;
&lt;h2&gt;Multi-join queries are not exotic&lt;/h2&gt;
&lt;p&gt;A common reaction to discussing multi-join queries is: "I don't write queries
with 10 joins." This usually means one of three things: the schema is
denormalized, the logic has been moved into application code, or the product
is simple. None of these mean the problem goes away.&lt;/p&gt;
&lt;p&gt;In any system with many entity types, rich relationships, history or
versioning, permissions, and compositional business rules, multi-join queries
inevitably appear. They emerge whenever data is normalized and questions are
compositional. Here are concrete examples from real production systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enterprise SaaS (CRM / ERP / HR)&lt;/strong&gt;. A query like "show me all open enterprise
deals" in a Salesforce-like system touches accounts, contacts, products,
pricebooks, territories, users, permissions, and activity logs. Real queries in
these systems routinely involve 10-20 joins. Every dimension of the business
(customers, ownership, products, pricing, regions, access control, activity
statistics) is often normalized into its own table.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Healthcare (EHR)&lt;/strong&gt;. "Patients with condition X, treated by doctors in
department Y, prescribed drug Z in the last 6 months, and whose insurance covers
that drug" spans patients, visits, diagnoses, providers, departments, prescriptions,
drugs, insurance plans, coverage rules, and claims. Exceeding 15 joins is
common.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;E-commerce and Marketplaces&lt;/strong&gt;. "Orders in the last 30 days that include
products from vendor V, shipped late, refunded, with customers in region R"
touches orders, order items, products, vendors, shipments, delivery events,
refunds, customers, addresses, regions, and payment methods. Again, 10+ joins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authorization and Permission systems&lt;/strong&gt;. "Which documents can user U see?"
requires traversing users, groups, roles, role assignments, resource
policies, ACLs, inheritance rules, and organizational hierarchies. This
alone can be 12+ joins, sometimes recursive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analytics and BI&lt;/strong&gt;. Star schemas look simple on paper, but real dashboard
queries add slowly changing dimensions, hierarchy tables, permission joins,
and attribution models. A "simple" dashboard query often hits 6-10 dimension
tables plus access control.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Knowledge graphs and semantic systems&lt;/strong&gt;. "Papers authored by people affiliated
with institutions collaborating with company X on topic Y" requires joining
papers, authors, affiliations, institutions, collaborations, and topics.
Very common in search and recommendation systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Event sourcing and temporal queries&lt;/strong&gt;. Reconstructing the state of an
account at a point in time with approval chains requires joining entity
tables, event tables, approval tables, history tables, and version joins.
Temporal dimensions multiply join counts quickly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI / ML feature pipelines&lt;/strong&gt;. Feature stores generate massive joins.
Assembling a feature vector often requires joining user profiles, sessions,
events, devices, locations, and historical aggregates. This is why feature
stores are expensive.&lt;/p&gt;
&lt;p&gt;The pattern is consistent across domains:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Domain&lt;/th&gt;
&lt;th&gt;Typical join count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SaaS CRM / ERP&lt;/td&gt;
&lt;td&gt;8-20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Healthcare&lt;/td&gt;
&lt;td&gt;10-25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authorization&lt;/td&gt;
&lt;td&gt;6-15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BI dashboards&lt;/td&gt;
&lt;td&gt;6-12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge graphs&lt;/td&gt;
&lt;td&gt;10-30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature pipelines&lt;/td&gt;
&lt;td&gt;8-20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Complex joins are not accidental. They emerge from normalized data, explicit
relationships, compositional business rules, layered authorization, and
historical records. Again, if you don't see many joins in your system, it usually
means the schema is denormalized, the logic is in the application layer, or
the product hasn't reached sufficient complexity yet. This does not mean the
system is better. It often means complexity has been pushed into the
application layer, which can add engineering cost without adding real value.&lt;/p&gt;
&lt;h2&gt;The evidence: JOB benchmark&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/gregrahn/join-order-benchmark"&gt;Join Order Benchmark
(JOB)&lt;/a&gt; is a standard
benchmark designed specifically to stress database query optimizers on complex
multi-join queries [1]. Based on the Internet Movie Database (IMDb), a
real-world, highly normalized dataset with over 36 million rows in its largest
table, it contains 113 analytical queries with 3 to 16 joins each, averaging
8 joins per query. Unlike synthetic benchmarks like TPC, JOB uses real data
with realistic data distributions, making it a much harder test of query
optimization.&lt;/p&gt;
&lt;p&gt;I ran this benchmark comparing three databases: SQLite (via JDBC),
PostgreSQL 18, and &lt;a href="https://github.com/datalevin/datalevin"&gt;Datalevin&lt;/a&gt; (an
open-source database I build). All were tested in default configurations
with no tuning, on a MacBook Pro M3 Pro with 36GB RAM. This is not a tuning
shootout, but a look at out-of-the-box optimizer behavior. Details of the
benchmark methodology can be found
&lt;a href="https://github.com/datalevin/datalevin/tree/master/benchmarks/JOB-bench"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Overall wall clock time&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Total time (113 queries)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Datalevin&lt;/td&gt;
&lt;td&gt;93 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;171 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;295 seconds (excluding 9 timeouts)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;SQLite needed a 60-second timeout per query, and 9 queries failed to complete
within that limit. The actual total time for SQLite would be substantially
higher if these were included. For example, query 10c, when allowed to run to
completion, took 446.5 seconds.&lt;/p&gt;
&lt;h3&gt;Execution time statistics (milliseconds)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Mean&lt;/th&gt;
&lt;th&gt;Median&lt;/th&gt;
&lt;th&gt;Min&lt;/th&gt;
&lt;th&gt;Max&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Datalevin&lt;/td&gt;
&lt;td&gt;773&lt;/td&gt;
&lt;td&gt;232&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;8,345&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;1,507&lt;/td&gt;
&lt;td&gt;227&lt;/td&gt;
&lt;td&gt;3.5&lt;/td&gt;
&lt;td&gt;36,075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;2,837&lt;/td&gt;
&lt;td&gt;644&lt;/td&gt;
&lt;td&gt;8.1&lt;/td&gt;
&lt;td&gt;37,808&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The median tells the story: SQLite's median is nearly 3x worse than
the other two.&lt;/p&gt;
&lt;h3&gt;Per-query speedup: Datalevin vs. SQLite&lt;/h3&gt;
&lt;p&gt;The chart at the top of this post shows the speedup ratio (SQLite time /
Datalevin time) for each of the queries on a logarithmic scale (excluding 9 timeouts). Points
above the 1x line (10^0) mean Datalevin is faster; points below mean SQLite
is faster. The horizontal lines mark 1x, 10x, and 100x speedups.&lt;/p&gt;
&lt;p&gt;Several patterns stand out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The vast majority of points are above the 1x line, often by 10x or more.&lt;/li&gt;
&lt;li&gt;For the hardest queries, Datalevin achieves 100x+ speedups. These are
  precisely the complex multi-join queries where SQLite's optimizer breaks
  down.&lt;/li&gt;
&lt;li&gt;SQLite is rarely faster, and when it is, the margin is small.&lt;/li&gt;
&lt;li&gt;The 9 timed-out queries (not shown) would push the ratio even higher.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Where SQLite breaks down&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Timeouts&lt;/strong&gt;. Queries 8c, 8d, 10c, 15c, 15d, 23a, 23b, 23c, and 28c
all timed out at the 60-second limit during the benchmark runs. These
represent queries with higher join counts where SQLite's optimizer failed
to find an efficient plan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Extreme slowdowns&lt;/strong&gt;. Even among queries that completed, SQLite was often
dramatically slower. Query 9d took 37.8 seconds on SQLite versus 1.6 seconds
on Datalevin (24x). Query 19d took 20.8 seconds versus 5.7 seconds. Query
families 9, 10, 12, 18, 19, 22, and 30 all show SQLite performing
significantly worse, often by 10-50x.&lt;/p&gt;
&lt;h3&gt;Why SQLite falls behind&lt;/h3&gt;
&lt;p&gt;SQLite's query optimizer has fundamental limitations for complex joins:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Limited join order search&lt;/strong&gt;. SQLite uses exhaustive search for join
ordering only up to a limited number of tables. Beyond that threshold, it
falls back to heuristics that produce poor plans for complex queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Weak statistics model&lt;/strong&gt;. SQLite's cardinality estimation is simpler than
PostgreSQL's, which itself has well-documented weaknesses [1]. With fewer
statistics to guide optimization, SQLite makes worse choices about which
tables to join first and which access methods to use.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;No cost-based plan selection for complex cases&lt;/strong&gt;. For queries with many
tables, SQLite's planner cannot explore enough of the plan space to find
good join orderings. The result is plans that process orders of magnitude
more intermediate rows than necessary.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These limitations are architectural; they are not bugs likely to be fixed in a
near-term release. They reflect design tradeoffs inherent in SQLite's goal of
being a lightweight, embedded database.&lt;/p&gt;
&lt;h2&gt;What this means for "SQLite in production"&lt;/h2&gt;
&lt;p&gt;SQLite is excellent for what it was designed to be: an embedded database for
applications with simple query patterns. It excels as a local data store, a
file format, and a cache. For read-heavy workloads with straightforward
queries touching a few tables, it works extremely well.&lt;/p&gt;
&lt;p&gt;But the production systems described above, e.g. CRM, EHR, e-commerce,
authorization, analytics, are precisely where SQLite's query optimizer
becomes a bottleneck. These are not hypothetical workloads, but the
day-to-day reality of systems that serve businesses and users.&lt;/p&gt;
&lt;p&gt;The "SQLite in production" advocates often benchmark simple cases: key-value
lookups, single-table scans, basic CRUD operations. On those workloads, SQLite
does extremely well. But production systems grow. Schemas become more normalized as
data integrity requirements increase. Questions become more compositional as
business logic matures. And at that point, the query optimizer becomes the
bottleneck, not the network round trip to a database server.&lt;/p&gt;
&lt;p&gt;Before choosing SQLite for a production system, ask: will our queries stay
simple forever? If the answer is no, and it usually is, the savings in
deployment simplicity may not be worth the cost in query performance as the
system grows.&lt;/p&gt;
&lt;h2&gt;An alternative approach&lt;/h2&gt;
&lt;p&gt;In a &lt;a href="https://yyhh.org/blog/2024/09/competing-for-the-job-with-a-triplestore/"&gt;previous
post&lt;/a&gt;,
I described how Datalevin, a triplestore using Datalog, handles these complex
queries effectively. Its query optimizer uses counting and sampling on its
triple indices to produce accurate cardinality estimates, resulting in
better execution plans. Unlike row stores, where cardinality estimation is
notoriously difficult due to bundled storage, a triplestore can count and
sample individual data atoms directly.&lt;/p&gt;
&lt;p&gt;This approach yields plans that are not only better than SQLite's, but
consistently better than PostgreSQL's across the full range of JOB queries.
Despite Datalevin being written in Clojure on the JVM rather than optimized C code,
it still managed to halve the total query time in the JOB benchmark. The quality of the
optimizer's decisions matters more than the raw execution speed of the engine.&lt;/p&gt;
&lt;p&gt;For systems that need both deployment simplicity (Datalevin works as an
embedded database too) and the ability to handle complex queries as they
inevitably arise, a triplestore with a cost-based optimizer offers a practical
alternative to either SQLite or a full client-server RDBMS. It is not a silver
bullet, but it can deliver SQLite-like operational simplicity without giving
up complex-query performance.&lt;/p&gt;
&lt;p&gt;If you have different results or have tuned SQLite to handle these queries
well, I would love to compare notes. The goal here is not to dunk on SQLite,
but to surface a missing dimension in a discussion that often defaults to
deployment tradeoffs alone.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;p&gt;[1] Leis, V., et al. "How good are query optimizers, really?" VLDB
Endowment. 2015.&lt;/p&gt;</content><category term="opinion"></category><category term="Database"></category><category term="SQLite"></category><category term="Datalevin"></category><category term="PostgreSQL"></category><category term="Datalog"></category><category term="Clojure"></category></entry><entry><title>Triple Store, Triple Progress: Datalevin Posited for the Future</title><link href="https://yyhh.org/blog/2026/01/triple-store-triple-progress-datalevin-posited-for-the-future" rel="alternate"></link><published>2026-01-19T16:00:00+00:00</published><updated>2026-01-19T16:00:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2026-01-19:/blog/2026/01/triple-store-triple-progress-datalevin-posited-for-the-future</id><summary type="html">&lt;p&gt;Progress on Datalevin's rule engine, storage, and queries brings relational, graph, and deductive workloads closer together in a single triplestore.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="Interactive Short Query Performance" src="/images/interactive-short-query-performance.svg"&gt;&lt;/p&gt;
&lt;p&gt;In my previous post, &lt;a href="https://yyhh.org/blog/2024/09/competing-for-the-job-with-a-triplestore/"&gt;Competing for the JOB with a
Triplestore&lt;/a&gt;, I showed that a triple
store, such as &lt;a href="https://github.com/juji-io/datalevin"&gt;Datalevin&lt;/a&gt;, can compete
with the best row stores on complex relational workloads. Since then, I have
rewritten Datalevin's rule engine and improved its storage and query engine.
This post focuses on why these matter for the broader goal of using a triple
store as a single, flexible data substrate.&lt;/p&gt;
&lt;h2&gt;One store, many workloads&lt;/h2&gt;
&lt;p&gt;Our goal is to simplify data storage and access by supporting diverse database
use cases and paradigms, because maximal flexibility is the core strength of a
triple store. Using one data store for different use cases simplifies and
reduces the cost of software development, deployment, and maintenance.&lt;/p&gt;
&lt;p&gt;Since 2020, we have been working hard toward this goal of building an easy-to-use
and versatile database. I am happy to report that, today, in addition to
key-value and relational database features, Datalevin also handles graph queries
and deductive logic reasoning tasks, with built-in support for full-text search
and vector similarity search as well. All these are seamlessly integrated in a
compact package that works in both embedded and server modes.&lt;/p&gt;
&lt;p&gt;This post is a guided tour of the progress made so far in the storage engine,
the query engine, and the new rule engine.&lt;/p&gt;
&lt;h2&gt;Triples as the substrate&lt;/h2&gt;
&lt;p&gt;Datalevin stores data as triples: entity, attribute, value (EAV): the smallest,
atomic unit of a data item. This uniform representation is the key that lets one
engine handle many shapes of data and many ways of asking questions. A triple
store can behave like a relational system when your data is tabular, like a
graph system when your data is connected, and like a logic system when you
define recursive rules.&lt;/p&gt;
&lt;p&gt;The challenge has always been performance. Triple stores have historically been
slower than row/column stores. The rest of this post explains how Datalevin
addresses this challenge.&lt;/p&gt;
&lt;h2&gt;Storage&lt;/h2&gt;
&lt;p&gt;Datalevin uses a fast key-value database library as the storage layer.
Specifically, the exceptional read performance of
&lt;a href="https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database"&gt;LMDB&lt;/a&gt; is the
foundation of Datalevin's query performance. Datalevin stores triples with
nested indices by leveraging LMDB's DUPSORT capability: the head element of a
triple is stored once as the key, and the tail elements are stored as a sorted
list of values. This reduces storage overhead and alleviates the data redundancy
problem inherent in triple stores.&lt;/p&gt;
&lt;p&gt;To further reduce data redundancy, we built our own LMDB fork,
&lt;a href="https://github.com/huahaiy/dlmdb"&gt;DLMDB&lt;/a&gt;, which adds page-level prefix
compression to the storage. For DUPSORT, prefix compression is applied to both
keys and values, resulting in significant storage savings. We also removed the
lesser-used &lt;code&gt;VAE&lt;/code&gt; index. For a typical reference-heavy (foreign key) Datalog
database, the footprint reduction can be over 40%.&lt;/p&gt;
&lt;p&gt;Through relentless code optimization, we achieved these savings
without incurring excessive read/write overhead. In fact, for the common
Datalevin use case of seeking to a key and reading its list of values in full,
we obtained a 40% speedup in most cases.&lt;/p&gt;
&lt;p&gt;The Datalevin query planner relies heavily on online counting and sampling. To
facilitate these operations, we added subtree node count maintenance in DLMDB.
These order statistics turn counting and sampling operations from O(n) to O(log
n), cutting Datalog query planning time in half. This feature was introduced with
minimal write overhead.&lt;/p&gt;
&lt;h2&gt;Query engine&lt;/h2&gt;
&lt;p&gt;Datalevin's query planner performs extensive query rewrite passes to optimize
performance. For example, predicates are pushed down into index scans so
filters execute early rather than after joins; inequality predicates are
rewritten into index range scans, and so on.&lt;/p&gt;
&lt;p&gt;The planner simplifies the query graph by treating stars as meta-nodes, then
applies a Selinger-style dynamic programming algorithm with accurate cardinality
estimates. Merge scans collapse star-shaped entity access into a single scan,
avoiding redundant joins for attributes belonging to the same entity group. More
details on these optimizations can be found in the &lt;a href="https://github.com/juji-io/datalevin/blob/master/doc/query.md"&gt;query engine
documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Even with relatively accurate cardinality estimation, occasional bad plans are
unavoidable, particularly for tricky joins that link different
entities. To reduce the impact of such cases, the cost-based optimizer now
considers hash joins as an alternative when input size is large. We also
extended the optimizer's coverage to more complex query clauses, such as
&lt;code&gt;or-join&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We made the multi-threaded query execution pipeline more robust by handling edge
cases in concurrency and adding backpressure. The pipeline now uses its own
thread pool to avoid contention with worker thread pools.&lt;/p&gt;
&lt;p&gt;Other improvements have focused on usability: "creature-comfort" features like
a &lt;code&gt;:having&lt;/code&gt; clause, allowing math expressions in &lt;code&gt;:find&lt;/code&gt;, specifying sort
variables by indices in &lt;code&gt;:order-by&lt;/code&gt;, full boolean search expressions for
full-text, and so on. These features reduce the amount of custom code needed for
post-processing results, and in-database operations are usually more efficient
than equivalent work in application code.&lt;/p&gt;
&lt;h2&gt;Rule engine&lt;/h2&gt;
&lt;p&gt;Datalevin uses rules to bundle a set of query clauses into named, reusable
invocations. As rules can call themselves and other rules, this feature enables
recursive logic computation and graph navigation. We wrote a new rule engine
that leverages the same cost-based optimizer, allowing Datalevin to serve as an
efficient graph database and logic reasoner.&lt;/p&gt;
&lt;p&gt;The rule engine uses semi-naive fixpoint evaluation, applies magic-set rewrites
where beneficial, and seeds evaluation from outer query bindings so it starts with
relevant candidates instead of a blank slate.&lt;/p&gt;
&lt;p&gt;In addition, non-recursive rule clauses are inlined into the main query to let
the optimizer plan them with index scans and joins. For T-stratified rules,
temporal elimination avoids storing unnecessary intermediate results. Detailed
information is available in the &lt;a href="https://github.com/juji-io/datalevin/blob/master/doc/rules.md"&gt;rule engine
documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Benchmarks&lt;/h2&gt;
&lt;p&gt;We added two new benchmarks to showcase the progress we have made.&lt;/p&gt;
&lt;h3&gt;Logic workloads: Math Genealogy benchmark&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://github.com/juji-io/datalevin/tree/master/benchmarks/math-bench"&gt;Math Genealogy
benchmark&lt;/a&gt;
focuses entirely on rule resolution. It is a good stress test for recursive
Datalog rules. The dataset contains roughly 256,769 dissertations, 256,767
students, and 276,635 advisor-student relationships. There are four queries in
this benchmark. Datalevin's rule engine is very fast on these queries: Q1 (14.4
ms), Q2 (330.9 ms), Q3 (269.6 ms), and Q4 (recursive academic ancestry, 2.9 ms).&lt;/p&gt;
&lt;p&gt;By comparison, Datomic takes over 40 seconds on Q4, and Datascript runs out of
memory. This query is difficult because recursive ancestry computes a transitive
closure: each new level of ancestors can join with every previously found level,
which can quickly create a combinatorial explosion of intermediate tuples. Even if
the average branching factor is modest (say b=3–5 advisors per student),
intermediate results can grow on the order of b^k at depth k. If those tuples
are generated repeatedly across branches, we end up materializing large
intermediate relations just to discard most of them later.&lt;/p&gt;
&lt;p&gt;Why is Q4 so fast in Datalevin? It exploits bound starting points. The
semi-naive fixpoint evaluation works off delta relations only, i.e., each
iteration only joins newly produced tuples. When a query binds a head argument,
the engine also seeds recursion (and, when effective, applies magic-set
rewrites) so it only explores the reachable slice of the graph rather than
materializing the full closure.&lt;/p&gt;
&lt;h3&gt;Graph workloads: LDBC SNB benchmark&lt;/h3&gt;
&lt;p&gt;Graph workloads are where triple stores should shine, but performance is where
dedicated graph databases usually try to defend their turf. The &lt;a href="https://ldbcouncil.org/benchmarks/snb/"&gt;LDBC Social
Network Benchmark (SNB)&lt;/a&gt; is an
industry-standard benchmark for interactive graph queries. We implemented the
full workload and included a Neo4j implementation for comparison
&lt;a href="https://github.com/juji-io/datalevin/tree/master/benchmarks/LDBC-SNB-bench"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On the SF1 dataset (about 3.2M entities and 17.3M edges), Datalevin is 27x to
620x faster on short interactive queries (pictured above), averaging 48x
faster than Neo4j. These short queries are the most commonly encountered
workloads in an operational graph database, so performing well on them has
significant practical implications.&lt;/p&gt;
&lt;p&gt;Some of these short queries (IS2 and IS6) involve unbounded graph
traversal, such as finding the root post of a comment. Datalevin handles these
with a recursive rule. Thanks to the efficiency of our rule engine, graph
navigation performance is stellar.&lt;/p&gt;
&lt;p&gt;On complex queries, Datalevin is about 12% faster overall, with some
queries (IC6, IC8, IC11) orders of magnitude faster and a few (IC3, IC5, IC9)
slower than Neo4j. I am sure Neo4j is extensively tuned for these queries, as it
is one of the authors of this industry-standard benchmark. It is remarkable that
Datalevin performs so well on these complex graph queries without any specific
tuning.&lt;/p&gt;
&lt;p&gt;The important observation here is that the same triple store and query
engine handle both relational-style joins and graph traversals without
needing special cases for either.&lt;/p&gt;
&lt;h2&gt;Towards the future&lt;/h2&gt;
&lt;p&gt;A triple store is a flexible substrate. When paired with a cost-based query
optimizer and a modern rule engine, it can span relational, graph, and logical
reasoning workloads. It can also expand toward richer document workloads
without changing the underlying model.&lt;/p&gt;
&lt;p&gt;With the current focus on AI systems, a triple store like Datalevin can serve
several critical purposes.&lt;/p&gt;
&lt;p&gt;An AI agent needs a context graph: entities, facts, relations, constraints, and
memories that evolve over time. Keeping that context in one integrated store
reduces the impedance mismatch between relational tables, graph edges, embeddings,
and documents. Datalevin makes retrieval and grounding first-class: full-text
and vector search can pull candidate facts, while Datalog queries and rules can
verify, connect, and constrain them. It can also support tool use, where the "tool
outputs" are simply more facts to join and reason over. For example, in a RAG
pipeline, vector search retrieves candidate snippets, graph relations link
them to entities and events, and rules enforce constraints such as provenance or
recency.&lt;/p&gt;
&lt;p&gt;Datalevin can serve as an agent's memory model, where episodic facts,
long-term knowledge, and computed embeddings all live in one place and can be
queried together. In that sense, a unified store is to an AI agent what memory
is to human cognition: the common ground where different kinds of signals meet
to be reasoned over.&lt;/p&gt;
&lt;p&gt;Even as AI writes more code, a simple and versatile database remains highly
AI-friendly. A context-limited LLM model benefits from a coherent data model and
a single query language that covers many use cases. Datalog is truly
declarative, meaning there are fewer procedural or implementation details for a
model to trip over. That translates to less boilerplate, fewer dialects to
remember, and fewer quirks in query semantics, making it more likely that the
system handles data correctly. In fact, AI wrote all the Datalevin queries used
in the LDBC SNB benchmark mentioned above. Although it is still a relatively
niche database, the AI composed queries for Datalevin with ease because the
query language is inherently simpler.&lt;/p&gt;
&lt;h2&gt;Next steps&lt;/h2&gt;
&lt;p&gt;The recent rule engine rewrite brings us much closer to the 1.0 release
milestone. With the addition of high availability, a JSON API, and libraries for
other languages, we expect to reach this milestone this year.&lt;/p&gt;
&lt;p&gt;After six years of continuous research and development, Datalevin would not be
in its current hardened state without the experimentation and production deployment
efforts of the Clojure community. I truly appreciate everyone who has used Datalevin
and made contributions. The future of simplified data storage and access is
near, for human and AI developers alike.&lt;/p&gt;</content><category term="experience"></category><category term="Datalevin"></category><category term="Database"></category><category term="Datalog"></category><category term="Triplestore"></category><category term="Graph"></category><category term="Rules"></category></entry><entry><title>Achieving High Throughput and Low Latency through Adaptive Asynchronous Transaction</title><link href="https://yyhh.org/blog/2025/02/achieving-high-throughput-and-low-latency-through-adaptive-asynchronous-transaction" rel="alternate"></link><published>2025-02-11T16:15:00+00:00</published><updated>2025-02-11T16:15:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2025-02-11:/blog/2025/02/achieving-high-throughput-and-low-latency-through-adaptive-asynchronous-transaction</id><summary type="html">&lt;p&gt;How Datalevin uses adaptive batching and asynchronous transactions to improve write throughput and latency, with benchmarks examining the trade-offs.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="/images/effective-throughput.png" alt="Effective Throughput" width="800"/&gt;&lt;/p&gt;
&lt;p&gt;In my &lt;a href="https://yyhh.org/blog/2024/09/competing-for-the-job-with-a-triplestore/"&gt;previous
post&lt;/a&gt;,
I demonstrated that Datalevin performs complex queries faster than PostgreSQL. A
common reaction is, "Oh, have you tested writing speed? I imagine that when
there are indices for everything (as in the case of Datalevin), writing speed
could be significantly slower." This post aims to address that write speed
concern.&lt;/p&gt;
&lt;p&gt;When discussing database write speed, &lt;strong&gt;throughput&lt;/strong&gt; and &lt;strong&gt;latency&lt;/strong&gt; are the two
key performance metrics. Throughput is the number of transactions the system can
process in a given amount of time—the higher the throughput, the better the
system. Latency is the amount of time it takes to process a single transaction
from start to finish. In durable databases, this refers to the time between when
the transaction starts and when the data is committed and flushed to disk. The
lower the latency, the better the system performs.&lt;/p&gt;
&lt;p&gt;Obviously, it is desirable to have both high throughput and low latency.
However, achieving both simultaneously is often challenging.&lt;/p&gt;
&lt;h2&gt;Throughput-Latency Trade-Off&lt;/h2&gt;
&lt;p&gt;To improve throughput, database systems often use batching techniques (grouping
many transactions together) to amortize the setup cost across multiple
transactions. In particular, the number of expensive disk flush operations can
be reduced dramatically through batching. However, waiting to accumulate a batch
may increase the latency for individual transactions.&lt;/p&gt;
&lt;p&gt;Conversely, processing transactions immediately reduces the wait time for each
transaction, lowering latency. Yet handling each transaction independently can
prevent the system from fully utilizing available resources, potentially
resulting in lower overall throughput.&lt;/p&gt;
&lt;h2&gt;Asynchronous Transaction&lt;/h2&gt;
&lt;p&gt;A well-implemented asynchronous transaction model has the potential to improve
both throughput and latency simultaneously. Instead of processing a transaction
immediately, an asynchronous transaction is placed in a queue—this provides an
opportunity to batch it with other transactions, thereby improving overall
throughput. Of course, it is still important to ensure that transactions do not
wait too long in the queue, which could hurt latency.&lt;/p&gt;
&lt;p&gt;Some databases implement asynchronous commit. For example, PostgreSQL’s
&lt;code&gt;synchronous_commit&lt;/code&gt; parameter can be set to &lt;code&gt;off&lt;/code&gt;. In this mode, the system
returns transaction success as soon as the transaction is logically
completed—before the generated WAL (Write-Ahead Log) records are actually
written to disk. However, this implementation compromises durability and
consistency guarantees. There is a short window between reporting transaction
completion and when the transaction is truly committed. If the system crashes
during this risk window, the changes made by that transaction may be lost.
PostgreSQL allows users to control the duration of this risk window by setting
&lt;code&gt;wal_writer_delay&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Adaptive Asynchronous Transaction&lt;/h2&gt;
&lt;p&gt;Striking a balance between the advantages of asynchronous processing and the
durability guarantees of transactions might seem challenging. In Datalevin, we
aim to take advantage of asynchronous transactions without compromising
durability. Moreover, having too many tuning parameters goes against our goal of
excellent database usability—there is really no good reason for a user to worry
about such low-level implementation details.&lt;/p&gt;
&lt;p&gt;To achieve these goals, I have implemented an adaptive asynchronous transaction
method in Datalevin.&lt;/p&gt;
&lt;p&gt;The idea is as follows. First, to maintain transaction durability, the
asynchronous transaction method returns a Clojure &lt;code&gt;future&lt;/code&gt;, which is only realized
once the transaction is fully committed and the data is flushed to disk. The
user can dereference the future to determine when the transaction is completed,
or block until it is. Alternatively, the method optionally accepts a
user-supplied callback function so that the user can be notified when the
transaction is complete.&lt;/p&gt;
&lt;p&gt;At first glance, these options might seem no different from a synchronous
transaction: the user still has to wait until the commit is completed. However,
the promise of asynchronous transactions is this: the wait will be shorter than
with synchronous transactions. If we can achieve a shorter wait time, we have
succeeded.&lt;/p&gt;
&lt;p&gt;How can we achieve a shorter wait time? As suggested above, one answer lies in
batching transactions.&lt;/p&gt;
&lt;p&gt;The challenge now is to find an appropriate batch size that minimizes wait time.
As argued earlier, setting a fixed batch size or preset time delay isn’t ideal.
Instead, the batch size—or equivalently, the wait time in the queue—should
depend on the system load.&lt;/p&gt;
&lt;p&gt;When the system is inundated with write requests, a larger batch size is useful
for dispatching many requests at once, thus improving throughput. On the other
hand, when the system is idle, a write request should be fulfilled immediately,
thus minimizing latency. In other words, we want a dynamic batch size that
adapts to system load.&lt;/p&gt;
&lt;p&gt;Another source of reduced wait time is improved concurrency. While waiting for
an I/O operation to complete, other tasks can use the CPU. Proper design allows
this overlapping of computation and I/O to effectively “hide” I/O wait times.&lt;/p&gt;
&lt;p&gt;The most direct way to achieve this is through a simple mechanism [1]: when
processing a queued asynchronous write event, the system checks its event queue
to see if there are other similar events waiting. If so, the system simply
ignores the duplicate event and moves on to the next one. Otherwise, it submits
a task to a worker thread pool to process the queued asynchronous transactions
in a batch.&lt;/p&gt;
&lt;p&gt;This mechanism exhibits the adaptive behavior described above. Under a heavy
load, the batch size increases; when the load is low, the batch size is small.
The available system resources are effectively utilized to optimize both
throughput and latency outcomes—without compromising durability.&lt;/p&gt;
&lt;h2&gt;Metric&lt;/h2&gt;
&lt;p&gt;In order to measure how well we have achieved our goal, we need a metric that
combines throughput and latency. Combining these two metrics into a single
number is challenging because they measure different aspects of performance and
have different units. There may not be a perfect answer, but here are a few
ideas.&lt;/p&gt;
&lt;p&gt;One simple composite is to compute a ratio such as &lt;code&gt;Throughput / Latency&lt;/code&gt;. A
higher value implies that the system is processing more transactions quickly
(i.e., achieving high throughput and low latency). However, if throughput is
measured in transactions per second and latency in seconds per transaction, the
ratio has units of &lt;code&gt;transactions squared per second&lt;/code&gt;, which makes its
interpretation less obvious.&lt;/p&gt;
&lt;p&gt;One way to refine this formula is to introduce a &lt;strong&gt;target latency&lt;/strong&gt; required by a
particular use case. For example, for low-latency applications that expect
sub-millisecond database transactions, the target latency might be 1
millisecond. For applications that can tolerate slightly higher latency, the
target might be 10 milliseconds.&lt;/p&gt;
&lt;p&gt;With a target latency in place, we can define an effective “good throughput” for
a given use case. One simple approach is to combine throughput with the fraction
of operations finishing within that target latency. For instance, one might
define a metric like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Effective Throughput = Actual Throughput × (Target Latency / Actual Latency)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This metric rewards systems that process many transactions and keep them within
acceptable latency boundaries. If the latency exceeds the target, the effective
throughput metric drops, reflecting a degraded user experience.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Effective Throughput (ET)&lt;/code&gt; is a use-case–dependent metric that is simple to
interpret. The higher the &lt;code&gt;ET&lt;/code&gt;, the better the system. It is also easy to
calculate, as its value is proportional to the target latency. For example, the
&lt;code&gt;ET&lt;/code&gt; for a 10-millisecond target is 10 times that for a 1-millisecond target.
Thus, we really only need to calculate the ratio of throughput to latency (i.e.,
for a target latency of 1 unit) and then extrapolate to other target latencies.
For the analysis below, we will adopt &lt;code&gt;ET&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Benchmark&lt;/h2&gt;
&lt;p&gt;To address the write-speed concerns of Datalevin, we compare Datalevin with
SQLite—the most widely used embedded database, renowned for its fast writes.
Although Datalevin can be used in a client/server mode, for this benchmark we
use it as an embedded database.&lt;/p&gt;
&lt;p&gt;Using the same dataset, we compare four transaction conditions: &lt;code&gt;Datalevin
Default&lt;/code&gt;, &lt;code&gt;Datalevin Async&lt;/code&gt;, &lt;code&gt;SQLite Default&lt;/code&gt;, and &lt;code&gt;SQLite WAL&lt;/code&gt;. These are all fully
durable transaction methods—a transaction is considered complete only after its
data is fully flushed to disk.&lt;/p&gt;
&lt;p&gt;Database transaction benchmark performance is highly sensitive to hardware and
the operating system; the numbers can vary widely between different machines. In
this benchmark run, we used a machine with a 2016 Intel Core i7-6850K CPU @
3.60GHz (6 cores), 64GB RAM, and a Samsung 860 EVO 1TB SSD. This machine
performs around the middle of the pack in &lt;a href="https://www.cpubenchmark.net/cpu.php?cpu=Intel+Core+i7-6850K+%40+3.60GHz&amp;amp;id=2800"&gt;Today's CPU
Benchmark&lt;/a&gt;,
so it is reasonably representative.&lt;/p&gt;
&lt;p&gt;The code and detailed description of the benchmark can be found in &lt;a href="https://github.com/juji-io/datalevin/tree/master/benchmarks/write-bench"&gt;our GitHub
repository&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Pure Write&lt;/h3&gt;
&lt;p&gt;The benchmark has two tasks. The first is a pure write task, where each write
consists of an entity (row) with two attributes (columns). Every 10,000 writes,
we measure the throughput and latency. In addition to individual writes, we also
measure performance when writing data in batches—testing batch sizes of 10, 100,
and 1000.&lt;/p&gt;
&lt;p&gt;Using the &lt;code&gt;Effective Throughput (ET)&lt;/code&gt; metric described above, the bar chart at the
top of this post shows the pure write task results. (Note: the Y axis is
logarithmic.)&lt;/p&gt;
&lt;p&gt;When the batch size is 1 (i.e., writing a single entity at a time), &lt;code&gt;Datalevin
Async&lt;/code&gt; achieves the best &lt;code&gt;ET&lt;/code&gt;. It is several orders of magnitude higher than under
other write conditions—not only is the raw throughput high (16,829.2 writes per
second), the latency is low (0.1 milliseconds) as well. When writes are batched,
the &lt;code&gt;ET&lt;/code&gt; of &lt;code&gt;Datalevin Async&lt;/code&gt; slightly decreases due to the latency increasing
faster than throughput.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Datalevin Default&lt;/code&gt; performance peaks at a batch size of 100; however, at that
batch size, SQLite’s performance outperforms it.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SQLite Default&lt;/code&gt; performs very poorly for individual writes, though &lt;code&gt;SQLite WAL&lt;/code&gt; is
much better. Both benefit significantly from increased batch sizes, with &lt;code&gt;SQLite
Default&lt;/code&gt; benefiting the most.&lt;/p&gt;
&lt;p&gt;In general, Datalevin's write performance is more stable and less sensitive to
variations in batch size compared to SQLite. Because Datalevin performs indexing
at transaction time, its write performance does not benefit as much from
increased batch sizes.&lt;/p&gt;
&lt;p&gt;For an operational database, each transaction normally contains a small number
of entities (or rows), as recommended by industry best practices [2]. In these
online transaction processing (OLTP) workloads, Datalevin is expected to perform
better than SQLite.&lt;/p&gt;
&lt;p&gt;For use cases involving the bulk loading of data, Datalevin provides &lt;code&gt;init-db&lt;/code&gt; and
&lt;code&gt;fill-db&lt;/code&gt; functions that bypass the expensive transactional processes and are more
appropriate.&lt;/p&gt;
&lt;h3&gt;Mixed Read/Write&lt;/h3&gt;
&lt;p&gt;After one million entities (rows) have been loaded, the second task alternates
between reading a row and writing a row until one million reads and one million
writes have been performed. For this task, we report the results using Linux’s
&lt;code&gt;time&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;The first chart shows wallclock time, while the second shows
user and system CPU time.&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/wallclock-time.png" alt="Mixed Read/Write Wallclock Time" width="400"&gt;
&lt;img src="/images/cpu-time.png" alt="Mixed Read/Write CPU Time" width="370"&gt;&lt;/p&gt;
&lt;p&gt;For the mixed read/write task, &lt;code&gt;Datalevin Default&lt;/code&gt; is much faster than &lt;code&gt;SQLite
Default&lt;/code&gt;, and &lt;code&gt;Datalevin Async&lt;/code&gt; is much faster than &lt;code&gt;SQLite WAL&lt;/code&gt;, while &lt;code&gt;SQLite
WAL&lt;/code&gt; outperforms &lt;code&gt;Datalevin Default&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Regarding CPU time, the differences among the various conditions are small,
indicating that the underlying amount of work is not hugely different.&lt;/p&gt;
&lt;p&gt;Notice that in the three synchronous conditions—&lt;code&gt;Datalevin Default&lt;/code&gt;, &lt;code&gt;SQLite
Default&lt;/code&gt;, and &lt;code&gt;SQLite WAL&lt;/code&gt;—most of the time is spent waiting for I/O, with CPU
times being relatively small compared to the wallclock time. &lt;code&gt;Datalevin Async&lt;/code&gt;
is different; its total CPU time (227.89 seconds) is actually greater than its
wallclock time (111.04 seconds), indicating effective utilization of multicore
processing and an apparent hiding of I/O wait times. This result confirms our
hypothesized advantage of asynchronous transactions.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We can now answer the question about Datalevin's write speed: it performs better
than SQLite under OLTP workloads. While the default synchronous write mode
performs at a respectable level, Datalevin truly shines with asynchronous
transactions, achieving both high throughput and low latency without
compromising transaction durability.&lt;/p&gt;
&lt;h2&gt;Reference&lt;/h2&gt;
&lt;p&gt;[1] Nathan Marz, "2.5x Better Performance: Rama vs. MongoDB and Cassandra",
April 2024.
(https://blog.redplanetlabs.com/2024/04/25/better-performance-rama-vs-mongodb-and-cassandra/)&lt;/p&gt;
&lt;p&gt;[2] Gray, J., &amp;amp; Reuter, A. Transaction Processing: Concepts and Techniques.
Morgan Kaufmann Publishers, 1993.&lt;/p&gt;</content><category term="experience"></category><category term="Datalevin"></category><category term="Database"></category><category term="Clojure"></category></entry><entry><title>Competing for the JOB with a Triplestore</title><link href="https://yyhh.org/blog/2024/09/competing-for-the-job-with-a-triplestore" rel="alternate"></link><published>2024-09-10T18:49:00+00:00</published><updated>2024-09-10T18:49:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2024-09-10:/blog/2024/09/competing-for-the-job-with-a-triplestore</id><summary type="html">&lt;p&gt;How Datalevin's triplestore became competitive with PostgreSQL on the Join Order Benchmark, with a look at Datalog and complex query optimization.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="/images/job-means.png" alt="JOB performance" width="450"/&gt;&lt;/p&gt;
&lt;p&gt;This is a post about &lt;a href="https://github.com/juji-io/datalevin"&gt;Datalevin&lt;/a&gt;, an
open-source database system that I have been building since 2020. Although JOB
here is really an acronym for &lt;a href="https://github.com/gregrahn/join-order-benchmark"&gt;Join Order
Benchmark&lt;/a&gt;, a benchmark for
complex database queries, I intend to build up Datalevin to compete for the same
kind of jobs usually held by a
&lt;a href="https://en.wikipedia.org/wiki/Relational_database"&gt;RDBMS&lt;/a&gt;. I hope this title is
received well and not seen as just a pun :-). This post describes my journey in
making Datalevin competitive in the JOB benchmark, where it outperformed
PostgreSQL by a small margin.&lt;/p&gt;
&lt;p&gt;Datalevin is a &lt;a href="https://en.wikipedia.org/wiki/Triplestore"&gt;triplestore&lt;/a&gt;, which
means it stores data in units of three elements known as triples. Specifically,
the three elements are entity (&lt;code&gt;E&lt;/code&gt;), attribute (&lt;code&gt;A&lt;/code&gt;) and value (&lt;code&gt;V&lt;/code&gt;). For
example, to store a piece of information: a person is named "John Smith", &lt;code&gt;E&lt;/code&gt;
would be the entity id number of this person, &lt;code&gt;A&lt;/code&gt; would be an attribute named
&lt;code&gt;:person/name&lt;/code&gt; , and &lt;code&gt;V&lt;/code&gt; would be "John Smith", the attribute value of
the entity.&lt;/p&gt;
&lt;p&gt;Unlike what the Wikipedia page of triplestore seems to suggest, a triplestore
is not necessarily about Semantic Web use cases. Datalevin is a general purpose
database system that follows an approach pioneered by
&lt;a href="https://en.wikipedia.org/wiki/Datomic"&gt;Datomic&lt;/a&gt;, and uses its flavor of
&lt;a href="https://en.wikipedia.org/wiki/Datalog"&gt;Datalog&lt;/a&gt; as the query language.&lt;/p&gt;
&lt;h2&gt;Why Datalog?&lt;/h2&gt;
&lt;p&gt;The flavor of Datalog used in Datalevin can be considered a modern alternative
to SQL.&lt;/p&gt;
&lt;p&gt;There have been many articles discussing the limitations of SQL as a database
query language, such as &lt;a href="https://www.scattered-thoughts.net/writing/against-sql"&gt;Against
SQL&lt;/a&gt; and &lt;a href="https://www.edgedb.com/blog/we-can-do-better-than-sql"&gt;We can do
better than SQL&lt;/a&gt;, and I
am sympathetic towards those views and recommend readers to look into them.&lt;/p&gt;
&lt;p&gt;One point I would like to add, from a point of view of human computer
interaction, is related to the historical context of SQL [1]. As one of those
ALL CAP languages (e.g. COBOL), SQL was from an era when enthusiastic computer
scientists believed that &lt;a href="https://en.wikipedia.org/wiki/Structured_English"&gt;structured
English&lt;/a&gt; could be a good human
interface to computers. The rationale was that business people could be taught
to use such languages to communicate with computers. We all know how that turned
out: business people are allergic to any kind of formal languages, i.e. code, so
these languages still end up as tools for programmers only. However, structured
English makes for poor programming languages, because it is difficult to parse,
compose or extend. SQL is the most stubborn left-over from those ill-considered
experiments, perhaps due to the fact that data often last longer than programs.&lt;/p&gt;
&lt;p&gt;Datalog used in Datalevin does not have such historical baggage. Let us look at
an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;;; query about persons who are adult males, whose name ends with Smith&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:find&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?name&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:where&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:person/age&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?age&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:person/name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nf"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%Smith&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt;= &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?age&lt;/span&gt;&lt;span class="p"&gt;)]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Similar to SQL's &lt;code&gt;SELECT&lt;/code&gt; and &lt;code&gt;WHERE&lt;/code&gt;, this flavor of Datalog has explicit
&lt;code&gt;:find&lt;/code&gt; and &lt;code&gt;:where&lt;/code&gt; sections, so it is easier to grok than the original Datalog
syntax from Prolog, which read like math expressions. Unlike SQL though, this
query language is represented as a data structure in
&lt;a href="https://github.com/edn-format/edn"&gt;EDN&lt;/a&gt; format, which is amicable to
programmatic manipulation, just like JSON.&lt;/p&gt;
&lt;p&gt;Each where clause is delimited by a pair of &lt;code&gt;[ ]&lt;/code&gt;. All the where clauses are
AND'ed together, i.e. they all must evaluate to be true for the query to return
non-empty results. There are two types of where clauses in this query: triple
patterns and predicates.&lt;/p&gt;
&lt;p&gt;Just like a triple, a triple pattern consists of Entity (E), Attribute (A) and
Value (V), in that order. Any of the three elements could be a variable, which
is a user defined symbol starting with a &lt;code&gt;?&lt;/code&gt;. For example, triple pattern
&lt;code&gt;[?person :person/age 18]&lt;/code&gt; says that there are entities that we name with a
variable &lt;code&gt;?person&lt;/code&gt;, and they have an attribute &lt;code&gt;:person/age&lt;/code&gt; with the value
&lt;code&gt;18&lt;/code&gt;. Triple patterns must match with the data, so that variables can be bound
with values from the database. For this pattern, &lt;code&gt;?person&lt;/code&gt; would be bound with
entity IDs of all persons aged 18 in the database.&lt;/p&gt;
&lt;p&gt;Predicates are boolean functions, and they are enclosed in a pair of &lt;code&gt;( )&lt;/code&gt;.
The first element inside the parentheses is the function name, e.g. &lt;code&gt;like&lt;/code&gt;,
&lt;code&gt;&amp;lt;=&lt;/code&gt;, and so on, and the rest are the function arguments. All the predicates must
evaluate to be true for the query to return non-empty results.&lt;/p&gt;
&lt;p&gt;That's it, the syntax of Datalevin's Datalog. There are neither complex syntactic
rules, nor hundreds of reserved words.&lt;/p&gt;
&lt;p&gt;More importantly, Datalog is very high level and truly declarative. It does not
expose low level technical details of database operations to the users, nor
requires the users to speak database jargons or be a relational algebra expert
to use the language well. For example, the user is not required to understand
the concept of joins, let alone the many different types of joins: inner, left,
right, full, self joins, etc.&lt;/p&gt;
&lt;p&gt;Joins are implicit in Datalog and are completely oblivious for the users. All
users need to focus on are the logic relationships in their data, the rest is
left for the database system to figure out. Datalog greatly simplifies the
writing of complex queries. This is perhaps the main strength of this query
language. My experience in onboarding new users has been that it normally took
people less than half an hour to become a competent Datalog query writer.&lt;/p&gt;
&lt;p&gt;Regardless the language level differences, Datalog in Datalevin is still backed
up by a computational substrate based on relational algebra. It just treats
relational algebra as underlying implementation details that users should not be
concerned with.&lt;/p&gt;
&lt;h2&gt;Why a triple store?&lt;/h2&gt;
&lt;p&gt;When people talk about relational databases, they often assume it's a row store
or a column store, as if relational algebra has something to do with how a table
is stored. But, it doesn't. As a mathematical theory, relational algebra does
not specify how a relation should be stored in computers. Therefore, in addition
to storing a relation as rows or columns, storing it as triples are equally
sound, if not better.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Example Data" src="/images/example-data.png"&gt;&lt;/p&gt;
&lt;p&gt;For example, for the data set above, a row store would store them as two tables.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Person Table" src="/images/person-table.png"&gt;
&lt;img alt="School Table" src="/images/school-table.png"&gt;&lt;/p&gt;
&lt;p&gt;Storing a table as triples means storing the table as a list of table cells,
i.e. as a list of the smallest identifiable units of the table.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Triples in EAV order" src="/images/triples-eav.png"&gt;&lt;/p&gt;
&lt;p&gt;Storing table cells as rows or columns are just two concrete ways of bundling
the table cells together for efficiency purpose, so that column identifiers or
row identifier would not need to be repeated. That is to say, they are
optimizations. So, the question is, are these "premature optimizations"?&lt;/p&gt;
&lt;p&gt;I argue that they are. One problem with fixating the storage to
either a row or a column format, is that it impedes querying the data later on.
Specifically, it makes the work of query optimizer unnecessarily hard.&lt;/p&gt;
&lt;p&gt;Essentially, both row and column storage are place oriented: table cells are
identified by positions, rather than by explicit identifiers. One consequence is
that missing data cells still have to be represented positionally, i.e. they
need to take up places. RDBMS normally store these as special &lt;code&gt;null&lt;/code&gt; values.
This is what complicates the collection of statistics of table cells, which a
query optimizer demands: it needs to know how many non-null data points it is
dealing with under all kinds of conditions. The place based storage does not
have a cheap way of providing this information, because any position could hold
a &lt;code&gt;null&lt;/code&gt; value, or not.&lt;/p&gt;
&lt;p&gt;To work around this problem, RDBMS resorts to expensive and complicated
processes to collect various approximations of exact data counts, e.g.
histograms. Still, the lack of direct information often
forces the optimizer to make unrealistically simplistic statistical assumptions
about data distribution, e.g. independence, uniformity, and so on. This so
called "cardinality estimation" problem is such a notoriously hard topic in
database research that it is sometimes called "Achilles Heel" of database
query processing [2].&lt;/p&gt;
&lt;p&gt;In a triplestore, each table cell is identified explicitly by both row and
column, e.g. &lt;code&gt;E&lt;/code&gt; is the row, &lt;code&gt;A&lt;/code&gt; is the column, and &lt;code&gt;V&lt;/code&gt; is the value. A triple
alone has complete information about a piece of data. Hence, a triple is called
a &lt;code&gt;datom&lt;/code&gt; (data atom) in this flavor of Datalog. Some simplifications
naturally arise in such a triplestore.&lt;/p&gt;
&lt;p&gt;In a triplestore, a missing table cell is simply missing from the storage:
&lt;code&gt;null&lt;/code&gt; is not stored, and absence means &lt;code&gt;null&lt;/code&gt;. To remove a piece of data, one
actually removes it from the storage, instead of setting some values to
&lt;code&gt;null&lt;/code&gt;. This is a critical simplification that enables easy and accurate counting
of non-null data in the database.&lt;/p&gt;
&lt;p&gt;Another simplification is that the entire database is essentially just one big
table. &lt;code&gt;E&lt;/code&gt; and &lt;code&gt;A&lt;/code&gt; are all globally scoped. In Datalevin, &lt;code&gt;E&lt;/code&gt; is represented as
a 64 bit integer, and &lt;code&gt;A&lt;/code&gt; a 32 bit integer. Database schema specifies only
information about each attribute, e.g. its id, data type, uniqueness, and so on.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;;; Datalevin schema for the example data above&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:person/name&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:db/aid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db/valueType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db.type/string&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:person/age&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:db/aid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db/valueType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db.type/long&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:person/school&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:db/aid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db/valueType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db.type/ref&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:school/name&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:db/aid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db/valueType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db.type/string&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:school/city&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:db/aid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db/valueType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:db.type/string&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Information about individual tables are no longer necessary. Name
spaced attribute names still allow grouping of attributes, e.g. &lt;code&gt;:person/name&lt;/code&gt;,
&lt;code&gt;person/age&lt;/code&gt; are attributes of &lt;code&gt;person&lt;/code&gt; entity, but this is just a convention,
not a physically separated table. Tables dedicated to joins also disappear, as
they are simply handled by attributes with entity id as values (i.e. of
reference data type: &lt;code&gt;:db.type/ref&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The atomic nature of a datom allows maximum flexibility, as these datoms can be
arranged in ways that facilitate querying them. For example, if datoms are
ordered by &lt;code&gt;E&lt;/code&gt; first, then &lt;code&gt;A&lt;/code&gt;, then &lt;code&gt;V&lt;/code&gt;, one essentially gets a row major
storage that has the similar properties of a row store. If datoms are ordered by
&lt;code&gt;A&lt;/code&gt; first, one gets a column major storage that has the same advantage of a
column store. Tripestores often store data in both orderings, so that
essentially all data are indexed by default. Not having to manage indices can
save some headache.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Triples in AVE order" src="/images/triples-ave.png"&gt;&lt;/p&gt;
&lt;p&gt;Obviously, the storage of triplestores is redundant, as row identifiers and
column identifiers are repeated. If storing both row major and column major
data ordering, even more storage spaces are taken. More data means higher I/O
demand, and slower querying may be resulted. This is perhaps the main challenge
that has prevented the widespread use of triplestores.&lt;/p&gt;
&lt;p&gt;I argue that this data storage redundancy problem is easier to mitigate than the
hard problem of cardinality estimation resulted from bundling table cells as
rows or columns. For example, prefix compression could be used to minimize the
repetition. Datalevin utilizes this strategy by storing data in a two level
nesting schema: &lt;code&gt;AV&lt;/code&gt; is nested underneath &lt;code&gt;E&lt;/code&gt; in &lt;code&gt;EAV&lt;/code&gt; ordering, and &lt;code&gt;E&lt;/code&gt;
underneath &lt;code&gt;AV&lt;/code&gt; in &lt;code&gt;AVE&lt;/code&gt; ordering. Obviously, three level nesting can further
reduce data redundancy.&lt;/p&gt;
&lt;p&gt;Critically, with unbundled table cells in triplestores, the problem of
cardinalty estimation can be solved with straightforward counting or sampling.
I argue that this advantage is perhaps a good reason to use a triplestore. As a
demonstration, Datalevin employed this simple strategy of counting and sampling
to achieve better performance than PostgreSQL in JOB benchmark.&lt;/p&gt;
&lt;h2&gt;Join Order Benchmark (JOB)&lt;/h2&gt;
&lt;p&gt;This benchmark aims to test a database query optimizer's capacity to handle
complex queries that involve many joins [3]. Based on Internet Movie Database,
113 analytical SQL queries were developed to have between 3 and 16 joins, with
an average of 8 joins per query. These SQL queries were translated into the
equivalent Datalevin queries, which were verified to produce exactly the same
results as corresponding SQL ones.&lt;/p&gt;
&lt;p&gt;The tests were conducted on a MacBook Pro Nov 2023, Apple M3 Pro chip, 6
performance cores and 6 efficiency cores, 36GB memory, and 1TB SSD disk.&lt;/p&gt;
&lt;p&gt;On average, Datalevin is about 1.3 times faster than PostgreSQL 16 in this
benchmark. More details can be found
&lt;a href="https://github.com/juji-io/datalevin/tree/master/benchmarks/JOB-bench"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Analysis&lt;/h2&gt;
&lt;p&gt;Given that Datalevin is written in Clojure — a functional programming language
on JVM, not widely known for speed, and PostgreSQL is written in highly
optimized C code, it's clear that the query optimizer of Datalevin generates
better execution plans than that of PostgreSQL on average.&lt;/p&gt;
&lt;p&gt;As I will show with an example, Datalevin's better plan is mainly achieved by
having more accurate estimate of result sizes at each execution step,
corroborating with the point argued above regarding the superiority of
triplestores.&lt;/p&gt;
&lt;p&gt;Query 20a of JOB is what PostgreSQL did the worst compared with Datalevin. It took
PostgreSQL over a minute to execute its plan whereas Datalevin took about a
second. Let us look at the SQL query first.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;-- query 20a&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;MIN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;complete_downey_ironman_movie&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;complete_cast&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;comp_cast_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cct1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;comp_cast_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cct2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;char_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;cast_info&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;kind_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;movie_keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cct1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cast&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cct2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LIKE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%complete%&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LIKE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%Sherlock%&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LIKE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%Tony%Stark%&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="k"&gt;OR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LIKE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;%Iron%Man%&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;IN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;superhero&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sequel&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;second-part&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;marvel-comics&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;based-on-comic&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tv-special&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;fight&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;violence&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;movie&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;production_year&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1950&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;kt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;movie_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;chn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;person_role_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keyword_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cct1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subject_id&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cct2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The PostgreSQL &lt;code&gt;EXPLAIN ANALYZE&lt;/code&gt; output for this query:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;                                                                                          &lt;/span&gt;&lt;span class="nx"&gt;QUERY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PLAN&lt;/span&gt;
&lt;span class="o"&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;21.78&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2474.54&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;17052.871&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.72628.822&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;21.35&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2474.09&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;17052.352&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.72626.880&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;20.93&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2473.63&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;17042.110&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.72584.290&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1314&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;20.50&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2473.17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;1.352&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.35903.879&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;87986607&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nx"&gt;Join&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movie_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;20.06&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2471.42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;1.124&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.3346.138&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;978322&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;19.63&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2469.68&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.703&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2394.487&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;28583&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;19.48&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2469.50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.688&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2362.288&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;73560&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Nested&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Loop&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;19.05&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2467.72&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.444&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.41.257&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;85941&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                             &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Hash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Join&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;18.89&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2462.46&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;190&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.416&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.22.960&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;135086&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="nx"&gt;Hash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cct2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Seq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;complete_cast&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cc&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.00&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.2086.86&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;135086&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.365&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.6.616&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;135086&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Hash&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;18.88&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.18.88&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.035&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.035&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                         &lt;/span&gt;&lt;span class="nx"&gt;Buckets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Batches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Usage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="nx"&gt;kB&lt;/span&gt;
&lt;span class="w"&gt;                                                         &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Seq&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;comp_cast_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cct2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.00&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.18.88&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.027&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.028&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                               &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;complete&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                               &lt;/span&gt;&lt;span class="nx"&gt;Rows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="w"&gt;                                             &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Memoize&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.16&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.18&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.000&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;135086&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="nx"&gt;Cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subject_id&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="nx"&gt;Cache&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;logical&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="nx"&gt;Hits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;135084&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Misses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Evictions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Overflows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Memory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Usage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;kB&lt;/span&gt;
&lt;span class="w"&gt;                                                   &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;comp_cast_type_pkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;comp_cast_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cct1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.119&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.119&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                         &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subject_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                         &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;cast&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                                         &lt;/span&gt;&lt;span class="nx"&gt;Rows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;title_pkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.43&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.1.78&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.027&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.027&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;85941&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                             &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movie_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                             &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;production_year&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1950&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                             &lt;/span&gt;&lt;span class="nx"&gt;Rows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kind_type_pkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kind_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kt&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.17&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.000&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;73560&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="nx"&gt;movie&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                       &lt;/span&gt;&lt;span class="nx"&gt;Rows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;movie_id_movie_keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;movie_keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mk&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.43&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.1.29&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;46&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.024&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.031&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;34&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;28583&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;movie_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;movie_id_cast_info&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cast_info&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.44&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.1.31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.028&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;978322&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                           &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;movie_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movie_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;char_name_pkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;char_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;chn&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.43&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.46&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.000&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;87986607&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;person_role_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="o"&gt;~~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;Sherlock&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;Tony&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;Stark&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;OR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;Iron&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;Man&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;                     &lt;/span&gt;&lt;span class="nx"&gt;Rows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;keyword_pkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.42&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.45&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.032&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.032&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1314&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keyword_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ANY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;superhero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;sequel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;part&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;marvel&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;comics&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;based&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;comic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tv&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;special&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;fight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;violence&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;[]))&lt;/span&gt;
&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nx"&gt;Rows&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Scan&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name_pkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.43&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.45&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;actual&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;0.059&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.0.059&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nx"&gt;Index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cond&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nx"&gt;Heap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Fetches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Planning&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m m-Double"&gt;28.727&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Execution&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m m-Double"&gt;72629.051&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As can be seen, the catastrophic running time is mainly due to vastly
underestimated result join sizes, leading to sub-optimal join order. For
instance, the planner estimated that the hash join of &lt;code&gt;complete_cast&lt;/code&gt; and
&lt;code&gt;comp_cast_type&lt;/code&gt; would produce 190 rows but actually got 135086 rows. Similar
under-estimation is persisted and its effect accumulated, eventually reaching a
staggering 1 vs. 87986607 discrepancy with actual result size.&lt;/p&gt;
&lt;p&gt;These underestimations are due to the strong statistical assumptions its
estimator makes: value uniformity and column independence. However, the actual
value distribution is highly skewed and the columns are highly correlated with
one another, as it is often the case in real world datasets. I would like to
point out that this problem is not unique to PostgreSQL, but in fact common in
all row based RDBMS [3]. These strong assumptions are necessary because more
direct information is not available in row stores.&lt;/p&gt;
&lt;p&gt;Datalevin does not rely on such strong statistical assumptions to estimate join
result size. Instead, it simply counts or samples to obtain the base selectivity
ratios. Then, for each pair of base relations, it actually executes the joins
using the samples, and thus obtains the pair-wise join selectivity ratios. These
ratios are simply used in estimation of join sizes in later joins. The only
assumption it makes is that the selectivity ratios of pair-wise joins are
similar to those of later joins. If the samples are representative, this
assumption would not be too off base.&lt;/p&gt;
&lt;p&gt;For query 20a, the corresponding Datalog query is the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;;; query 20a&lt;/span&gt;

&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:find&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;min &lt;/span&gt;&lt;span class="nv"&gt;?t.title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="ss"&gt;:where&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?cct1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:comp-cast-type/kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;cast&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?cct2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:comp-cast-type/kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?cct2.kind&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nf"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?cct2.kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%complete%&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?chn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:char-name/name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?chn.name&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nf"&gt;not-like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?chn.name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%Sherlock%&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nb"&gt;or &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?chn.name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%Tony%Stark%&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;like&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?chn.name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%Iron%Man%&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?k&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:keyword/keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?k.keyword&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nf"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?k.keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;superhero&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;sequel&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;second-part&amp;quot;&lt;/span&gt;,
&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;marvel-comics&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;based-on-comic&amp;quot;&lt;/span&gt;,
&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tv-special&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fight&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;violence&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?kt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:kind-type/kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;movie&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:title/production-year&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?t.production-year&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nb"&gt;&amp;lt; &lt;/span&gt;&lt;span class="mi"&gt;1950&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?t.production-year&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:title/kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?kt&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?mk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:movie-keyword/movie&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?t&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?ci&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:cast-info/movie&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?t&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?cc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:complete-cast/movie&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?t&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?ci&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:cast-info/person-role&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?chn&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?ci&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:cast-info/person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?n&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?mk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:movie-keyword/keyword&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?k&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?cc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:complete-cast/subject&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?cct1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?cc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:complete-cast/status&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?cct2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;?t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;:title/title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;?t.title&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;:plan&lt;/code&gt; portion of the &lt;code&gt;explain&lt;/code&gt; output is the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;[[{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Initialize [?k ?k.keyword] by range [[[:closed \&amp;quot;based-on-comic\&amp;quot;] [:closed \&amp;quot;based-on-comic\&amp;quot;]] [[:closed \&amp;quot;fight\&amp;quot;] [:closed \&amp;quot;fight\&amp;quot;]] [[:closed \&amp;quot;marvel-comics\&amp;quot;] [:closed \&amp;quot;marvel-comics\&amp;quot;]] [[:closed \&amp;quot;second-part\&amp;quot;] [:closed \&amp;quot;second-part\&amp;quot;]] [[:closed \&amp;quot;sequel\&amp;quot;] [:closed \&amp;quot;sequel\&amp;quot;]] [[:closed \&amp;quot;superhero\&amp;quot;] [:closed \&amp;quot;superhero\&amp;quot;]] [[:closed \&amp;quot;tv-special\&amp;quot;] [:closed \&amp;quot;tv-special\&amp;quot;]] [[:closed \&amp;quot;violence\&amp;quot;] [:closed \&amp;quot;violence\&amp;quot;]]] on :keyword/keyword.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge ?mk by reverse reference of :movie-keyword/keyword.&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge [?t] by scanning [:movie-keyword/movie].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;41&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;35549&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;35548&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge ?cc by equal values of :complete-cast/movie.&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge [?cct2 ?cct1] by scanning [:complete-cast/status :complete-cast/subject].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;147569&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;11909&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12810&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge ?ci by equal values of :cast-info/movie.&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge [?chn ?n] by scanning [:cast-info/person-role :cast-info/person].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;196991&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;472311&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;476091&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge [?chn.name] by scanning [:char-name/name].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;2180697&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;472&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge [?t.title ?kt ?t.production-year] by scanning [:title/title :title/kind :title/production-year].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;2184661&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;472&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Filter by predicates on [:comp-cast-type/kind].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;2186643&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;472&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Filter by predicates on [:kind-type/kind].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;2188625&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;472&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:steps&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Merge [?cct2.kind] by scanning [:comp-cast-type/kind].&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:cost&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;2190607&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;472&lt;/span&gt;,
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;:actual-size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;}]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As can be seen, the estimated join sizes are close to the actual sizes.
Particularly for the initial steps, the estimations are almost exact.
For data sizes that smaller than a user configured threshold, actual
counting of the data is performed, while sampling was performed for larger
data sizes. Both are performed under query specific conditions.&lt;/p&gt;
&lt;p&gt;Compared with the tree shape of the PostgreSQL's plan, the plan in Datalevin is
linear, because we only consider left-deep join tree. We join one base relation
at a time in order to take advantage of the accurate counting and sampling of
base relations.&lt;/p&gt;
&lt;p&gt;Counting and sampling under query conditions are straightforward in Datalevin,
thanks to the nested triple storage. Applicable value predicates are translated
into range queries in AVE ordering of triples. When both &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;V&lt;/code&gt; are known,
obtaining the count is a constant time operation. When &lt;code&gt;V&lt;/code&gt; is a range, the count
is just the sum of the counts in range; The only missing information is the total
count of &lt;code&gt;A&lt;/code&gt;, which is easily maintained during transaction.&lt;/p&gt;
&lt;p&gt;More details of the Datalevin query planner and execution engine can be found
&lt;a href="https://github.com/juji-io/datalevin/blob/master/doc/query.md"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;With Datalevin, I have demonstrated that a triplestore has some unique advantages
compared with row or column based databases. It helps with solving the difficult
problem of cardinality estimation, while its shortcomings can be easily
mitigated by nested storage of triples. Paired with a Datalog query language, it
makes a promising choice as a modern alternative to SQL RDBMS, as it is much
more ergonomic.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;p&gt;[1] Chamberlin, D. and Boyce, R..  "SEQUEL: A Structured English Query
Language", Proc. ACM SIGFIDET Workshop on Data Description Access and Control.
1974.&lt;/p&gt;
&lt;p&gt;[2] Leis, V., et al. "Cardinality Estimation Done Right: Index-Based Join
Sampling." Cidr. 2017.&lt;/p&gt;
&lt;p&gt;[3] Leis, V., et al. "How good are query optimizers, really?." VLDB
Endowment. 2015.&lt;/p&gt;</content><category term="experience"></category><category term="Datalevin"></category><category term="Database"></category><category term="Clojure"></category></entry><entry><title>Why Clojure is not widely adopted like mainstream languages?</title><link href="https://yyhh.org/blog/2022/06/why-clojure-is-not-widely-adopted-like-mainstream-languages" rel="alternate"></link><published>2022-06-07T06:35:41+00:00</published><updated>2022-06-07T06:35:41+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2022-06-07:/blog/2022/06/why-clojure-is-not-widely-adopted-like-mainstream-languages</id><summary type="html">&lt;p&gt;Examining how programming languages become mainstream, and what corporate support, education, and popular use cases imply for Clojure's adoption.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Someone asked on Reddit: &lt;a href="https://www.reddit.com/r/Clojure/comments/v6fzur/why_clojure_is_not_widely_adopted_like_mainstream/"&gt;Why Clojure is not widely adopted like mainstream languages?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here's my answer:&lt;/p&gt;
&lt;p&gt;You probably should have flipped the question, because the vast majority of programming languages are not mainstream.&lt;/p&gt;
&lt;p&gt;The more insightful question is: "Why and how did a language X become mainstream?"&lt;/p&gt;
&lt;p&gt;From the answers to this flipped question, we may induce some patterns that other languages could try to imitate. &lt;/p&gt;
&lt;p&gt;Let's give it a try, by looking at the most popular languages as of today:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt;: Some big corporations adopted it early on, e.g. Google; some well-connected people started to prompt it as the first language, then schools started following the suggestion; now it enjoys dominance in machine learning - the most hyped field.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt;: A readable assembly, so almost all operating systems are written in it; you must use it if you want to interface with hardware; all students in the last generation learnt it in school.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Java&lt;/strong&gt;: Heavily prompted by its corporate creator that enjoyed a high status among developers; billed as something solving most problems at that time; consequently widely adopted by other big corporations as well; so it was taught in schools everywhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C++&lt;/strong&gt;: billed as the next step of C, due to the wise choice of its name; heavily prompted by tooling companies such as Microsoft, for it was so complex, their tooling were required; all the "serious" computer science students are then proud of their skills in C++, because only they can master it, non-CS students would not be able to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C#&lt;/strong&gt;: Microsoft's answer to Java. Microsoft betted the company on it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual Basic&lt;/strong&gt;: non-programmer's only option for a very long time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Javascript&lt;/strong&gt;: the Web's only frontend option for a very long time.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So the tricks to popularity seems to be, in order of importance:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Big company backing&lt;/li&gt;
&lt;li&gt;Niche dominance&lt;/li&gt;
&lt;li&gt;School adoption&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Clojure's only hope is 2. Maybe 1, if one of the companies using Clojure becomes wildly successful. Then 3 will follow.&lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;</content><category term="opinion"></category><category term="Clojure"></category><category term="Programming"></category></entry><entry><title>T-Wand: Beat Lucene in Less Than 600 Lines of Code</title><link href="https://yyhh.org/blog/2021/11/t-wand-beat-lucene-in-less-than-600-lines-of-code" rel="alternate"></link><published>2021-11-05T14:49:00+00:00</published><updated>2021-11-05T14:49:00+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2021-11-05:/blog/2021/11/t-wand-beat-lucene-in-less-than-600-lines-of-code</id><summary type="html">&lt;p&gt;The design of Datalevin's compact Clojure search engine, its T-Wand algorithm, and the full-text search benchmarks comparing it with Apache Lucene.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="Query Throughput" src="/images/QueryPerSecond.png"&gt;&lt;/p&gt;
&lt;p&gt;Here is the story. I am adding full-text search capability to &lt;a href="https://github.com/juji-io/datalevin"&gt;Datalevin&lt;/a&gt;, a Datalog database that we open sourced last year. For this task, I have decided to write a search engine from scratch instead of using an existing search library. &lt;a href="https://github.com/juji-io/datalevin/blob/master/doc/search.md#rationale"&gt;Here&lt;/a&gt; are some rationales for this decision. Today I finished the main work of the search engine, and ran some &lt;a href="https://github.com/juji-io/datalevin/tree/master/search-bench"&gt;benchmark&lt;/a&gt; comparison with &lt;a href="https://lucene.apache.org/"&gt;Apache Lucene&lt;/a&gt;, the venerable Java search library, and found that the Datalevin search engine is 75% faster on average than Lucene, while 3 times faster at the median point. Since Lucene is at such a dominant position in full-text search, I think it might be of broad interest to write about it.&lt;/p&gt;
&lt;p&gt;Yes, it is true. The search engine is &lt;a href="https://github.com/juji-io/datalevin/blob/2711a2ef1c31822bf6c1b974be0ea13a47fe41ca/src/datalevin/search.clj"&gt;less than 600 lines of Clojure code&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Lucene is Hard to Beat&lt;/h2&gt;
&lt;p&gt;Lucene has over 20 years of history, with perhaps hundreds of man-year of work
behind her development. Any search engine coming out with better numbers than
Lucene is suspicious of dishonesty, incompetence in benchmarking, or both. I
will not name names, but a Google search should show some samples of these. Obviously, I would not want to add Datalevin to such a hall of shame. Please do report any errors in my &lt;a href="https://github.com/juji-io/datalevin/tree/master/search-bench"&gt;benchmarking&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Better Search Algorithm&lt;/h2&gt;
&lt;p&gt;To beat Lucene, it is obviously not enough to optimize code, as Lucene is highly optimized to the last fine details. For example, Lucene has multiple versions of Priority Queue implementations, each customized to a different use case. It is insane.&lt;/p&gt;
&lt;p&gt;So, to beat Lucene, having better algorithm is pretty much a requirement. Luckily, I did come up with a better search algorithm, which I call &lt;em&gt;T-Wand&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;By "better", I mean it in two senses.&lt;/p&gt;
&lt;h3&gt;Better Relevance&lt;/h3&gt;
&lt;p&gt;How many time have you felt frustrated that the search engine gave you results that you know are worse than what you should be getting?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I know there are some documents containing all these words, why are they not here?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;"Here" means the first page, or being in the "top-K" results in research parlance. Full text search engines, like Lucene, are often optimized to return a limited number (K) of good results as quickly as possible. However, what is a "good" result? This is where the concept gets muddier. It is no longer a purely technical problem, but more of a user experience problem. In research parlance, this is called "relevance".&lt;/p&gt;
&lt;p&gt;As someone who has a Ph.D. in Human-computer Interaction ;-), I feel like I am entitled to define a condition of "good" in relevance here. I hereby declare that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A good top-K algorithm should rank a document containing more user query terms higher than a document containing less number of user query terms.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This makes perfect sense. Right?&lt;/p&gt;
&lt;p&gt;Right. Unfortunately, most search engines, including Lucene, do not do that.&lt;/p&gt;
&lt;p&gt;Most search engines use something called a vector space model, where both user queries and documents are reduced to vectors (i.e. a fixed number of numbers). That is to say, the search engines are not looking at the meanings of the queries or the documents. Instead, they turned them both into some numbers. The search problem, is reduced to a problem of finding the similarity between the numbers representing the query and the numbers representing the documents.&lt;/p&gt;
&lt;p&gt;An often used similarity measure, is to treat these numbers as coordinates in some kind of space. Now both a query and a document become vectors (or points) in this space. And if you remember any of the high school math, you will know that one can calculate the angle between a query vector and a document vector. This angle is the similarity search engines use to rank the relevance of documents to the query. The smaller is the angle, the higher ranking is a document.&lt;/p&gt;
&lt;p&gt;This is an elegant model. However, as you can see, this vector space model does
not explicitly require a higher ranking document to contain more query terms
than a lower ranking one. The results often come out violating the above
requirement, inducing user frustrations. This is a well-known problem. For
example, &lt;a href="https://lucene.apache.org/core/3_5_0/scoring.html"&gt;Lucene 3.5.0 &lt;/a&gt;
(when they were still humble enough to write this?) introduced its scoring features with this paragraph:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lucene scoring is the heart of why we all love Lucene. It is blazingly fast and it hides almost all of the complexity from the user. In a nutshell, it works. At least, that is, until it doesn't work, or doesn't work as one would expect it to work. Then we are left digging into Lucene internals or asking for help on java-user@lucene.apache.org to figure out why a document with five of our query terms scores lower than a different document with only one of the query terms.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;T-Wand&lt;/em&gt; wants to change that.&lt;/p&gt;
&lt;h3&gt;Better Search Speed&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;T&lt;/em&gt; of &lt;em&gt;T-Wand&lt;/em&gt; stands for &lt;em&gt;Tiered&lt;/em&gt;. As you might have guessed, our search algorithm divides the document collections into tiers. The first tier are those documents containing all &lt;code&gt;n&lt;/code&gt; user query terms, the second tier are those containing &lt;code&gt;n-1&lt;/code&gt; user query terms, so on and so forth.&lt;/p&gt;
&lt;p&gt;With this division, we no longer need to consider the whole document collection as the potential result candidates. Instead, only those in the current tier are. With much less work to do, the search speed is going to be better.&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;T-Wand&lt;/em&gt; Algorithm&lt;/h2&gt;
&lt;p&gt;First, let me introduce the &lt;em&gt;WAND&lt;/em&gt; algorithm.&lt;/p&gt;
&lt;h3&gt;&lt;em&gt;WAND&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;Did I say Lucene is fast? Lucene is very fast, because it uses one of the state of art search algorithms, &lt;em&gt;WAND&lt;/em&gt; [1]. Here's how &lt;em&gt;WAND&lt;/em&gt; works.&lt;/p&gt;
&lt;p&gt;It cheats.&lt;/p&gt;
&lt;p&gt;Well, any sufficiently advanced algorithm looks like cheating. &lt;em&gt;WAND&lt;/em&gt; is no exception. Basically, it skips a large portion of document collection, and it skips them &lt;em&gt;safely&lt;/em&gt;, meaning the results would be the same if one exhaustively does the full computation without skipping. It is able to &lt;em&gt;safely&lt;/em&gt; skip documents by using two tricks.&lt;/p&gt;
&lt;p&gt;The first trick is the most ingenious. I still do not know how my former colleagues at IBM Research came up with it. My hat's off to them. Let me steal a picture from a followup article [2] to illustrate this.&lt;/p&gt;
&lt;p&gt;&lt;img alt="WAND" src="/images/WAND.png"&gt;&lt;/p&gt;
&lt;p&gt;As can be seen, the 4 rows are the document ids of 4 query terms, and four iterators are walking the document ids from left to right. At each step of the iteration, &lt;em&gt;WAND&lt;/em&gt; arranges the rows such that the current document ids of the rows are sorted from lower to higher.&lt;/p&gt;
&lt;p&gt;Now, starting from the first row, we sum up a maximal "goodness" score of that row's documents, as soon as the "goodness" score pass a certain threshold, we stop at that row. Say, this row is the 3rd one. At this point, we can teleport the first two rows's iterators to the document ids where the 3rd one is at, skipping every documents in between. This skipping is safe, because, by definition, the document pointed by the 3rd iterator is the first one that pass the threshold. Those before it would not have passed, because the "goodness" scores we use for each row are the maximal of those rows. There could not possibly be anything larger in those skipped documents.&lt;/p&gt;
&lt;p&gt;As we have alluded to, the second trick, is this idea of using a hypothetical maximal possible score to filter out potential candidates without having to fully examine them: "we already gave you all the slack possible, yet you still cannot pass the bar, so we can safely kick you out without having to look at you in details". This is a fairly general idea that is used in many algorithms. For example, I would consider A* algorithm is in the same spirit. This reminds me also of a Chinese strategic doctrine, "料敌从宽“, it means to estimate the strength of the opponent in the most generous term possible, and to plan accordingly.&lt;/p&gt;
&lt;p&gt;In &lt;em&gt;WAND&lt;/em&gt;, the threshold used to filter out documents is the current lowest score of those documents that have made into the top-K. This threshold becomes more difficulty to pass as the algorithm proceeds, filtering out greater proportion of documents as it goes.&lt;/p&gt;
&lt;h3&gt;What's New in &lt;em&gt;T-WAND&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;So it seems to be obvious to apply the same &lt;em&gt;WAND&lt;/em&gt; algorithm in each tier. But that would not be efficient, because now you are going to have multiple passes over the document collection, doing a lot of wasted work.&lt;/p&gt;
&lt;p&gt;Another idea came into play, which was actually the first idea I tried. This idea was inspired by an idea in another research field, approximate string matching [3]. In retrospect, this idea has the same element of "giving your enemy maximal possible slack" spirit.&lt;/p&gt;
&lt;p&gt;Here, to establish the maximum and the threshold, a little bit math is involved. I will spare you any formalism, because the actual idea is very simple, some would say trivial.&lt;/p&gt;
&lt;p&gt;Let us start with a special case. Say, we want to find documents that contain all &lt;code&gt;n&lt;/code&gt; user query terms, what are those documents?&lt;/p&gt;
&lt;p&gt;They must be those documents that contain the rarest term in the user query.
Right? Regardless of how rare a term is, a document must have it to meet our
requirement of containing all query terms. In fact, the document must contain
any one of the given query terms. In other words, it is necessary and sufficient
to use &lt;em&gt;any&lt;/em&gt; &lt;em&gt;one&lt;/em&gt; term's set of containing documents as the candidates, and we
can then proceed to check these candidates to see if they also contain other
query terms. Since picking any one term would be the same, we will choose the rarest term, for its containing document list is the shortest. All other documents can be safely skipped. Magic, yes?&lt;/p&gt;
&lt;p&gt;Generalizing this special case, to find documents containing &lt;code&gt;n-1&lt;/code&gt; query terms, we only need to pick as candidates those documents containing the rarest OR the second rarest term, i.e. the union of them. All the rest of the documents can be safely ignored.  Isn't this nice?&lt;/p&gt;
&lt;p&gt;We can continue this all the way down to needing only one query term in the document. At this point, every document containing any query term becomes a potential candidate. This reverts back to the difficult problem of searching all matching documents, which &lt;em&gt;WAND&lt;/em&gt; solves by skipping documents that are not going to make into top-K.&lt;/p&gt;
&lt;p&gt;But we can do much better. Because the above mathematical property also allows us to skip documents that are not going to have the required number of overlaps with the query.&lt;/p&gt;
&lt;p&gt;Say we are at a tier that requires &lt;code&gt;t&lt;/code&gt; overlaps between a document and a query. We are walking a document candidate down the term rows, trying to find out how many terms this candidate hits. If this candidate has already hit &lt;code&gt;h&lt;/code&gt; terms so far, and is now on row &lt;code&gt;k&lt;/code&gt;. If we give this candidate maximal slack, meaning that we assume he will hit all the remaining terms, his hypothetical maximal hits would be &lt;code&gt;h + (n - k - 1)&lt;/code&gt;. If this number is less than &lt;code&gt;t&lt;/code&gt;, he can be safely kicked out, because he will never make into the exclusive &lt;code&gt;t&lt;/code&gt; club.&lt;/p&gt;
&lt;p&gt;This new pruning condition is the main novelty of T-Wand in term of algorithm,
as it has not been reported in the literature for search algorithms, as far as I can tell. With this pruning condition and candidate pre-filtering, we can already achieve about 65% overall speed of Lucene. Adding the pruning condition of &lt;em&gt;WAND&lt;/em&gt;, we have the current &lt;em&gt;T-Wand&lt;/em&gt; performance, which beats Lucene with ease.&lt;/p&gt;
&lt;h2&gt;Implementation Takeaways&lt;/h2&gt;
&lt;p&gt;I said beating Lucene with ease, because we did not do any extreme optimizations that are abundant in Lucene. Our code is idiomatic Clojure, with some additional help of Java data structures at critical performance hotspots. The code weights less than 600 lines, including comments.&lt;/p&gt;
&lt;h3&gt;Clojure&lt;/h3&gt;
&lt;p&gt;So why use Clojure? The short answer is that it makes programming fun.&lt;/p&gt;
&lt;p&gt;It is fun to explore ideas with the language. One little known fact that I found about using Clojure, is that it is an excellent language for implementing published algorithms in academic papers. Most algorithmic papers include pseudo code, written in an imperative programming style. They seem to be a far cry from any functional programming code one would write.&lt;/p&gt;
&lt;p&gt;However, I found the opposite to be true. It is easier to translate published imperative pseudo code into functional programming real code, than trying to turn imperative pseudo code into imperative real code. Looking at any code repository accompanying a paper, the imperative programming code in the repository bears no resemblance to the nice pseudo code shown in the paper.&lt;/p&gt;
&lt;p&gt;With a functional programming language, on the other hand, the resulting real code will have a one-to-one correspondence with the pseudo code. If you know Clojure, you can look at my code of &lt;em&gt;T-Wand&lt;/em&gt;, see the similarity between my function &lt;code&gt;score-docs&lt;/code&gt; and the pseudo code in [4]. I just gave each code block in the pseudo code a name and turns that into a function, &lt;code&gt;find-pivot&lt;/code&gt;, &lt;code&gt;score-pivot&lt;/code&gt;, &lt;code&gt;next-candidates&lt;/code&gt;, etc. The function realizes the intention and logic of the pseudo code, but not following its style. The code is easy to follow and change, allowing exploration of many ideas.&lt;/p&gt;
&lt;p&gt;The current form of &lt;em&gt;T-Wand&lt;/em&gt; is the result of at least three major iterations of
ideas, first the candidate pruning by required overlaps idea, then candidate
pre-filtering idea, finally incorporated both into &lt;em&gt;T-Wand&lt;/em&gt;. All these changes
and refactoring were done with great ease, with a sense of adventure and fun. I
can not imagine how painful this would be to iterate these ideas on a statically
typed language and in an imperative programming style. I probably would just give up.&lt;/p&gt;
&lt;h3&gt;Index Storage&lt;/h3&gt;
&lt;p&gt;In Datalevin search engine, we store the primary data structure for searching in LMDB in an aggregated form, as a sparse integer list. The reason to store and access term information in aggregates, instead of storing them in inverted lists and accessed piece-meal, is because LMDB is very efficient (more efficient than file systems) at reading/writing large binary blobs.&lt;/p&gt;
&lt;p&gt;As long as the data structure to be stored has high (de)serialization
speed, it is more efficient to store/retrieve them in large aggregates than in
more granular forms. This does not apply to more complex data structures with
high construction cost, such as hash maps. We consider these as general advises on how to best use the so called single-level storage, such as LMDB. We earned these
lessons in our many iterations of trying to find the best performing indexing data structure.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I am happy that this exploration turns out well. I would be thrilled to see
&lt;em&gt;T-Wand&lt;/em&gt; algorithm makes into other search engines, as it does improve user
experience, performs well, and it is simple to implement in existing code bases
that use &lt;em&gt;WAND&lt;/em&gt;. There are many more ideas of improvement can be further explored, I would be happy to have a collaboration if someone wants to take it further.&lt;/p&gt;
&lt;h2&gt;Updates for Hacker News People&lt;/h2&gt;
&lt;p&gt;For people who are worried, please be assured that &lt;em&gt;T-Wand&lt;/em&gt; also uses
&lt;code&gt;tf-idf&lt;/code&gt; and the vector space model, so you are not missing anything fundamental.&lt;/p&gt;
&lt;p&gt;For people who say "Lucene is not properly used", please write the proper Lucene code in one of the issues, in Java if you want, I can integrate them into the benchmark. If you know Clojure, just send a PR. I appreciate that. Better yet, if you know Lucene so well, you should send a PR to Lucene that integrates &lt;em&gt;T-Wand&lt;/em&gt; into Lucene, that would make the biggest impact.&lt;/p&gt;
&lt;p&gt;For people who say "Does yours have all the Lucene features - stemming,
incremental index, phrase search, range search, arbitrary sortable fields,
etc?", at the moment, the following features are implemented:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Core search capability&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;English analyzer&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Incremental and bulk indexing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following are to be implemented in the future:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fuzzy query matching&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stemming&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Phrase search&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boolean operators&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The followings are not necessary because Datalevin is a real database and it has more powerful database features than whatever a search engine can offer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Range query is a foundation of Datalevin database&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fields are just watered-down columns in a database. Datalevin is a fully featured database. Whatever you want to do with fields, you can do with Datalog.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am opening up for feature suggestions. Please file issues or send PR. I appreciate them.&lt;/p&gt;
&lt;p&gt;Finally, please do not misunderstand what is going on here: I am running a startup, and I am also old enough to not care about publications as much as much as people who are younger or in academia. That's why I chose to reveal this in a blog post instead of hiding it until after my paper is published. A blog post can reach more people then an academic paper can.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;p&gt;[1] Broder, Carmel, Herscovici, Soffer and Zien, Efficient Query Evaluation using a Two-Level Retrieval Process, CIKM'2003.&lt;/p&gt;
&lt;p&gt;[2] Ding and Suel. Faster top-k document retrieval using block-max indexes. SIGIR'2011.&lt;/p&gt;
&lt;p&gt;[3] Okazaki and Tsujii, Simple and Efficient Algorithm for Approximate Dictionary Matching. COLING '2010.&lt;/p&gt;
&lt;p&gt;[4] Crane, et al. A comparison of document-at-a-time and score-at-a-time query evaluation. WSDM' 2017.&lt;/p&gt;</content><category term="experience"></category><category term="Clojure"></category><category term="Datalevin"></category><category term="Full-text Search"></category></entry><entry><title>Sync time for FreeIPA hosts</title><link href="https://yyhh.org/blog/2021/04/sync-time-for-freeipa-hosts" rel="alternate"></link><published>2021-04-08T07:41:14+00:00</published><updated>2021-04-08T07:41:14+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2021-04-08:/blog/2021/04/sync-time-for-freeipa-hosts</id><summary type="html">&lt;p&gt;Diagnosing SAML and Google login failures caused by clock drift after a FreeIPA upgrade, with checks of chronyd and NTP synchronization.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Recently, I upgraded the FreeIPA server for my network to the latest version (4.8.10). Some strange things related to authentication started to happen with some services on my network. &lt;/p&gt;
&lt;p&gt;For our Web site, netlify gotrue is used to enable users to login using SAML Single Sign-On. This started to fail due to this error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SAML response has invalid time&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For our discourse based forum, users started to experience failure to login using Google Single Sign-On. Again, it is time related:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Unable to verify authorization token due to server clock differences. Please try again.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I check the time on the servers, they all have a few seconds differences from each other.&lt;/p&gt;
&lt;p&gt;All my nodes use chronyd to manage NTP service. When run &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;chronyc&lt;span class="w"&gt; &lt;/span&gt;sources&lt;span class="w"&gt; &lt;/span&gt;-v
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I found that all of the NTP client show something like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="m"&gt;210&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Number&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;.--&lt;span class="w"&gt; &lt;/span&gt;Source&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;^&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;server,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;peer,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;clock.
&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;.-&lt;span class="w"&gt; &lt;/span&gt;Source&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;current&lt;span class="w"&gt; &lt;/span&gt;synced,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;combined&lt;span class="w"&gt; &lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;combined,
&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;?&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;unreachable,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;x&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;may&lt;span class="w"&gt; &lt;/span&gt;be&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;error,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;~&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;too&lt;span class="w"&gt; &lt;/span&gt;variable.
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;                                                 &lt;/span&gt;.-&lt;span class="w"&gt; &lt;/span&gt;xxxx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;yyyy&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;+/-&lt;span class="w"&gt; &lt;/span&gt;zzzz
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;Reachability&lt;span class="w"&gt; &lt;/span&gt;register&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;octal&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-.&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;xxxx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;adjusted&lt;span class="w"&gt; &lt;/span&gt;offset,
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;Log2&lt;span class="o"&gt;(&lt;/span&gt;Polling&lt;span class="w"&gt; &lt;/span&gt;interval&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--.&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;yyyy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;measured&lt;span class="w"&gt; &lt;/span&gt;offset,
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;zzzz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;estimated&lt;span class="w"&gt; &lt;/span&gt;error.
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
MS&lt;span class="w"&gt; &lt;/span&gt;Name/IP&lt;span class="w"&gt; &lt;/span&gt;address&lt;span class="w"&gt;         &lt;/span&gt;Stratum&lt;span class="w"&gt; &lt;/span&gt;Poll&lt;span class="w"&gt; &lt;/span&gt;Reach&lt;span class="w"&gt; &lt;/span&gt;LastRx&lt;span class="w"&gt; &lt;/span&gt;Last&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sample&lt;/span&gt;
&lt;span class="o"&gt;===============================================================================&lt;/span&gt;
^?&lt;span class="w"&gt; &lt;/span&gt;ipa.example.com&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;-&lt;span class="w"&gt;     &lt;/span&gt;+0ns&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;+0ns&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;+/-&lt;span class="w"&gt;    &lt;/span&gt;0ns
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It means that the NTP server is not reachable. No wonder the times are out of sync.&lt;/p&gt;
&lt;p&gt;So I checked on my IPA server, it turns out that the new version of FreeIPA server default to disable the NTP server and does not allow external NTP clients to access. The NTP port &lt;code&gt;123&lt;/code&gt; is not open:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ss&lt;span class="w"&gt; &lt;/span&gt;-lnp&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;123&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This shows nothing.&lt;/p&gt;
&lt;p&gt;To fix, edit &lt;code&gt;/etc/chrony/chrony.conf&lt;/code&gt;, and add &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;allow all

local stratum 10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then &lt;code&gt;systemctl restart chronyd&lt;/code&gt; to restart the server. &lt;/p&gt;
&lt;p&gt;On the client nodes, do the same, now the time should be synced.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="m"&gt;210&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Number&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sources&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;.--&lt;span class="w"&gt; &lt;/span&gt;Source&lt;span class="w"&gt; &lt;/span&gt;mode&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;^&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;server,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;peer,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;clock.
&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;.-&lt;span class="w"&gt; &lt;/span&gt;Source&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;current&lt;span class="w"&gt; &lt;/span&gt;synced,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;combined&lt;span class="w"&gt; &lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;combined,
&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;?&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;unreachable,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;x&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;may&lt;span class="w"&gt; &lt;/span&gt;be&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;error,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;~&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;too&lt;span class="w"&gt; &lt;/span&gt;variable.
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;                                                 &lt;/span&gt;.-&lt;span class="w"&gt; &lt;/span&gt;xxxx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;yyyy&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;+/-&lt;span class="w"&gt; &lt;/span&gt;zzzz
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;Reachability&lt;span class="w"&gt; &lt;/span&gt;register&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;octal&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-.&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;xxxx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;adjusted&lt;span class="w"&gt; &lt;/span&gt;offset,
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;Log2&lt;span class="o"&gt;(&lt;/span&gt;Polling&lt;span class="w"&gt; &lt;/span&gt;interval&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--.&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;yyyy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;measured&lt;span class="w"&gt; &lt;/span&gt;offset,
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;                                &lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;zzzz&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;estimated&lt;span class="w"&gt; &lt;/span&gt;error.
&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt;                                 &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;
MS&lt;span class="w"&gt; &lt;/span&gt;Name/IP&lt;span class="w"&gt; &lt;/span&gt;address&lt;span class="w"&gt;         &lt;/span&gt;Stratum&lt;span class="w"&gt; &lt;/span&gt;Poll&lt;span class="w"&gt; &lt;/span&gt;Reach&lt;span class="w"&gt; &lt;/span&gt;LastRx&lt;span class="w"&gt; &lt;/span&gt;Last&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;sample&lt;/span&gt;
&lt;span class="o"&gt;===============================================================================&lt;/span&gt;
^*&lt;span class="w"&gt; &lt;/span&gt;ipa.example.com&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;377&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;73&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;+360us&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;+447us&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;+/-&lt;span class="w"&gt;   &lt;/span&gt;28ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;All those pesky authentication problems went away.&lt;/p&gt;</content><category term="notebook"></category><category term="FreeIPA"></category></entry><entry><title>Dear Taiwanese friends, here is how to gain independence from China</title><link href="https://yyhh.org/blog/2021/03/dear-taiwanese-friends-here-is-how-to-gain-independence-from-china" rel="alternate"></link><published>2021-03-31T18:23:22+00:00</published><updated>2021-03-31T18:23:22+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2021-03-31:/blog/2021/03/dear-taiwanese-friends-here-is-how-to-gain-independence-from-china</id><summary type="html">&lt;p&gt;An opinion essay on Taiwan's independence, proposing changes to relations with China and cultural identity alongside a willingness to fight for statehood.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;Is it possible for Taiwan to gain independence from China?&lt;/h2&gt;
&lt;p&gt;The answer is, yes. Here's how.&lt;/p&gt;
&lt;p&gt;Before we begin, let's set aside the silly notion that "Taiwan is already independent". Statehood, like marriage, is something more about the formality than substance. You are either an independent country, or you are not.&lt;/p&gt;
&lt;p&gt;Yes, you have an army, your own currency, your own passport, your elections, your government, so on and so forth. But, so do most of the large scale armed insurgences.&lt;/p&gt;
&lt;p&gt;If you are serious about Taiwan independence, you will have to come to term with the formality. That is to say, to obtain a formal recognization of your statehood from the international community. Particularly when your statehood is contested by a big country from which you try to depart, that country's consent is pretty much a requirement. Remember, British agreed to USA's independence in the end. You, too, will have to obtain China's consent.&lt;/p&gt;
&lt;p&gt;How is that even possible, you may ask? Well, that's what I am about to tell you. Read on.&lt;/p&gt;
&lt;p&gt;First, let's look at the big picture. Do you know how many neighboring countries China has today?&lt;/p&gt;
&lt;p&gt;The short answer is "a lot". The long answer is the following: on land, there are 14 countries:  Afghanistan, Bhutan, India, Kazakhstan, North Korea, Kyrgyzstan, Laos, Mongolia, Myanmar, Nepal, Pakistan, Russia, Tajikistan, and Vietnam; on the sea, there are 6 countries: Brunei, Indonesia, Japan, South Korea, Malaysia, and Philippines.&lt;/p&gt;
&lt;p&gt;In total, twenty countries are in peaceful coexistence with China side by side! As you can also see, many of them are tiny countries that you may not even know about. Clearly, that "China bad" narrative you are made to believe does not hold much water.&lt;/p&gt;
&lt;p&gt;With so many neighboring countries, is it really a big deal that Taiwan is added to that list?&lt;/p&gt;
&lt;p&gt;Rationally, not really.&lt;/p&gt;
&lt;p&gt;Seriously? You ask. Yes, seriously.&lt;/p&gt;
&lt;p&gt;Let me put it this way: in that list of China's neighbors, there is a country that used to be a Chinese territory for more than &lt;strong&gt;one thousand years&lt;/strong&gt;! It is unbelievable, right? But it is true.&lt;/p&gt;
&lt;p&gt;If you do not know, that country is Vietnam.&lt;/p&gt;
&lt;p&gt;China has no problem with Vietnam being a separate country, which shares a land border with China, you think China will have a problem with Taiwan being as a separate country, which is located hundreds of miles away in Pacific?&lt;/p&gt;
&lt;p&gt;So why is Taiwan special? What is the deal with Chinese demanding everyone else to recognize Taiwan as a part of China? What's the difference?&lt;/p&gt;
&lt;p&gt;The answer will be counter-intuitive, but it makes sense if you think about it. Basically, it is less about what China thinks, but more to do with how Taiwan acts.&lt;/p&gt;
&lt;p&gt;The gist of it, is that Taiwan does not act like a neighboring country of China, instead, Taiwan acts like a renegade Chinese insurgency, that's why China has to deal with her as such.&lt;/p&gt;
&lt;h2&gt;Taiwan acts like a Chinese insurgency&lt;/h2&gt;
&lt;p&gt;Let's postpone the discussion of history for the moment, just focus on the current affairs. Let us explore Taiwan's behaviors, shall we?&lt;/p&gt;
&lt;h3&gt;Taiwan government funds anti-Chinese government propaganda&lt;/h3&gt;
&lt;p&gt;First, it is well documented that Taiwan government is one of the primary funding sources of anti-Chinese government propaganda around the world.&lt;/p&gt;
&lt;p&gt;We will not go into the details of Taiwan's funding of Chinese dissidents, such as Wang Dan, who lived in Taiwan for many years. If you are reading this, you probably have also heard about the so called "1450 net army", which is funded by the Taiwan government to wage propaganda war against any Chinese interest on the Internet.&lt;/p&gt;
&lt;p&gt;Let's just look at Taiwan influence in USA, for example. Here is &lt;a href="https://prospect.org/world/taiwan-funding-think-tanks-omnipresent-rarely-disclosed/"&gt;a detailed report&lt;/a&gt; on Taiwan funding of think tanks in Washington:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The five think tanks — the Brookings Institution, the Center for American Progress, the Center for a New American Security, the Center for Strategic and International Studies, and the Hudson Institute — all disclose their funding from TECRO but bury it deep on their websites or annual reports.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;TECRO&lt;/code&gt; is the acronym for the Taipei Economic and Cultural Representative Office, which is an office under the Ministry of Foreign Affairs of Republic of China (i.e. the Taiwan government).&lt;/p&gt;
&lt;p&gt;As a US citizen, I have to say that I find this foreign interference in our policy making very troubling.  For the main thesis of this article, it is worth pointing out that these think tanks often propose policies that antagonize China and promote military confrontation against her. For example, &lt;a href="https://www.hudson.org/research/16053-defending-taiwan-short-of-diplomatic-recognition"&gt;this recent policy proposal&lt;/a&gt; talks about "guerilla sea denial", "guerilla air denial", and even “deterrence by punishment", which is defined as "Instead of threatening China’s invading forces, these capabilities would seek to deter China by threatening countervalue targets with conventional weapons."&lt;/p&gt;
&lt;p&gt;So let me get this straight, the Taiwan government uses the tax money you paid to give to people that promote fighting a hot war on your island, so that they can profit from selling arms to you. Is that really to your best interest?&lt;/p&gt;
&lt;p&gt;As we can see, Taiwan government is basically act as an enemy of the Chinese government. Perhaps it is because, officially, there is still a state of war between them. There is not even a cease-fire declared between the two parties that have engaged in a civil war since 1946. No truce, no cease-fire. That's the reality.&lt;/p&gt;
&lt;h3&gt;Taiwan government still claims ownership of the whole China&lt;/h3&gt;
&lt;p&gt;Officially, Taiwan government is calling herself the Republic of China, and her constitution still claims the ownership of the whole of China. Sorry, I am mistaken, she actually claims more than what the Chinese government claims. For example, the Republic of China does not recognize Mongolia as a separate country, whereas the People's Republic of China does.&lt;/p&gt;
&lt;p&gt;This is not funny or it's some kind of schizophrenia or psychosis. The Taiwan government's claim actually has substance.&lt;/p&gt;
&lt;h3&gt;Taiwan holds Chinese treasury&lt;/h3&gt;
&lt;p&gt;Before the ruling party of Republic of China, the KMT, evacuated to the island of Taiwan, she took the whole of Chinese treasury with her. That included all the gold reserve of China, and more importantly, all of the cultural treasures of the Chinese civilization that could be moved.&lt;/p&gt;
&lt;p&gt;Now, the Chinese civilization boasts a 5000 years of history and culture. Some would say the official religion of the Chinese civilization is not Confucianism, Taoism, Buddhism or any of the actual religions, but a belief in her own heritage and culture. In fact, Taiwanese often boasts of their better inheritance of the Chinese culture, since they still use traditional Chinese script, not the simplified one used in the mainland China.&lt;/p&gt;
&lt;p&gt;Now you have it, both sides of the Taiwan strait see each other as a renegade insurgency that tries to usurp the power to govern China.&lt;/p&gt;
&lt;p&gt;Therefore, Chinese government has the full right to pressure any other countries that hope to have a normal relation with her to recognize her sovereignty over the whole of China, rather than that of the Taiwan government's, just like Taiwan government did so before they were booted from the United Nations in 1970s.&lt;/p&gt;
&lt;h2&gt;Steps to earn Taiwan independence from China&lt;/h2&gt;
&lt;p&gt;With all the above established, for a rational person, it should be easy to see how to gain independence from China. The steps required are not complicated and easy to implement. Most importantly, it has been done before, by many people. Some of them were even successful.&lt;/p&gt;
&lt;h3&gt;Cease hostility against the Chinese government&lt;/h3&gt;
&lt;p&gt;This is a no-brainer. If you want to be a neighboring country of China, act like one. Unless you want to fight a war with your neighbor, you don't actively fund the forces to sabotage her interests wherever you can, right?&lt;/p&gt;
&lt;p&gt;You can start by stopping writing the checks to all the anti-China individuals or institutions. It is so easy to &lt;em&gt;not&lt;/em&gt; write the checks. Am I right?&lt;/p&gt;
&lt;p&gt;Vietnam earned her independence from China, by agreeing to some concessions, not being act like an enemy of the Chinese government. In the end of the day, it is her consent that you are seeking.&lt;/p&gt;
&lt;h3&gt;Return Chinese cultural treasures&lt;/h3&gt;
&lt;p&gt;As an additional show of good will, you should offer to return all the cultural treasures that the previous Chinese government brought to your island as they fled from the country. These are Chinese things. You don't want to have anything to do with the Chinese, remember?&lt;/p&gt;
&lt;p&gt;You may say, how about the British, the Americans, etc. why don't you ask them to return the Chinese treasures that they looted. Well, they looted. They fought the Chinese government at that time and won, so they took some things they liked.  Did you fight and win against the Chinese government? No, you did not. So what right do you have to keep the treasures?&lt;/p&gt;
&lt;h3&gt;Abolish Chinese script&lt;/h3&gt;
&lt;p&gt;First, is to forge an independent sense of identity. You are well on the way there. For example, you insist that people calling you Taiwanese, not Chinese. That's good, but it is far from enough.&lt;/p&gt;
&lt;p&gt;You really need to stop using Chinese, if you are truly serious. Invent a script of your own, like how Vietnam and Korea did it. Otherwise, it is only a matter of time, before you are absorbed into the sinosphere culturally and your own identity dissipates.&lt;/p&gt;
&lt;p&gt;Unlike other cultures, the Chinese culture prizes unity over everything else, so you are not safe! Have you not noticed many of your celebrities are making a living in mainland China? That's dangerous.&lt;/p&gt;
&lt;p&gt;You want to insulate your people from Chinese culture. Using traditional Chinese is not enough of an insulation. If someone can read simplified Chinese, they can read traditional Chinese as well, and can type traditional Chinese on a computer. There is also a resurgence of use of traditional Chinese in the mainland. It is only a matter of time, before you are fully absorbed.&lt;/p&gt;
&lt;p&gt;Again, it is just too dangerous to continue using Chinese. Invent a script and mandate its use. It has proven to work, like it did in Vietnam, Korean, or more controversially, Japan.&lt;/p&gt;
&lt;h3&gt;Get ready to fight on your own&lt;/h3&gt;
&lt;p&gt;Now comes the hardest step. Once you declare independence, there will be a war. That is inevitable. No question about it.&lt;/p&gt;
&lt;p&gt;However, a war does not mean defeat. You can win.&lt;/p&gt;
&lt;p&gt;I mean, not "win" win, but achieving independence in the end. All you need to have, is a will to fight, on you own.&lt;/p&gt;
&lt;p&gt;No, don't even think about it. I know what you are thinking. You think USA and her allies will come to you aid when the war with China broke out. I don't want to argue that USA and her allies will not, but I want to argue from another point of view, that is the pride of a nation.&lt;/p&gt;
&lt;p&gt;Regardless what USA and her allies will do, you must be ready to fight like you want your independence and you are a nation of your own. To put it more bluntly, you have to prove your nationhood with the blood of the young.&lt;/p&gt;
&lt;p&gt;You need to fight hard and drag the war on, so that the cost of keeping the war going outweighs the perceived benefits from your adversary's point of view. That's your goal.&lt;/p&gt;
&lt;p&gt;That's how Vietnam got her independence. She fought, won some battles, lost some too. But she kept fighting, until the Chinese emperor got tired of fighting with her. When the negotiation offer came, she took it. Obviously, she had to make some concessions. But she got her independence in the end.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;There you have it, a simple recipe to achieve independence from China. It has proven to work, and it is not complicated.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stop hostility against China&lt;/li&gt;
&lt;li&gt;Return Chinese treasures&lt;/li&gt;
&lt;li&gt;Abolish Chinese Script&lt;/li&gt;
&lt;li&gt;Prepare to fight for your nation's independence&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What are you waiting for, go for it. Put pressure on your representatives to implement these steps. You are a democracy, ain't you?&lt;/p&gt;</content><category term="opinion"></category><category term="politics"></category></entry><entry><title>How much can a Clojure developer do alone?</title><link href="https://yyhh.org/blog/2021/03/how-much-can-a-clojure-developer-do-alone" rel="alternate"></link><published>2021-03-23T17:45:35+00:00</published><updated>2021-03-23T17:45:35+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2021-03-23:/blog/2021/03/how-much-can-a-clojure-developer-do-alone</id><summary type="html">&lt;p&gt;A response to a developer weighing Clojure's benefits, explaining the REPL workflow through human-computer interaction and reflecting on individual productivity.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Someone &lt;a href="https://www.reddit.com/r/Clojure/comments/mbil51/how_much_can_a_clojure_developer_do_alone/"&gt;asked on Reddit this question&lt;/a&gt;, for he's wondering if it is worth the time to learn Clojure well. He has dabbled in Clojure for half a year, but was not convinced of its benefits. He has not used REPL much, and was wondering if he was doing something wrong. He additionally has some related questions about the Clojure and functional programming in general, here are my two cents of an answer.&lt;/p&gt;
&lt;h2&gt;I am not using the REPL much, am I doing something wrong?&lt;/h2&gt;
&lt;p&gt;Yes, if you are not using the REPL, you are not doing Clojure right. That's the answer. It may not be what one likes to hear, but it is true.&lt;/p&gt;
&lt;p&gt;There are already a lot of blog posts and Youtube videos about what it means to be "using the REPL" in Clojure, or in Lisp in general. None of them articulated the points from a Human-computer Interaction point of view. As someone who earned a Ph.D. in that field, I think I am qualified to make this point.  &lt;/p&gt;
&lt;p&gt;First, "using the REPL" does NOT mean typing your code in REPL. Heck, no, it's the opposite. &lt;/p&gt;
&lt;p&gt;"Using the REPL" actually means typing your code in your favorite editor. However, one sends the code to evaluate in a REPL, which may not even be visible at all. Once the code is evaluated, the results immediately show up in the editor, so you get the feedback right away. Obviously, this requires some upfront setup, but a proper Clojure REPL setup exists in all major editors. Just google it.&lt;/p&gt;
&lt;p&gt;Note that one normally sends the code to evaluate with a single key stroke. Note also, a very important point that people often miss, is that this "sending code to evaluate" is uniquely convenient in Lisp because of the parentheses. &lt;/p&gt;
&lt;p&gt;There's a notion of "form" in Lisp, that is the code enclosed between a pair of parentheses, which can be independently evaluated. So, when next time someone insists that their favorite non-Lisp language also has a REPL, ask them, does it have a notion of "form"? &lt;/p&gt;
&lt;p&gt;The benefit of a form, is that one no longer needs to use a mouse or some awkward key combinations to painstakingly select a region of code first, before sending it out for evaluation. Instead, one can use a single key stroke that means "evaluate the form under the cursor", or "evaluate the form before the cursor", etc, to precisely define the scope and send the code at the same time. &lt;/p&gt;
&lt;p&gt;As someone who has published papers in human motor controls, I can assure you this simplification makes a huge difference in ergonomics. It reduces the cost of using a REPL significantly, to the extent, I would venture to estimate that half of the potential productivity gains (if any) of the Lisp family of languages come from using the REPL this way.&lt;/p&gt;
&lt;p&gt;Psychologically, using REPL this way improves the &lt;a href="https://en.wikipedia.org/wiki/Flow_(psychology)"&gt;flow&lt;/a&gt;, the complete immersion in one's activity without interruption. No wonder &lt;a href="https://www.computerworld.com/article/2693998/clojure-developers-are-the-happiest-developers.html"&gt;Clojure programmers are found to the happiest&lt;/a&gt;: a mental state of flow improves well-being and life satisfaction.&lt;/p&gt;
&lt;p&gt;Please, do yourself a favor, go learn and practice the skills of REPL-driven programming in Clojure. There are many &lt;a href="https://www.google.com/search?q=repl+driven+programming+video"&gt;videos&lt;/a&gt; that show how it is done.&lt;/p&gt;
&lt;h2&gt;Can I learn Clojure well all by myself?&lt;/h2&gt;
&lt;p&gt;For this one, my opinion is "probably no".&lt;/p&gt;
&lt;p&gt;As alluded to above, significant amount of "doing Clojure right" is about some tiny bits of seemly unimportant things, but they add up. That's why I hold this unpopular opinion among Clojurians that Clojure is not a particularly good language for self-learning, unless one is very good at self-starting, which is not the case for the vast majority of people.&lt;/p&gt;
&lt;p&gt;Most people need some trainings to be able to get into something new. If they have not been taught REPL driven programming, I don't think they can discover it by themselves, despite maybe hearing others talking about it constantly. Heck, if left alone, there are people who would complain about having to count parentheses, instead of taking the initiative to find tools to help themselves, for which there are plenty of options, e.g. paredit, smartparens, parinfer, and so on.&lt;/p&gt;
&lt;p&gt;On the other hand, I seldom had any problems turning my fresh college graduates new hires into competent Clojure programmers within less than a month. The differences are two fold:&lt;/p&gt;
&lt;p&gt;Pride. Fresh college graduates have none. When they encountered obstacles, they just ask questions or try harder, instead of going to the easier route of blaming the technology. Clojure is a particularly easy target to blame: It's niche, a Lisp, a JVM language, dynamic typing, etc, the list can go on and on.&lt;/p&gt;
&lt;p&gt;Training. I made sure that my fresh college graduates were trained, down to the development environment setup. They also start working on a good code base right away. So they pick up the right habits at the beginning and never have to experience the kind of detours a self learner has to go through. There are lots of habits and setups that experienced Clojurians take for granted, but one has to see them to even know about them.&lt;/p&gt;
&lt;p&gt;So what's the solution? I don't know. The only thing I can think of, is hoping that more Clojure shops are successful so we can hire more people, or Clojure finds a niche that it occupies fully so that when the time comes for that niche to explode, Clojure grows accordingly. &lt;/p&gt;
&lt;p&gt;For whoever is reading this though, the situation is much better, because you are already reaching out and are not trying to learn all by yourself. The Clojure community is one of the nicest programming language communities. People are very  welcoming to newcomers and are very helpful. Please reach out and get help. Here are some sites to get you started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://clojurians.net/"&gt;Clojurian Slack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://clojureverse.org/"&gt;Clojureverse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/Clojure/"&gt;Clojure Reddit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How much can a Clojure developer do alone?&lt;/h2&gt;
&lt;p&gt;Now back to the main question, how productive can a Clojure programmer become? There are also a few related questions, I will answer one by one. &lt;/p&gt;
&lt;h3&gt;Does it really make such a difference to use Clojure?&lt;/h3&gt;
&lt;p&gt;Yes, it really makes a huge difference to use Clojure. Think of it this way, Clojure is a language designed for software consultants by software consultants. Cognitect, the company behind Clojure, was a software consultancy, now acquired by a bank. Clojure is also ideal for a startup, where a couple of competent Clojure programmers can write a complex application that would took a huge team of developers in other languages years of work. For my startup, our clients always thought we had a 30+ person engineering team when we have had never more than half a dozen developers.&lt;/p&gt;
&lt;h3&gt;How much faster does it made you develop software?  And in which areas? Did it improve performance because of easier composability? Did it made the code easier to understand because of the "better" abstractions once you got firm with them?"&lt;/h3&gt;
&lt;p&gt;All of the above. Composability, easier to understand, better abstraction, etc.&lt;/p&gt;
&lt;p&gt;It is much faster to develop in Clojure. The language creator, Rich Hickey, made all the design choices to ensure that a software consultant can deliver good software in as short as possible time frame, so that this software consultant can make the most profit. For a software consultant, time is the main cost, so time to market is optimized in Clojure.&lt;/p&gt;
&lt;p&gt;Technically, Clojure adds to Lisp the novel ingredients of immutable data, which significantly simplifies software development. There is no other language that places such an emphasis on programming directly with plain and naked data literals. Think of programming as &lt;a href="https://yyhh.org/blog/2016/12/data-oriented-programming-dop/"&gt;working with a richer JSON format&lt;/a&gt; without all that serializations and transformations. How nice would that be? Well, that's exactly what Clojure programming is like.&lt;/p&gt;
&lt;p&gt;Another important point is that Clojure is a very concise language.  &lt;a href="https://www.researchgate.net/publication/316922118_An_Investigation_of_the_Relationships_between_Lines_of_Code_and_Defects"&gt;Empirical data&lt;/a&gt; shows that one of the only things reliably correlated with software quality is the number of lines of code. The more lines of code, the more bugs there will be. Clojure is one of the only four languages where language choices is statistically significantly correlated with software quality in &lt;a href="https://arxiv.org/pdf/1901.10220.pdf"&gt;this large scale study&lt;/a&gt;. The other two "good" languages are found to be Haskell and Ruby, the one "bad" language is C++, while Clojure has the highest statistical significance number on the "good" side. &lt;/p&gt;
&lt;h3&gt;Could you possibly develop a complex enterprise software in Clojure with just say 4-8 people, knowing Clojure really well?&lt;/h3&gt;
&lt;p&gt;Of course. It is not just possible, but it is also optimized for it. Clojure was developed to write complex enterprise software where user requirements are arbitrary and constantly changing. Please watch any of the &lt;a href="https://github.com/tallesl/Rich-Hickey-fanclub"&gt;many Rich Hickey's videos&lt;/a&gt;, as he articulated the motivation well. Plenty of big enterprises are taking advantage of Clojure, e.g. Amazon, Walmart, and so on. &lt;/p&gt;
&lt;p&gt;Personally, knowing Clojure let me dare to do more ambitious things. For example, I wouldn't have started &lt;a href="https://juji.io"&gt;my company&lt;/a&gt; if I had not known Clojure. Before we had employees, I alone wrote the core of our chatbot platform, including a compiled domain specific language and its runtime, plus the Web front end and backend. With a small team, we had written and re-written the business facing Web application several times, which includes a no-code designer UI and an online IDE. We also have an API for programmers. All these development are done in Clojure, except some machine learning pieces done in Python.&lt;/p&gt;
&lt;h2&gt;Here's my concern: I felt like, once you got functions on which other functions also depend on and expect a certain signature, you would also get a tree-like complexity where you have to scratch your head for a while to figure out how to solve it. And if the code base gets large enough, I can imagine that understanding the code and all the context just gets equally complex.&lt;/h2&gt;
&lt;p&gt;The real situation in Clojure is actually a lot better than your imagination, because the immutable data localizes all functionalities, so one never has to look at the whole dependency graph to understand the code or to solve a problem. This is not something that can be said for Java-like object oriented programming, where functionalities are spread out into many layers of abstractions and into many objects.&lt;/p&gt;
&lt;p&gt;A properly structured Clojure code base uses a few namespaces of pure functions. I tend to avoid many tiny files with only a few functions in them. We are not writing Java, after all. Instead, group related functions into a large file, so that one seldom needs to look over multiple files to change something. &lt;/p&gt;
&lt;p&gt;Again, I stress that in Clojure, because most functions are pure and dealing with immutable data, one does not need to keep all the complexity of the whole application in the head in order to solve problems. One mostly works locally. &lt;/p&gt;
&lt;p&gt;In my opinion, Clojure programming is different only in the small. Programming in the large, like software architecture, is mostly similar to other languages. The only thing of note, is that one may place more focus on pure data when designing the APIs &lt;a href="https://youtu.be/n-avEZHEHg8"&gt;see e.g. my diff oriented architecture talk&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Finally, let me reveal a little publicized secret of programming. To navigate large code base, in addition to the usual "go to definition" hot keys in your IDEs or editors, a good programmer, in any language, relies heavily on text search, even in their own code bases. This is a skill that experienced coders tend not to talk publicly a lot about. So please know the searchers of your editor very very well, be it grep, silver, platinum, or whatever.&lt;/p&gt;
&lt;h2&gt;What are the key skills a Clojure developer has to develop to gain from that language?&lt;/h2&gt;
&lt;p&gt;Having humility and ambition at the same time. The humility to know there is a lot to learn and the ambition to dare to do things that most thought impossible.&lt;/p&gt;</content><category term="opinion"></category><category term="Clojure"></category></entry><entry><title>"Writing C code in Java/Clojure: GraalVM specific programming"</title><link href="https://yyhh.org/blog/2021/02/writing-c-code-in-javaclojure-graalvm-specific-programming" rel="alternate"></link><published>2021-02-08T05:41:23+00:00</published><updated>2021-02-08T05:41:23+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2021-02-08:/blog/2021/02/writing-c-code-in-javaclojure-graalvm-specific-programming</id><summary type="html">&lt;p&gt;Working with native C interfaces from Java and Clojure through GraalVM, using Datalevin's native-image development as a practical example.&lt;/p&gt;</summary><content type="html">&lt;p&gt;One of the latest fashions in the Java world is &lt;a href="https://www.graalvm.org/"&gt;GraalVM&lt;/a&gt;. For someone who has been around, I still remember the "Write once, run anywhere" slogan of Java virtual machine. Apparently, the wheel has spun back, now people want to write native code in Java, which has to be compiled to different machine codes in different platforms.&lt;/p&gt;
&lt;p&gt;The driving forces for this change may include the often lamented slow startup time of Java programs. For the brave new world of serverless functions, a quick starting program makes a lot of economic sense. The small but vibrant &lt;a href="https://clojure.org/"&gt;Clojure&lt;/a&gt; community, which I consider myself a part of, is particularly excited about this new found capability of JVM, for we now have one more way to write quick starting command line programs using our beloved language. The other way is to use ClojureScript on one of the Javascript engines, but Javascript engines are slower than JVM and are not as nice. For example, &lt;a href="https://github.com/babashka/babashka"&gt;Babashka&lt;/a&gt; is one such example that has taken the community by storm.&lt;/p&gt;
&lt;p&gt;As the author of &lt;a href="https://github.com/juji-io/datalevin"&gt;Datalevin&lt;/a&gt;, a relatively new open source Datalog database, I have decided to answer the users' call for a native version of Datalevin using GraalVM native image technology. After some trials and errors, I have gotten a native version of Datalevin to pass all the tests. Now I can share some experience.&lt;/p&gt;
&lt;h2&gt;Failed attempts to compile Datalevn to native image&lt;/h2&gt;
&lt;p&gt;The difficulty of directly compiling Datalevin to GraalVM native image lies in our use of &lt;a href="https://github.com/jnr/jnr-ffi"&gt;JNR&lt;/a&gt; library to wrap &lt;a href="https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database"&gt;LMDB&lt;/a&gt;, the underlying key-value store that is written in C. As far as I know, no one has succeeded in getting JNR to work with native image. This is not for the lack of trying, see for example &lt;a href="https://github.com/borkdude/datalevin-native"&gt;this effort&lt;/a&gt; and &lt;a href="https://github.com/oracle/graal/issues/675"&gt;this issue&lt;/a&gt;. I myself have tried really hard. Although I think I have gone further than many, the need to rerun some class initialization at runtime prevented me from succeeding. Apparently, some GraalVM team members also think it is not easy to do at this point.&lt;/p&gt;
&lt;p&gt;I am left with two options: one is to use a different LMDB wrapper that does not use JNR. For example, a &lt;a href="https://github.com/deephacks/lmdbjni"&gt;JNI based LMDB wrapper&lt;/a&gt; is available and GraalVM native image does support JNI. However, that code has not been updated for a long time and its maintainer seems to have joined &lt;a href="https://github.com/lmdbjava/lmdbjava"&gt;LMDBJava&lt;/a&gt;, the LMDB wrapper that uses JNR. The other option is to write a LMDB wrapper of my own that can run in native image. So I &lt;a href="https://github.com/juji-io/datalevin/tree/master/native"&gt;did just that&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Writing C code in Java/Clojure&lt;/h2&gt;
&lt;p&gt;As a native technology, GraalVM obviously has the facility to interface with C code. Not just that, it must also have the facility to write native code on its own. Fortunately, such facility is also packaged as a SDK that is publicly available. To use this SDK, one has to be familiar with not just Java, but also C programming, because effectively, it is writing low level C code in Java syntax.&lt;/p&gt;
&lt;p&gt;The only problem is that there isn't an official documentation for this kind of programming, just a &lt;a href="https://www.graalvm.org/sdk/javadoc/index.html?org/graalvm/nativeimage/c/package-summary.html"&gt;Java doc&lt;/a&gt; and a &lt;a href="https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.tutorial/src/com/oracle/svm/tutorial/CInterfaceTutorial.java"&gt;coding example&lt;/a&gt;. After some research, I also found a few other examples: an &lt;a href="https://github.com/praj-foss/opengl-graal-examples"&gt;OpenGL demo&lt;/a&gt;, a &lt;a href="https://github.com/michael-simons/neo4j-java-driver-native-lib"&gt;neo4j native driver&lt;/a&gt; and an &lt;a href="https://github.com/praj-foss/uname-graalvm-demo"&gt;uname utility&lt;/a&gt;. I hope that this blog post adds to this growing library of GraalVM specific programming examples.&lt;/p&gt;
&lt;h3&gt;Import C data and functions&lt;/h3&gt;
&lt;p&gt;Our goal is to write a LMDB wrapper with GraalVM SDK without using JNI.&lt;/p&gt;
&lt;p&gt;The first step is to make Java aware of the LMDB C data structures and functions declared in the header file &lt;code&gt;lmdb.h&lt;/code&gt;, so that our Java code can use them. This step is fairly easy and pleasant, compared with JNI. All one needs to do is to write a Java class to list all those C structs, enums and functions as native interfaces and annotate these with appropriate GraalVM specific annotations.&lt;/p&gt;
&lt;p&gt;For example, for a C struct definition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;MDB_val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;size_t&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;mv_size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="cm"&gt;/**&amp;lt; size of the data item */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;mv_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="cm"&gt;/**&amp;lt; address of the data item */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDB_val&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The corresponding Java declaration is the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@CStruct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;MDB_val&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;MDB_val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PointerBase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nd"&gt;@CField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mv_size&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_mv_size&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nd"&gt;@CField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mv_size&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;set_mv_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nd"&gt;@CField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mv_data&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;VoidPointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;get_mv_data&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nd"&gt;@CField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mv_data&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;set_mv_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VoidPointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;CStruct&lt;/code&gt; annotation tells Java which C struct to import. I gave the Java interface the same name as C so it is easier for me to keep track. One could also name it otherwise, e.g. "MDBVal" if one wants to follow CamelCases. It does not matter.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PointerBase&lt;/code&gt; interface indicates a native word type, and is the root of all C pointers being imported into Java. Most things in GraalVM SDK work with these native word types.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CField&lt;/code&gt; annotation imports a C struct field as a Java method. Setters and getters need to be declared separately. Again, I give these methods similar names as C field names, but you may prefer to follow Java name convention instead, e.g. "getMvSize".&lt;/p&gt;
&lt;p&gt;&lt;code&gt;VoidPointer&lt;/code&gt; is a faithful translation of &lt;code&gt;void *&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For an opaque C struct declaration that does not list its fields, one must add an &lt;code&gt;isIncomplete&lt;/code&gt; option to the annotation, otherwise compilation will fail with a "sizeOf" related error. For example, for a C struct like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;typedef&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;MDB_env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MDB_env&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The corresponding Java declaration is this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@CStruct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;MDB_env&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;isIncomplete&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;MDB_env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;extends&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PointerBase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;C functions are directly translated into Java static native methods, e.g.:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mdb_env_get_maxkeysize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MDB_env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The corresponding Java declaration is the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@CFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mdb_env_get_maxkeysize&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;native&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mdb_env_get_maxkeysize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MDB_env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notice that the pointer to &lt;code&gt;MDB_env&lt;/code&gt; struct is replaced by &lt;code&gt;MDB_env&lt;/code&gt; Java interface declared above, as it extends &lt;code&gt;PointerBase&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For parameters with double pointer type, one can declare them as &lt;code&gt;WordPointer&lt;/code&gt; in Java, as they point to another pointer (i.e. word). For example, this C function:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nf"&gt;mdb_env_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MDB_env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;is translated into this Java code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nd"&gt;@CFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;mdb_env_create&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;native&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;mdb_env_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WordPointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;envPtr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finally, for these annotations to work, the containing class must be annotated with appropriate C context, which is often defined as a static inner class of the class, like so:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nd"&gt;@CContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Directives&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Lib&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Directives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;implements&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Directives&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getHeaderFiles&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;singletonList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;lt;lmdb.h&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nd"&gt;@Override&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getLibraries&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Arrays&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;lmdb&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;CContext.Directives&lt;/code&gt; class imports the necessary C header file and finds the corresponding C library. In this particular example, we are importing the system wide LMDB header file and library installed by &lt;code&gt;apt install liblmdb-dev&lt;/code&gt; on Debian/Ubuntu. An example of importing local header file and library can be found in Datalevin source code &lt;a href="https://github.com/juji-io/datalevin/blob/master/native/src/java/datalevin/ni/Lib.java#L55"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The code of all C to Java translations is &lt;a href="https://github.com/juji-io/datalevin/blob/master/native/src/java/datalevin/ni/Lib.java"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Clojure specific considerations&lt;/h3&gt;
&lt;p&gt;Clojure &lt;code&gt;deftype&lt;/code&gt; supports Java annotations, so that is what I used to implement the higher level constructs of the LMDB wrapper. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;deftype &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;Retention&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;RetentionPolicy/RUNTIME&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="nv"&gt;CContext&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;Lib$Directives&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;LMDB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="nv"&gt;Env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;env&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="nv"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;dir&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="nv"&gt;RtxPool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;pool&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="nv"&gt;ConcurrentHashMap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;dbis&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="ss"&gt;:volatile-mutable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;closed?&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;One limitation that one needs to be aware of when writing native image related Clojure code, is that most things in the GraalVM SDK inherit from &lt;code&gt;org.graalvm.word.WordBase&lt;/code&gt;, not from &lt;code&gt;java.lang.Object&lt;/code&gt;, which breaks the hidden assumption of a lot of Clojure constructs. For example, one cannot do this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="nv"&gt;Lib$MDB_env&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Env/create&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Because &lt;code&gt;Lib$MDB_env&lt;/code&gt; extends &lt;code&gt;PointerBase&lt;/code&gt;, but Clojure &lt;code&gt;let&lt;/code&gt; seems to assume everything getting bound is an &lt;code&gt;Object&lt;/code&gt;. An "expecting Object but got Word" or vice visa error will be thrown during compilation for these cases. So writing a thin layer of wrapper for these GraalVM word types seems to be inevitable, unless Clojure can be enhanced to be more native image programming friendly.&lt;/p&gt;
&lt;p&gt;Another point of caution is about arrays. GraalVM uses reflection to create array objects, but if these array objects are not declared at build time, the code won't run. For instance, for Clojure &lt;code&gt;into-array&lt;/code&gt; function, we should not omit the optional first argument for element data type, otherwise, one has to manually specify the array type in the &lt;a href="https://www.graalvm.org/reference-manual/native-image/Reflection/"&gt;&lt;code&gt;reflection.json&lt;/code&gt; file during compilation&lt;/a&gt;, or the Graal runtime will complain about "Class such and such is instantiated reflectively but was never registered". For Clojure dynamically generated classes with names such as these, "datalevin.test.query$fn__12734$fn__12739$fn__12740[]", it is impossible to add them manually in &lt;code&gt;reflection.json&lt;/code&gt;. So the only solution is to specify the element data type in code, e.g. &lt;code&gt;(into-array Object data)&lt;/code&gt;, instead of &lt;code&gt;(into-array data)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The full Clojure project for native Datalevin is &lt;a href="https://github.com/juji-io/datalevin/tree/master/native"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Memory management and pointer wrangling&lt;/h3&gt;
&lt;p&gt;The main challenge of building a LMDB wrapper is to find a way to put transaction data into and get query data out of LMDB. As shown above, LMDB use a &lt;code&gt;MDB_val&lt;/code&gt; struct to represents input/output data. All it contains is a data size and a pointer to the data. LMDBJava uses JNR and &lt;code&gt;Unsafe&lt;/code&gt; or reflections to manipulate a &lt;code&gt;java.nio.ByteBuffer&lt;/code&gt; to achieve this. Since we cannot use these in this project, we have to come up with a GraalVM specific solution.&lt;/p&gt;
&lt;p&gt;It turned out the code to do this is quite easy to write. Instead of allocating the ByteBuffer in Java and presenting it to C, we manage the memory in C and present it as a ByteBuffer in Java, without all that &lt;code&gt;Unsafe&lt;/code&gt; and reflection shenanigans.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt; * Wrap LMDB MDB_val to look like a ByteBuffer at the Java side&lt;/span&gt;
&lt;span class="cm"&gt; */&lt;/span&gt;
&lt;span class="nd"&gt;@CContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Directives&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BufVal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VoidPointer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MDB_val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;BufVal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UnmanagedMemory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;calloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UnmanagedMemory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;calloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SizeOf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MDB_val&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set_mv_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set_mv_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CTypeConversion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asByteBuffer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ByteOrder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BIG_ENDIAN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * Set the limit of internal ByteBuffer to the current position, and update&lt;/span&gt;
&lt;span class="cm"&gt;     * the MDB_val size to be the same, so no unnecessary bytes are written&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;flip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;flip&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set_mv_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * Set the limit of internal ByteBuffer to capacity, and update&lt;/span&gt;
&lt;span class="cm"&gt;     * the MDB_val size to be the same, so it is ready to accept writes&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set_mv_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * Free memory&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;UnmanagedMemory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;UnmanagedMemory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * Return a ByteBuffer for getting data out of MDB_val&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;outBuf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ByteBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CTypeConversion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asByteBuffer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get_mv_data&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="w"&gt;                                                      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get_mv_size&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ByteOrder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BIG_ENDIAN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * Reset MDB_val pointer back to internal ByteBuffer, and return it&lt;/span&gt;
&lt;span class="cm"&gt;     * for putting data into MDB_val&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ByteBuffer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set_mv_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inBuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * Return the MDB_val pointer to be used in LMDB calls&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MDB_val&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getVal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Lib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MDB_val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="cm"&gt;/**&lt;/span&gt;
&lt;span class="cm"&gt;     * factory method to create an instance&lt;/span&gt;
&lt;span class="cm"&gt;     */&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BufVal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BufVal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We allocate the memory for the data and the &lt;code&gt;MDB_val&lt;/code&gt; struct with the &lt;code&gt;UnmanagedMemory.calloc&lt;/code&gt; static method from the SDK. This allocates memory from the heap just like in C. We will then need to free the memory ourselves.&lt;/p&gt;
&lt;p&gt;If the memory is needed only for a short period of time, the other options are &lt;code&gt;PinnedObject&lt;/code&gt; or &lt;code&gt;StackValue&lt;/code&gt; classes of the SDK. The former allows creating Java objects and then pinning them down, so that the garbage collector does not move them or delete them, in order to get a stable pointer to work with at the C side. The latter allocates objects from the stack so it is short-lived. These cases do not fit our need for long term pointers to database data structures, so we use &lt;code&gt;UnmanagedMemory&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The SDK utility &lt;code&gt;CTypeConversion.asByteBuffer&lt;/code&gt; static method is what makes our effort possible. We can simply expose a &lt;code&gt;MDB_val&lt;/code&gt; as a &lt;code&gt;ByteBuffer&lt;/code&gt; to Java in the constructor for incoming data, and in &lt;code&gt;outBuf()&lt;/code&gt; for outgoing data.  The rest of the code is just bookkeeping for the ByteBuffer.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I am happy that this effort is turning out well. The GraalVM SDK is quite pleasant to use, once one figures it out. I wish that this API can be made available in regular JVM as well, so we can truly write it once, and use it everywhere, regardless the underlying languages and platforms.&lt;/p&gt;
&lt;h2&gt;Important Update (2023-01-06)&lt;/h2&gt;
&lt;p&gt;For GraalVM versions newer than 21.3.0, those C context annotations in the
Clojure code shown above should be removed, because &lt;code&gt;CContext&lt;/code&gt; is now marked as
&lt;code&gt;HOST_ONLY&lt;/code&gt;, and is available only during build time. Basically, only those Java
classes that directly wrap the C code should now add these annotations.&lt;/p&gt;</content><category term="notebook"></category><category term="Clojure"></category><category term="Java"></category><category term="GraalVM"></category></entry><entry><title>Fix FreeIPA httpd Let's Encrypt Certificate Update</title><link href="https://yyhh.org/blog/2021/01/fix-freeipa-httpd-lets-encrypt-certificate-update" rel="alternate"></link><published>2021-01-01T22:58:21+00:00</published><updated>2021-01-01T22:58:21+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2021-01-01:/blog/2021/01/fix-freeipa-httpd-lets-encrypt-certificate-update</id><summary type="html">&lt;p&gt;Investigating FreeIPA Web server and login failures after a Let's Encrypt certificate renewal, with steps to repair certificate trust.&lt;/p&gt;</summary><content type="html">&lt;p&gt;For a public facing Web interface of FreeIPA server, it is desirable to use a 3rd party SSL certificate issued by a commonly accepted certificate authority, rather than using the server's own. &lt;a href="https://letsencrypt.org/"&gt;Let's Encrypt&lt;/a&gt; provides free SSL certificate for this purpose.&lt;/p&gt;
&lt;p&gt;To use Letsencrypt certificate with FreeIPA, &lt;a href="https://github.com/freeipa/freeipa-letsencrypt"&gt;this script&lt;/a&gt; does a good job, and I have been using this for several years. &lt;/p&gt;
&lt;h2&gt;Problem&lt;/h2&gt;
&lt;p&gt;When the letsencrypt certificate was renewed last month, a problem occurred. The Apache httpd server used by FreeIPA could not start. The error in &lt;code&gt;/var/log/httpd/error_log&lt;/code&gt; says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SSL Library Error: -8179 Certificate is signed by an unknown issuer&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The next line says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Unable to verify certificate 'Server-Cert'. Add "NSSEnforceValidCerts off" to nss.conf so the server can start until the problem can be resolved.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I did just that. Now the httpd server could start, and the Web UI did show up. However, one could not login, and the UI showed an "unknown error" message.&lt;/p&gt;
&lt;p&gt;The error log says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ipa: INFO: 401 Unauthorized: HTTPSConnectionPool(host='ipa.example.com', port=443): Max retries exceeded with url: /ipa/session/cookie (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:866)'),))&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SSL Library Error: -12195 Peer does not recognize and trust the CA that issued your certificate&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's a bit frustrating. &lt;/p&gt;
&lt;p&gt;What's worse, in my attempt to reran the "renew-le.sh" script to see what's going on, I ran into the rate limit of letsencrypt service, which only allows 5 renewals per week. There's no way to reset that and I had to wait for a week.&lt;/p&gt;
&lt;h2&gt;Fix&lt;/h2&gt;
&lt;p&gt;Today, a week has past, and I finally fixed the problem, after almost half a day.&lt;/p&gt;
&lt;p&gt;It turned out that Let's Encrypt has been updating their Root and Intermediate certificates.  See details &lt;a href="https://letsencrypt.org/certificates/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The old root certificate, &lt;code&gt;DSTRootCAX3.pem&lt;/code&gt; is being phased out. In the past, I have been getting certificate from &lt;code&gt;X3&lt;/code&gt; under it. However, the new certificate that I got is from &lt;code&gt;R3&lt;/code&gt; under the new root &lt;code&gt;isrgrootx1.pem&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;What's worse is that this new certificate was still issued with old root. What's missing, is an intermediate certificate that crossed signed with this old root, &lt;code&gt;lets-encrypt-r3-cross-signed.pem&lt;/code&gt;. Without this, the certificate cannot be verified, hence the error.&lt;/p&gt;
&lt;p&gt;So the solution, is to download https://letsencrypt.org/certs/lets-encrypt-r3-cross-signed.pem, then install it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class="w"&gt; &lt;/span&gt;https://letsencrypt.org/certs/lets-encrypt-r3-cross-signed.pem

ipa-cacert-manage&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;lets-encrypt-r3-cross-signed.pem&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;letsencryptr3-cross&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;C,,
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After this, if you attempt to run &lt;code&gt;ipa-certupdate&lt;/code&gt;, it will fail:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ipapython.admintool: DEBUG: The ipa-certupdate command failed, exception: NetworkError: cannot connect to 'https://ipa.example.com/ipa/json': [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:877)&lt;/p&gt;
&lt;p&gt;ipapython.admintool: ERROR: cannot connect to 'https://ipa.example.com/ipa/json': [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:877)&lt;/p&gt;
&lt;p&gt;ipapython.admintool: ERROR: The ipa-certupdate command failed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It's like catch 22, because your httpd SSL certificate cannot be verified, you cannot update your ipa certificates, because it requires connecting to your httpd server over SSL, but it is already failed due to lack of proper certificate. What a stupid design!&lt;/p&gt;
&lt;p&gt;Anyhow, I finally figured out a way around this, which is to manually edit &lt;code&gt;/etc/ipa/ca.cert&lt;/code&gt;, and append all the certificates needed for the full chain: DSTRootCAX3.pem -&amp;gt; lets-encrypt-r3-cross-signed.pem -&amp;gt; cert.pem that was issued by letsencrypt, one after another. &lt;/p&gt;
&lt;p&gt;Restart server. Now &lt;code&gt;ipa-certupdate&lt;/code&gt; is successful! All is well. &lt;/p&gt;
&lt;h2&gt;Some useful commands&lt;/h2&gt;
&lt;p&gt;In the process of figuring this out, I found a few commands that could be useful in the future to diagnose similar problems. &lt;/p&gt;
&lt;p&gt;To figure out what certificates FreeIPA knows about:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ldapsearch -Y GSSAPI -Q -b  cn=certificates,cn=ipa,cn=etc,dc=example,dc=com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To see what certificate httpd knows about:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;certutil -L -d /etc/httpd/alias/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To install a certificate to httpd with name "Server-Cert":&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;certutil -A -d /etc/httpd/alias/ -n Server-Cert -t u,u,u -a -i file.pem
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To test SSL connection:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;openssl s_client -showcerts -verify 5 -connect ipa.example.com:443
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="notebook"></category><category term="FreeIPA"></category><category term="letsencrypt"></category></entry><entry><title>ZGC garbage collector and Clojure applications</title><link href="https://yyhh.org/blog/2020/12/zgc-garbage-collector-and-clojure-applications" rel="alternate"></link><published>2020-12-29T22:20:27+00:00</published><updated>2020-12-29T22:20:27+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2020-12-29:/blog/2020/12/zgc-garbage-collector-and-clojure-applications</id><summary type="html">&lt;p&gt;Experiences running Clojure applications with ZGC, including large-page configuration and the memory-management problems encountered under heavy allocation.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The main product of &lt;a href="https://juji.io"&gt;my startup&lt;/a&gt; is written in Clojure, a language that puts enormous pressure on the memory garbage collector due to the pervasive use of immutable data structures. The new Z garbage collector on JVM has been a blessing for us, as it has largely solved our memory problems. However, there are a few points that one needs to pay attention.&lt;/p&gt;
&lt;h2&gt;Large pages&lt;/h2&gt;
&lt;p&gt;We followed the suggestion on the &lt;a href="https://wiki.openjdk.java.net/display/zgc/Main#Main-EnablingLargePagesOnLinux"&gt;ZGC page&lt;/a&gt; to enable large pages. &lt;/p&gt;
&lt;p&gt;Here is the easiest way to enable large page on Debian Linux: add "hugepages=9216" to &lt;code&gt;GRUB_CMDLINE_LINUX_DEFAUT&lt;/code&gt; line in the &lt;code&gt;/etc/default/grub&lt;/code&gt; file, issue &lt;code&gt;update-grub&lt;/code&gt; as root, then reboot. This creates 9216 huge pages that are 2MB each (default), totaling 18GB.  In the JVM startup options, add &lt;code&gt;-XX:+UseLargePages&lt;/code&gt; to enable large pages in JVM.&lt;/p&gt;
&lt;p&gt;The ZGC page says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Configuring ZGC to use large pages will generally yield better performance (in terms of throughput, latency and start up time) and comes with no real disadvantage. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, that is not always true.&lt;/p&gt;
&lt;p&gt;As mentioned, our Clojure application puts a lot of pressure on GC. After the application has been up for a few days and after heavy loads, it will become extremely slow, resulting in customer complaints. We had to restart the application when that happened.&lt;/p&gt;
&lt;p&gt;Disabling large pages (reverse the above steps) removed the problem. &lt;/p&gt;
&lt;p&gt;It appears that the culprit is memory fragmentation. As described &lt;a href="https://www.oracle.com/java/technologies/javase/largememory-pages.html"&gt;here&lt;/a&gt;: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;for a system that has been up for a long time, excessive fragmentation can make it impossible to reserve enough large page memory. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is to say, be careful with large pages. Avoid it if memory pressure is high. &lt;/p&gt;
&lt;h2&gt;Number of Concurrent GC Threads&lt;/h2&gt;
&lt;p&gt;Since a Clojure application allocates tons of temporary objects then discards them, the garbage collector has more work to do. JVM's default setting of &lt;code&gt;-XX:ConcGCThreads&lt;/code&gt; tends to be lower than necessary for a Clojure application under load. For example, by default, ZGC collector will only use one concurrent CG thread on a four core machine, which is definitely not enough. Setting the number to be two seems to be the minimum. I set it to three on our 8 core production servers. It seems to work well. &lt;/p&gt;</content><category term="notebook"></category><category term="JVM"></category><category term="Linux"></category><category term="Clojure"></category></entry><entry><title>How to Setup SAML2 Authentication on Sentry with Keycloak</title><link href="https://yyhh.org/blog/2020/10/how-to-setup-saml2-authentication-on-sentry-with-keycloak" rel="alternate"></link><published>2020-10-19T18:28:25+00:00</published><updated>2020-10-19T18:28:25+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2020-10-19:/blog/2020/10/how-to-setup-saml2-authentication-on-sentry-with-keycloak</id><summary type="html">&lt;p&gt;Setting up SAML2 authentication for on-premise Sentry with Keycloak, including client registration and the settings needed to connect the two services.&lt;/p&gt;</summary><content type="html">&lt;p&gt;With newer versions of on-premise Sentry (I am using Sentry 20.10.1), the &lt;a href="https://yyhh.org/blog/2017/12/ldap-authentication-for-on-premise-sentry-server-using-freeipa/"&gt;LDAP authentication&lt;/a&gt; does not seem to work any more. The code still compiles but the LDAP login UI does not show up. Fortunately, newer versions of Sentry provide built-in support for SAML2 authentication, so we can use that instead. We can do this because our LDAP service is connected with an identity provider, in our case, a Keycloak server. &lt;/p&gt;
&lt;p&gt;It took a bit of fiddlings in the UI of these two applications to set things up correctly. Here's how.&lt;/p&gt;
&lt;h1&gt;Keycloak Setup&lt;/h1&gt;
&lt;p&gt;The first step is to register Sentry with IdP, i.e. the Keycloak server. I am using Keycloak 3.4.3.Final community. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a client&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Click "Clients" &amp;gt; "Create". &lt;/p&gt;
&lt;p&gt;For the required "Client ID" field, just type something like &lt;code&gt;https://sentry.example.com/saml/metadata/example/&lt;/code&gt;, assuming the sentry server is at &lt;code&gt;sentry.example.com&lt;/code&gt;, and the organization slug in sentry is &lt;code&gt;example&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Choose &lt;code&gt;saml&lt;/code&gt; for "Client Protocol".&lt;/p&gt;
&lt;p&gt;Click "Save".&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Configure the client&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;"Sign Assertions" =&amp;gt; &lt;code&gt;OFF&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;"Encrypt Assertions" =&amp;gt; &lt;code&gt;OFF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;"Client Signature Required" =&amp;gt; &lt;code&gt;OFF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;"Force POST Binding" =&amp;gt; &lt;code&gt;ON&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;"Force Name ID Format" =&amp;gt; &lt;code&gt;OFF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;"Name ID Format" =&amp;gt; &lt;code&gt;email&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;"Valid Redirect URIs" =&amp;gt; &lt;code&gt;*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;"Assertion Consumer Service POST Binding URL" =&amp;gt; &lt;code&gt;https://sentry.example.com/saml/acs/example/&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;"Logout Service POST Binding URL" =&amp;gt; &lt;code&gt;https://sentry.example.com/saml/sls/example/&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Leave the rest as they are.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Configure Mappers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Click "Delete" on  the default "role list", and confirm, as we will use a builtin mapper.&lt;/p&gt;
&lt;p&gt;Click "Add Builtin", check "X500 email", and click "Add selected". &lt;/p&gt;
&lt;p&gt;Click "X500 Email", and change "SAML Attribute Name" to &lt;code&gt;user_email&lt;/code&gt;, as that's what Sentry expects. Click Save.&lt;/p&gt;
&lt;p&gt;We are done with Keycloak setup, now let's setup Sentry side.&lt;/p&gt;
&lt;h1&gt;Sentry Setup&lt;/h1&gt;
&lt;p&gt;The &lt;a href="https://docs.sentry.io/product/accounts/sso/saml2/"&gt;instruction&lt;/a&gt; on registering IdP with Sentry is pretty good. &lt;/p&gt;
&lt;p&gt;The first method of "Using Metadata URL" works with Keycloak. &lt;/p&gt;
&lt;p&gt;For "Meta URL", use &lt;code&gt;https://idp.example.com/auth/realms/example.com/protocol/saml/descriptor&lt;/code&gt;, assuming the keycloak server is on &lt;code&gt;idp.example.com&lt;/code&gt;, and the realm name in there is &lt;code&gt;example.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For Attribute Mappings, use &lt;code&gt;user_email&lt;/code&gt; for both "IdP User ID" and "User Email" required fields. &lt;/p&gt;
&lt;p&gt;If everything setup correctly, after you are directed to your keycloak server to login, you should be directed back to Sentry with two green notifications on top, success!&lt;/p&gt;</content><category term="notebook"></category><category term="SAML"></category><category term="Sentry"></category><category term="Keycloak"></category></entry><entry><title>LDAP Authentication Module for Nginx on Debian</title><link href="https://yyhh.org/blog/2020/10/ldap-authentication-module-for-nginx-on-debian" rel="alternate"></link><published>2020-10-04T23:33:54+00:00</published><updated>2020-10-04T23:33:54+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2020-10-04:/blog/2020/10/ldap-authentication-module-for-nginx-on-debian</id><summary type="html">&lt;p&gt;Building an nginx Debian package with LDAP authentication and virtual-host traffic statistics modules on Debian 10 Buster.&lt;/p&gt;</summary><content type="html">&lt;p&gt;To control access to various internal Web sites of a company, a simple method is to enable LDAP authentication on the Web server, so that the company directory can be brought to bear and there is no need to create individual accounts for employees on different systems.&lt;/p&gt;
&lt;p&gt;Nginx is one of the most popular free Web servers, it has a lot of built-in modules. Unfortunately, LDAP is not one of them, so we have to compile from the source. &lt;/p&gt;
&lt;p&gt;Here are the steps to build a nginx Debian package from source with LDAP module enabled, on Debian 10 buster. While at it, we will also add a nginx virtual host traffic status module. &lt;/p&gt;
&lt;p&gt;First install necessary tools:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;dpkg-dev&lt;span class="w"&gt; &lt;/span&gt;devscripts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now get the source and dependency of nginx&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;nginx
sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;build-dep&lt;span class="w"&gt; &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It is important to get the LDAP development library, as well as a few necessary libraries.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;libldap2-dev&lt;span class="w"&gt; &lt;/span&gt;libssl-dev&lt;span class="w"&gt; &lt;/span&gt;libpcre3-dev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Clone &lt;code&gt;nginx-auth-ldap&lt;/code&gt; and &lt;code&gt;nginx-module-vts&lt;/code&gt; source code that we plan to compile into the nginx binary.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;https://github.com/kvspb/nginx-auth-ldap.git
git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;https://github.com/vozlt/nginx-module-vts.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The part we need to change in the nginx source tree is the Debian rules, which govern how a Debian package is build.  Goes into the &lt;code&gt;debian&lt;/code&gt; directory of the nginx source folder, and edit the &lt;code&gt;rules&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;nginx-1.14.2/debian
vi&lt;span class="w"&gt; &lt;/span&gt;rules
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add two lines to the end of &lt;code&gt;common_configure_flags&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;   ... \
   --add-module=&amp;lt;path to&amp;gt;/nginx-auth-ldap \
   --add-module=&amp;lt;path to&amp;gt;/nginx-module-vts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now goes back and build.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;..
debuild&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;-uc&lt;span class="w"&gt; &lt;/span&gt;-us
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This may take a while. If the build is successful, the parent directory will now contains a bunch of .deb files and these can be installed with &lt;code&gt;dpkg -i&lt;/code&gt;. First install nginx-common_1.14.2-&lt;em&gt;.deb, then libnginx-mod-&lt;/em&gt;.deb, finally, nginx-light, full, or extras.  &lt;/p&gt;</content><category term="notebook"></category><category term="LDAP"></category><category term="Nginx"></category><category term="Debian"></category></entry><entry><title>How to Add a Preview Link to Self-hosted Netlify CMS</title><link href="https://yyhh.org/blog/2020/04/how-to-add-a-preview-link-to-self-hosted-netlify-cms" rel="alternate"></link><published>2020-04-09T21:47:15+00:00</published><updated>2020-04-09T21:47:15+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2020-04-09:/blog/2020/04/how-to-add-a-preview-link-to-self-hosted-netlify-cms</id><summary type="html">&lt;p&gt;Adding live draft preview links to self-hosted Netlify CMS through GitHub commit statuses, Jenkins builds, and nginx hosting.&lt;/p&gt;</summary><content type="html">&lt;p&gt;If you are using a self-hosted  Netlify CMS as the online editor for your SSG powered Website and you are using the editorial workflow (you have &lt;code&gt;publish_mode: editorial_workflow&lt;/code&gt; in your config.yml), a pain point is that you do not see a preview of the live page when the page is in draft. Unlike the master branch that you can  see the live page after it is built, the draft is committed to a different git branch so you do not have a link to the built page.&lt;/p&gt;
&lt;p&gt;Sure, you always have a preview on the right panel in Netlify CMS, but this preview does not look like the real page. Even if you use &lt;code&gt;CMS.registerPreviewStyle&lt;/code&gt; to register a stylesheet that matches your live page style, you still miss all the other parts, such the header, footer and sidebar, so you don't know how the whole page looks like until the page is published.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Preview link in Netlify CMS" src="/images/uploads/screen-shot-2020-04-09-at-4.10.24-pm.png" title="Preview link in Netlify CMS"&gt;&lt;/p&gt;
&lt;p&gt;Netlify CMS has a feature to show a preview link for drafts, but one needs to do some setup to make it shows up. Right now, this feature only supports github as the git backend. Here I will show how I work with github, Jenkins and nginx to supply a preview link to Netlify CMS. &lt;/p&gt;
&lt;p&gt;Before we begin, here's what we already have. We use a github organization, say example-com to host the repository for the site, so &lt;code&gt;example-com/site&lt;/code&gt; would be the repo. The site source contains a Jenkinsfile, so when the repo is committed to, Jenkins automatically builds the site using its github integration. &lt;/p&gt;
&lt;p&gt;We also set up nginx to directly point to the built site directory as the root. We are using eleventy as the SSG, so the built site is in &lt;code&gt;_site&lt;/code&gt; directory. This works well for automatic deployment of the site. Whenever the master branch of the source repository is committed to, after a few seconds, the web server's &lt;code&gt;&amp;lt;jenkins-agent-home&amp;gt;/workspace/&amp;lt;jenkins-job-name&amp;gt;_master/_site&lt;/code&gt; directory will contain the updated site content for https://example.com&lt;/p&gt;
&lt;p&gt;To add a preview link, we basically need to do the same for the preview branch, &lt;code&gt;PR-5&lt;/code&gt;, a pull-request to github sent by Netlify. There are a few things need to happen.&lt;/p&gt;
&lt;h2&gt;DNS&lt;/h2&gt;
&lt;p&gt;We need to setup a wildcard DNS record, so that HTTP requests to places such as &lt;code&gt;PR-5.example.com&lt;/code&gt;, &lt;code&gt;PR-11.example.com&lt;/code&gt;  goes to the IP address of the Web server. Basically, you need to add an &lt;code&gt;A&lt;/code&gt; record for &lt;code&gt;*.example.com&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Nginx&lt;/h2&gt;
&lt;p&gt;On the Web server, we need to setup nginx to look for these PR host names, and dynamically set the site root to point to the correct Jenkins workspace directory. For example, &lt;code&gt;PR-5.example.com&lt;/code&gt; should have &lt;code&gt;&amp;lt;jenkins-agent-home&amp;gt;/workspace/&amp;lt;jenkins-job-name&amp;gt;_PR-5/_site&lt;/code&gt; as the root. To do that, first edit &lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt;, add in the &lt;code&gt;http&lt;/code&gt; context the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;    map $http_host $rootpath {
        ~^(?&amp;lt;pr&amp;gt;pr\-.+)\.example\.com$  $pr;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This will capture the &lt;code&gt;PR-5&lt;/code&gt; part of the hostname, and put it in &lt;code&gt;$rootpath&lt;/code&gt; variable.&lt;/p&gt;
&lt;p&gt;Then create a nginx site conf for the PR sites, say, &lt;code&gt;/etc/nginx/site-enabled/pr.conf&lt;/code&gt;,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;# SSL configuration&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;listen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;listen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[::]:&lt;/span&gt;&lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ssl&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ssl_certificate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;letsencrypt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;fullchain&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;ssl_certificate_key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;letsencrypt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;live&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;privkey&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ssl_session_timeout&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;ssl_ciphers&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;aNULL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;MD5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;server_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~^&lt;/span&gt;&lt;span class="n"&gt;pr&lt;/span&gt;\&lt;span class="o"&gt;-.+&lt;/span&gt;\&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;\&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;set_by_lua&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;pr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;return string.upper(ngx.var.rootpath)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jenkins&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;slave&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;workspace&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;com_site_&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="n"&gt;pr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;_site&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Because DNS is case insensitive, it will not preserve the uppercase of PR-5.example.com, we will have to use lua to uppercase it to match the case sensitive directory path. &lt;/p&gt;
&lt;p&gt;Notice also that we have a wildcard SSL certificate from Lets' Encrypt for &lt;code&gt;*.example.com&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Jenkinsfile&lt;/h2&gt;
&lt;p&gt;On Jenkins, just setup a job that use a Jenkinsfile. My Jenkinsfile in the site source looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;#!/usr/bin/env groovy&lt;/span&gt;

&lt;span class="n"&gt;pipeline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;web&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;GITHUB_ACCESS_TOKEN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;GITHUB_ACCESS_TOKEN&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;stages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Build&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;env&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BRANCH_NAME&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startsWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;PR-&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BUILD_INFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;${env.RUN_DISPLAY_URL}|${env.JOB_NAME} [${env.BUILD_NUMBER}]&amp;gt; submitted by ${env.CHANGE_AUTHOR} with PR &amp;lt;https://github.com/example-com/site/pull/${CHANGE_ID}|#${env.CHANGE_ID}&amp;gt;: ${env.CHANGE_TITLE}&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GIT_COMMIT_MSG&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="nl"&gt;script:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;git log --format=%B -n 1 ${env.GIT_COMMIT} | head -n 1&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="nl"&gt;returnStdout:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;trim&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GIT_AUTHOR_NAME&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="nl"&gt;script:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;git show -s --pretty=%an ${env.GIT_COMMIT}&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="nl"&gt;returnStdout:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;trim&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BUILD_INFO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&amp;lt;${env.RUN_DISPLAY_URL}|${env.JOB_NAME} [${env.BUILD_NUMBER}]&amp;gt; submitted by ${env.GIT_AUTHOR_NAME} with commit &amp;lt;https://github.com/example-com/site/commit/${env.GIT_COMMIT}|${env.GIT_COMMIT.take(7)}&amp;gt;: ${env.GIT_COMMIT_MSG}&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="s1"&gt;          npm install&lt;/span&gt;
&lt;span class="s1"&gt;          npx @11ty/eleventy&lt;/span&gt;
&lt;span class="s1"&gt;        &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;script&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BRANCH_NAME&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startsWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;PR-&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="s1"&gt;              GIT_PR_COMMIT=$(git show-ref -s &amp;quot;refs/remotes/origin/${BRANCH_NAME}&amp;quot;)&lt;/span&gt;
&lt;span class="s1"&gt;              curl -X POST -H &amp;quot;Content-Type:application/json&amp;quot; \&lt;/span&gt;
&lt;span class="s1"&gt;              -H &amp;quot;Authorization: token ${GITHUB_ACCESS_TOKEN}&amp;quot; \&lt;/span&gt;
&lt;span class="s1"&gt;              -d &amp;#39;{&amp;quot;state&amp;quot;: &amp;quot;success&amp;quot;, &amp;quot;context&amp;quot;: &amp;quot;netlify-cms/preview/deploy&amp;quot;, &amp;quot;description&amp;quot;: &amp;quot;Deploy preview ready&amp;quot;, &amp;quot;target_url&amp;quot;: &amp;quot;https://&amp;#39;&amp;quot;${BRANCH_NAME}&amp;quot;&amp;#39;.example.com/&amp;quot;}&amp;#39; \&lt;/span&gt;
&lt;span class="s1"&gt;              &amp;quot;https://api.github.com/repos/example-com/site/statuses/${GIT_PR_COMMIT}&amp;quot;&lt;/span&gt;
&lt;span class="s1"&gt;          &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;slackSend&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#00FF00&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;message:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;SUCCESSFUL: Job ${env.BUILD_INFO}&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;aborted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;slackSend&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#FF00FF&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;message:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ABORTED: Job ${env.BUILD_INFO}&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;notBuilt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;slackSend&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#AAAAAA&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;message:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;NOT_BUILT: Job ${env.BUILD_INFO}&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;unstable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;slackSend&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;color:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#FFFF00&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;message:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;UNSTABLE: Job ${env.BUILD_INFO}&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On github, I have created a personal access token, and added the token in Jenkins credentials as &lt;code&gt;GITHUB_ACCESS_TOKEN&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;You can see that we are sending build status to slack, but that's not important. The important part is in the additional step in the post success script, where we use curl to send a POST request to github statuses API to report a successful preview deployment (as a pull request). All the information needed for the preview link is in the JSON payload&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&amp;quot;state&amp;quot;:&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;success&amp;quot;,&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&amp;quot;context&amp;quot;:&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;netlify-cms/preview/deploy&amp;quot;,&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&amp;quot;description&amp;quot;:&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;Deploy&lt;span class="w"&gt; &lt;/span&gt;preview&lt;span class="w"&gt; &lt;/span&gt;ready&amp;quot;,&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&amp;quot;target_url&amp;quot;:&lt;span class="w"&gt; &lt;/span&gt;&amp;quot;https://&amp;#39;&amp;quot;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;BRANCH_NAME&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;&amp;quot;&amp;#39;.example.com/&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;state&lt;/code&gt; is required. The &lt;code&gt;context&lt;/code&gt; is what I made up, but it is important to have the keyword "deploy" in there, as that's what Netlify CMS is looking for. The &lt;code&gt;description&lt;/code&gt; can be whatever. The &lt;code&gt;target_url&lt;/code&gt; is the preview link we are after!  &lt;/p&gt;
&lt;h2&gt;Netlify CMS config.yml&lt;/h2&gt;
&lt;p&gt;If you want the preview link to point to the draft article itself, you will need to add a &lt;code&gt;preview_path&lt;/code&gt; in the collection in config.yml. For example, &lt;code&gt;preview_path: blog/{{slug}}&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;Wow, all these, just for a link. Oh well, without this link, your writers and editors will probably be mad at you, so it definitely worth it.&lt;/p&gt;</content><category term="notebook"></category><category term="SSG"></category><category term="Netlify CMS"></category><category term="Jenkins"></category><category term="Github"></category><category term="nginx"></category><category term="SysAdmin"></category></entry><entry><title>How to enable SAML SSO with self-hosted gotrue and git-gateway</title><link href="https://yyhh.org/blog/2020/04/how-to-enable-saml-sso-with-self-hosted-gotrue-and-git-gateway" rel="alternate"></link><published>2020-04-03T06:18:46+00:00</published><updated>2020-04-03T06:18:46+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2020-04-03:/blog/2020/04/how-to-enable-saml-sso-with-self-hosted-gotrue-and-git-gateway</id><summary type="html">&lt;p&gt;Enabling SAML single sign-on for self-hosted Netlify CMS with gotrue and git-gateway so editors can use an existing corporate identity system.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Static Site Generator (SSG) is in vogue for building Web sites. Compared with traditional content management system (CMS), SSG is more performant, flexible and easier to maintain for people comfortable with coding . However, for the non-technical crowd, a WYSIWYG online editor is still the way to go. &lt;a href="https://www.netlifycms.org/"&gt;Netlify CMS&lt;/a&gt; fills this need nicely by offering a user interface for SSG. This article details how to enable single sign-on (SSO) for Netlify CMS, so it can be used in a business environment, where marketers, copy writers or other non-coding editors can edit and publish content. &lt;/p&gt;
&lt;p&gt;Netlify's cloud platform offers SSO, and they also makes their software available in open source. Obviously, these open source software are not particularly well documented, so most people should be using their cloud offering. However, for some companies that are paranoid about privacy and business control, it is possible to host their own, for example, in order to utilize an existing corporate security infrastructure.  &lt;/p&gt;
&lt;p&gt;In this guide, we are going to utilize three Netlify's open source components to achieve SSO for a SSG powered Web site: &lt;a href="https://github.com/netlify/gotrue"&gt;gotrue&lt;/a&gt; is an identity service provider; &lt;a href="https://github.com/netlify/git-gateway"&gt;git-gateway&lt;/a&gt; enables people to commit content in git without knowing about git; and &lt;a href="https://github.com/netlify/netlify-identity-widget"&gt;Netlify identity widget&lt;/a&gt; provides the Web form for login. &lt;/p&gt;
&lt;p&gt;We will connect gotrue with an existing Identity Provider (IdP) over &lt;a href="https://en.wikipedia.org/wiki/SAML_2.0"&gt;SAML 2.0&lt;/a&gt; protocols. In this case, an  installation of &lt;a href="https://www.keycloak.org/"&gt;Keycloak&lt;/a&gt; will be our IdP.&lt;/p&gt;
&lt;h4&gt;Keycloak Setup&lt;/h4&gt;
&lt;p&gt;First, we need to create a new client for the service provider (SP) in Keycloak. In this case, SP is gotrue, which is an identity API server written in go. In the administrative console of Keycloak, create a client with the ID &lt;code&gt;https://example.com/.netlify/identity/saml&lt;/code&gt;, which points to the API endpoint of gotrue. Replace &lt;code&gt;example.com&lt;/code&gt; with your domain name.&lt;/p&gt;
&lt;p&gt;In the settings, make sure to &lt;em&gt;uncheck&lt;/em&gt; &lt;code&gt;Force POST Binding&lt;/code&gt;. Otherwise, gotrue will throw an error:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{"code":400,"msg":"Unsupported provider: No valid SSO service found in IDP metadata"}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Turns out that gotrue only supports HTTP-Redirect binding and does not support POST binding as of this writing. I find gotrue's design choice strange, as POST has much less uncertainty to deal with in a complex environment where a bunch of Web proxying and redirecting are going on. Most SAML SPs I dealt with use POST. Anyway, it is what it is. &lt;/p&gt;
&lt;p&gt;Correspondingly, set &lt;code&gt;Assertion Consumer Service Redirect Binding URL&lt;/code&gt; instead of the POST one. The value should be &lt;code&gt;https://example.com/.netlify/identity/saml/acs&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;On the other hand, Keycloak also has its own quirk. In its metadata API endpoint, namely &lt;code&gt;{root}/auth/realms/{realm}/protocol/saml/descriptor&lt;/code&gt;, it returns an XML document that is not conforming to the SAML specification. A non-forgiving SP implementation will have a problem consuming the document, which is the case with gotrue. It will dump this error message:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{"code":400,"msg":"Unsupported provider: Fetching metadata failed: expected element type \u003cEntityDescriptor\u003e but have \u003cEntitiesDescriptor\u003e"}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As you can see, Keycloak's XML has an unnecessary extra layer of tag &lt;code&gt;EntitiesDescriptor&lt;/code&gt; around &lt;code&gt;EntityDescriptor&lt;/code&gt;, which trips gotrue. Strangely, RedHat decided not to fix this. See &lt;a href="https://issues.redhat.com/browse/KEYCLOAK-4399"&gt;this issue&lt;/a&gt; for a fun conversation.&lt;/p&gt;
&lt;p&gt;So you will have to fix it yourself. What I did was to manually copy out the correct metadata, save it in a XML file and put it on some public facing Web server temporally for gotrue to fetch. The correct metadata can be obtained in the Keycloak UI, go to "Installation" tab, then select "SAML Metadata IDPSSODescriptor".&lt;/p&gt;
&lt;h4&gt;Gotrue and git-gateway Setup&lt;/h4&gt;
&lt;p&gt;There is an excellent guide on how to self-host gotrue and git-gateway at &lt;a href="https://github.com/hfte/netlify-cms-with-selfhosted-gotrue-and-git-gateway"&gt;https://github.com/hfte/netlify-cms-with-selfhosted-gotrue-and-git-gateway&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Follow that guide first, and make sure it works. It does email based login, useful for inviting external bloggers or editors to work on the site. For SAML based SSO that is suitable for employees, read on.&lt;/p&gt;
&lt;p&gt;There is a bug in the current version of gotrue source code. You will have to patch it first. On line 130 in &lt;code&gt;api/provider/saml.go&lt;/code&gt;, we will need to add a &lt;code&gt;NameIdFormat&lt;/code&gt; field. Otherwise, gotrue will send &lt;code&gt;""&lt;/code&gt; as the NameIdFormat, which cause Keycloak to error out with &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"We are sorry... Unsupported NameIdFormat".&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The fix should look like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;sp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;saml2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SAMLServiceProvider&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;IdentityProviderSSOURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;ssoService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;IdentityProviderIssuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EntityID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;AssertionConsumerServiceURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;baseURI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;String&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/saml/acs&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;ServiceProviderIssuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="nx"&gt;baseURI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;String&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/saml&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;SignAuthnRequests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;AudienceURI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="nx"&gt;baseURI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;String&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/saml&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;IDPCertificateStore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;certStore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;SPKeyStore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="nx"&gt;keyStore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;NameIdFormat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;AllowMissingAttributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here we set name id format to be email address, which apparently is the only format that gotrue works with. If you set the format as 'unspecified', users will be able to login, but they cannot edit anything, all the Netlify CMS UI controls will be greyed out. Obviously gotrue is checking that it gets an email address from the IdP.&lt;/p&gt;
&lt;p&gt;After the patch, compile the code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make deps
make build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now the main configuration of gotrue is in a &lt;code&gt;.env&lt;/code&gt; file in the root of the gotrue source code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;GOTRUE_JWT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;your-secret-key-shared-between-git-gateway-and-gotrue&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_JWT_EXP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3600&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_JWT_AUD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost
&lt;span class="nv"&gt;GOTRUE_DB_DRIVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mysql
&lt;span class="nv"&gt;GOTRUE_JWT_DEFAULT_GROUP_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin
&lt;span class="nv"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;gotrue:mysqlpassword@tcp(mysqlipaddress:3306)/gotrue?parseTime=true&amp;amp;multiStatements=true&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_API_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost
&lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8081&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_SITE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://example.com/&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_LOG_LEVEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;DEBUG
&lt;span class="nv"&gt;GOTRUE_OPERATOR_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-super-secret-operator-token
&lt;span class="nv"&gt;GOTRUE_DISABLE_SIGNUP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_MAILER_AUTOCONFIRM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_EXTERNAL_SAML_ENABLED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_EXTERNAL_SAML_METADATA_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://idp.example.com/auth/realms/example.com/protocol/saml/descriptor&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_EXTERNAL_SAML_API_BASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://example.com/.netlify/identity/&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_EXTERNAL_SAML_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Example SSO&amp;quot;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_EXTERNAL_SAML_SIGNING_CERT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_EXTERNAL_SAML_SIGNING_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="nv"&gt;GOTRUE_EXTERNAL_LABELS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;{SAML: Example SSO}&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;GOTRUE_EXTERNAL_SAML_METADATA_URL&lt;/code&gt; value should point to the corrected XML mentioned above.&lt;/p&gt;
&lt;p&gt;Note, I set the default JWT group name to be "admin", because my IdP is backed by a LDAP server that handles user group membership and permisions already, there's no need to duplicate things here. Your case may be different.&lt;/p&gt;
&lt;p&gt;Now the rest of gotrue and git-gateway setup is the same as the guide linked above.&lt;/p&gt;
&lt;h4&gt;Setup Netlify CMS&lt;/h4&gt;
&lt;p&gt;To add Netlify CMS to your site, follow &lt;a href="https://www.netlifycms.org/docs/add-to-your-site/"&gt;the instruction&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To get a nice login form with a SSO button for Netlify CMS, use netlify-identity-widget. This is done by adding some code in &lt;code&gt;/admin/index.html&lt;/code&gt; of your SSG site. Mine looks like this, and it is a bit simpler than the guide linked above.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;viewport&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Content Manager&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://identity.netlify.com/v1/netlify-identity-widget.js&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nx"&gt;netlifyIdentity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;APIUrl&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://example.com/.netlify/identity&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://unpkg.com/netlify-cms@^2.0.0/dist/netlify-cms.js&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;data-netlify-identity-button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Log in&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You may also want to add this line &lt;code&gt;&amp;lt;script type="text/javascript" src="https://identity.netlify.com/v1/netlify-identity-widget.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt; into the &lt;code&gt;index.html&lt;/code&gt; of your main site. As the email confirmation link is pointed there. &lt;/p&gt;
&lt;p&gt;Again, the rest of the setup should follow &lt;a href="https://github.com/hfte/netlify-cms-with-selfhosted-gotrue-and-git-gateway"&gt;https://github.com/hfte/netlify-cms-with-selfhosted-gotrue-and-git-gateway&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now your company personnel can use their company SSO credential to login to your SSG site to edit and publish content. No need to create another set of user name and password just for the Web editing work. &lt;/p&gt;</content><category term="notebook"></category><category term="'SAML"></category><category term="Keycloak"></category><category term="SSG"></category><category term="Netlify CMS"></category><category term="gotrue"></category><category term="SysAdmin'"></category></entry><entry><title>Migrate this blog from Drupal to a static site generator</title><link href="https://yyhh.org/blog/2020/03/migrate-this-blog-from-drupal-to-a-static-site-generator" rel="alternate"></link><published>2020-03-10T19:34:39+00:00</published><updated>2020-03-10T19:34:39+00:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2020-03-10:/blog/2020/03/migrate-this-blog-from-drupal-to-a-static-site-generator</id><summary type="html">&lt;p&gt;Moving this long-running blog from Drupal to Pelican and Netlify CMS after hosting limits made maintenance and publishing increasingly difficult.&lt;/p&gt;</summary><content type="html">&lt;p&gt;This blog has undergone a few migrations over its 15 years life span. &lt;/p&gt;
&lt;p&gt;It started out as a Blogger account in 2005. The purpose was to record some system administration details when I was an assistant professor at university, setting up my laboratry for students.   &lt;/p&gt;
&lt;p&gt;Then Yunyao joined in after I moved the blog to a self hosted Drupal 5 installation in 2007. It has been with the same hosting company ever since, and I upgraded Drupal all the way to version 8.&lt;/p&gt;
&lt;p&gt;But this old hosting account started to show limitations a couple of years ago. The technical specification simply could no longer keep up with the demands of modern PHP applications, which universally require the use of composer as a dependency manager. &lt;/p&gt;
&lt;p&gt;Composer always ran out of memory in this very modest environment (512M memory limit). It took some effort to keep Drupal up to date without the modern tools. The final straw is an error that prevented us from creating new posts. It's likely a database error, but I could not investigate properly without tools such as drush. &lt;/p&gt;
&lt;p&gt;So it is finally the time to move on. A static site generator (SSG) seems to be a good fit. Since the host only needs to serve static files, the limitation with my host account is not a concern any more. &lt;/p&gt;
&lt;h3&gt;Jekyll, Hugo and Pelican&lt;/h3&gt;
&lt;p&gt;There are perhaps hundreds of options for SSG. After some reading, I tried Jekyll, Hugo and Pelican. In the end, Pelican is the one that I got it to work, so here we are.&lt;/p&gt;
&lt;p&gt;The first problem I needed to solve is to get the content out of Drupal and feed them into the SSG system.  &lt;/p&gt;
&lt;p&gt;Both Jekyll and Hugo have importers for Drupal 6 and 7 that directly import from the Drupal database.  However none of them work with Drupal 8, which has some significant database schema changes.  &lt;/p&gt;
&lt;p&gt;I had some trouble compiling Ruby mysql library needed for Jekyll importer, so I gave up early on  Jekyll. &lt;/p&gt;
&lt;p&gt;On to Hugo, I quickly realized that I did not have the time to figure out the intricacy of the Drupal 8 database schema to adapt its Drupal 7 importer to 8. By the way, I also dislike golang the language, for I think it is reactionary (but that's for another post), so I gave it up. &lt;/p&gt;
&lt;p&gt;On the other hand, Pelican has an RSS feed importer, which I easily modified the python code to extract the pieces needed for the frontmatter of Pelican. Since each Drupal installation is different, the resulting HTML could be very different. Having an easy to hack importer helps a lot.  &lt;/p&gt;
&lt;p&gt;The lesson seems to be that a feed importer is better than a database importer for a  blog platform, since all the useful information are in the feed. There should not be a need to bother with databases, which tend to evolve a lot from one version to another. Feed format is universal. &lt;/p&gt;
&lt;h3&gt;Pelican and NetlifyCMS&lt;/h3&gt;
&lt;p&gt;After some minor cleanup of the markdown files generated from the feed importer, I quickly switched the live site to Pelican. I then pushed the whole thing to a github repository and thought I was done. Then Yunyao said she wanted a Web based editor like before, instead of having to write blogs like writing programming code. &lt;/p&gt;
&lt;p&gt;That means we need a headless CMS to pair with Pelican. Again, there are so many options, and I just picked the first one that come into my head, NetlifyCMS. It includes simply two files that you drop into the content directory under &lt;code&gt;/admin&lt;/code&gt;. It provides a react.js app with a nice editor for writing the posts in WYSIWYG fashion. &lt;/p&gt;
&lt;p&gt;&lt;img alt="netlify screenshot" src="/images/uploads/screen-shot-2020-03-10-at-1.54.57-pm.png" title="Screenshot of Netlify CMS"&gt;&lt;/p&gt;
&lt;p&gt;The form widgets for the frontmatter fields are a big help. Otherwise, I will have to copy an old post as the template to write new ones. The configuration of these widgets in a &lt;code&gt;config.yml&lt;/code&gt; file is quite nice and easy.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gateway&lt;/span&gt;

&lt;span class="n"&gt;local_backend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;true&lt;/span&gt;

&lt;span class="n"&gt;media_folder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;content/images/uploads&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Folder where user uploaded files should go&lt;/span&gt;
&lt;span class="n"&gt;public_folder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/images/uploads&amp;quot;&lt;/span&gt;

&lt;span class="n"&gt;collections&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# A list of collections the CMS should be able to edit&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;blog&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Used in routes, ie.: /admin/collections/:slug/edit&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;identifier_field&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Article&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Used in the UI, ie.: &amp;quot;New Post&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;folder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# The path to the folder where the documents are stored&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;extension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frontmatter&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Allow users to create new documents in this collection&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;{{slug}}&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# Filename template, e.g., title.md&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# The fields each document in this collection have&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;datetime&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Author&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Yunyao&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Yunyao&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Huahai&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Category&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;experience&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;experience&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;notebook&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;opinion&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Select category&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Tags&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Tags&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Enter comma-separated words&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Series&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Series&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;string&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Give multiple related articles a series name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Language&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Lang&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;zh&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Select en for English, zh for 中文&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;published&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;draft&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;published&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Draft does not show on site&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Body&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;body&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;markdown&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I am also taking advantage of its beta feature: local development. So I can write a bash script to &lt;code&gt;write-blog&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;

git&lt;span class="w"&gt; &lt;/span&gt;pull&lt;span class="w"&gt; &lt;/span&gt;

npx&lt;span class="w"&gt; &lt;/span&gt;netlify-cms-proxy-server&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;npx.pid

invoke&lt;span class="w"&gt; &lt;/span&gt;livereload&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;invoke.pid

&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;------------------------------------------------------------&amp;quot;&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Go to https://localhost:8000/admin to edit blog&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Go to https://localhost:8000 to view blog&amp;quot;&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Don&amp;#39;t forget to run &amp;#39;publish-blog&amp;#39; to publish the blog to yyhh.org&amp;quot;&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;------------------------------------------------------------&amp;quot;&lt;/span&gt;

&lt;span class="nb"&gt;fg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and to &lt;code&gt;publish-blog&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="nb"&gt;kill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-9&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;cat&lt;span class="w"&gt; &lt;/span&gt;npx.pid&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="nb"&gt;kill&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-9&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;cat&lt;span class="w"&gt; &lt;/span&gt;invoke.pid&lt;span class="sb"&gt;`&lt;/span&gt;

git&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;-A
git&lt;span class="w"&gt; &lt;/span&gt;commit&lt;span class="w"&gt; &lt;/span&gt;-am&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;publish blog&amp;quot;&lt;/span&gt;
git&lt;span class="w"&gt; &lt;/span&gt;push

invoke&lt;span class="w"&gt; &lt;/span&gt;publish

&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Blog published at https://yyhh.org&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Good and Bad&lt;/h3&gt;
&lt;p&gt;This setup works nicely. Obviously, the site loads much faster, as it just serves static files.&lt;/p&gt;
&lt;p&gt;Pelican also gets me some new features that I did not have before. The i18n subsite feature allows us to separate English and Chinese content completely, so people do not have to read things they cannot understand. The translation configuration with gettext and po files works pretty well.  &lt;/p&gt;
&lt;p&gt;Pelican is pretty old in term of "the latest and the greatest" technology fad, so there is not a lot of activities going on. There are not many themes that are actively updated. It is however sufficient for a personal blog.&lt;/p&gt;
&lt;p&gt;The main concern is the slowness of the build. It would take about 50 seconds to build this site on my laptop (albeit a very old one). As more content is added, it would get worse. So I will definitely switch again in the future. &lt;/p&gt;
&lt;p&gt;On the other hand, with the help of NetlifyCMS, the authoring is not affected too much by the slow build, because the CMS already gives us immediate feedback on the page we are editing. The build is only kicked off when we hit the publish button. So for now, I am OK with this setup. &lt;/p&gt;</content><category term="notebook"></category><category term="'Drupal"></category><category term="SSG"></category><category term="Pelican"></category><category term="SysAdmin'"></category></entry><entry><title>Books Read in 2020</title><link href="https://yyhh.org/blog/2020/01/books-read-in-2020" rel="alternate"></link><published>2020-01-02T05:29:00-08:00</published><updated>2020-01-02T05:29:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2020-01-02:/blog/2020/01/books-read-in-2020</id><summary type="html">&lt;p&gt;Notes from a challenge to read or listen to 52 books in 2020, with brief reflections on decluttering, motivation, and living wholeheartedly.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I challenge myself to read or listen to 52 books in 2020. I'm listing them here with a short descriptions about them to keep track of what I've read and key ideas learned.&lt;/p&gt;
&lt;p&gt;1. &lt;a href="https://amzn.to/2QARQhS"&gt;The Minimalist Home: A Room-by-Room Guide to a Decluttered, Refocused Life&lt;/a&gt; As a minimalist at heart, this is a great book for me to read (or rather to listen to). It provides inspiring stories as well as practical tips. By minimizing our life (it means different things to different people), we can focus on the things that are actually important to us.&lt;/p&gt;
&lt;p&gt;2. &lt;a href="https://amzn.to/39ZVb30"&gt;Drive: The Surprising Truth About What Motivates Us&lt;/a&gt; This book talks about Motivation 3.0 and discusses the three critical elements of Motivation 3.0: Autonomy, Mastery, and Purpose. As a computer scientist in a world-class research lab, I completely agree with the importance of intrinsic motivation for highly creative work for myself and those I work with. It is really important for organizations and individuals to understand how to provide such an environment at work and at home. The author also provides good reference materials &lt;a href="https://www.danpink.com/resources/"&gt;online&lt;/a&gt; worthwhile to check out. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/Gifts-Imperfection-Think-Supposed-Embrace/dp/159285849X/ref=sr_1_1?crid=31T7OSB97QTJ4&amp;amp;dchild=1&amp;amp;keywords=the+gift+of+imperfection&amp;amp;qid=1603980797&amp;amp;sprefix=the+gift+of+imp%2Caps%2C210&amp;amp;sr=8-1"&gt;The Gifts of Imperfection&lt;/a&gt; This took talks about how to lead a wholehearted and lives a meaningful life based on who you are, not you are supposed to be. &lt;/li&gt;
&lt;/ol&gt;</content><category term="experience"></category><category term="Book"></category></entry><entry><title>Migrate DokuWiki to another server</title><link href="https://yyhh.org/blog/2018/10/migrate-dokuwiki-to-another-server" rel="alternate"></link><published>2018-10-20T04:46:00-07:00</published><updated>2018-10-20T04:46:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2018-10-20:/blog/2018/10/migrate-dokuwiki-to-another-server</id><summary type="html">&lt;p&gt;Lessons from moving a DokuWiki installation between servers during a migration from AWS to Google Cloud, testing the promise of a simple file-based move.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="https://www.dokuwiki.org/dokuwiki"&gt;DokuWiki&lt;/a&gt; is one of the most easy-to-use open source Wiki software. It is a very good internal documentation tool for small or medium sized organizations.&lt;/p&gt;
&lt;p&gt;Comparing with using Google Docs for the same purpose, one advantage of using a Wiki is that it is more searchable and navigable. In addition, Wiki software is often very extensible. In the case of DokuWiki, there are hundreds of plugins that can help with many aspects of doing documentation work. In my company, we not only use DokuWiki to keep technical documentations up to date , but also used it for administrative chores, such as filling out forms, keeping track of vacations, and so on.&lt;/p&gt;
&lt;p&gt;On the technical side, DokuWiki is a PHP application that does not reply on a database backend. All the materials are in plain text files. So one of the claimed advantages is that it is easy to migrate a DokuWiki installation from one host to another, because you could simply zip up the file directory, move to another host and unzip. As it happened, as part of my company's migration from AWS to Google Cloud, I had a chance to test this claim for real. &lt;/p&gt;
&lt;p&gt;It turned out it was not as straightforward as &lt;a href="https://www.dokuwiki.org/faq:servermove"&gt;DokuWiki claims&lt;/a&gt;. Although in the end, it was really a very simple migration, after I figured out the proper steps.&lt;/p&gt;
&lt;p&gt;At first, I did what the document suggested: simply moved the files over to another host, but the site failed to load. Pouring over the error messages in the logs, I realized that some of the installed plugins could not compile, but somehow they did not break the old site. After removing these broken plugins on the old site, I decided not to simply zipping up the file directory again. Instead, I did the following:&lt;/p&gt;
&lt;p&gt;1. Use a plugin called "Backup Tool" to zip up only essential configs and settings.&lt;/p&gt;
&lt;p&gt;2. Download the latest stable version of DokuWiki software bundle, unzip on the new host.&lt;/p&gt;
&lt;p&gt;3. Unzip the backup bundle created in step 1 &lt;strong&gt;over&lt;/strong&gt; the fresh directory of DokuWiki created in step 2&lt;/p&gt;
&lt;p&gt;4. Load the site, success!&lt;/p&gt;
&lt;p&gt;5. However, the site reports some missing directories, such as media_attic and media_meta. Simply copying them from the old host to the new host fixes the problems.&lt;/p&gt;
&lt;p&gt;6. Mission accomplished!&lt;/p&gt;
&lt;p&gt;I think the main problem with the "copy files over" approach is that many caches on the old site tend to mess things up. A fresh new start is a surer way to migrate.&lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="DokuWiki"></category></entry><entry><title>Backup Discourse with External PostgreSQL Server</title><link href="https://yyhh.org/blog/2018/01/backup-discourse-with-external-postgresql-server" rel="alternate"></link><published>2018-01-21T05:58:00-08:00</published><updated>2018-01-21T05:58:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2018-01-21:/blog/2018/01/backup-discourse-with-external-postgresql-server</id><summary type="html">&lt;p&gt;Fixing Discourse backups against an external PostgreSQL server by updating the container's PostgreSQL tools to resolve a pg_dump version mismatch.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="https://www.discourse.org/"&gt;Discourse&lt;/a&gt; is a modern forum software that is quite popular in the technology circle. One can install a Discourse server easily with the recommended method of using docker. All the services needed by the Discourse server, e.g. Postgresql and Redis, will be running inside a docker container, which is fine for a small installation. However, if one has already an external Postgresql server running, e.g. on AWS RDS, and would like to use that instead, Discourse may have trouble doing backups, and you may receive an email from Discourse:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[2018-01-21 03:39:44] pg_dump: server version: 9.6.5; pg_dump version: 9.5.10&lt;/p&gt;
&lt;p&gt;[2018-01-21 03:39:44] pg_dump: aborting because of server version mismatch&lt;/p&gt;
&lt;p&gt;[2018-01-21 03:39:44] EXCEPTION: pg_dump failed&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The main problem is that the Postgresql client in Discourse docker image is old, currently at version 9.5, whereas most of the world has moved on to version 9.6, and some even to version 10. &lt;/p&gt;
&lt;p&gt;The Discourse people are not very helpful on their forum regarding this issue. So here's a solution:&lt;/p&gt;
&lt;p&gt;We need to update the Postgresql version in the Discourse docker container to whatever version your external Postgresql server is. Fortunately, it is fairly simple. First, get into the running container:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;./launcher&lt;span class="w"&gt; &lt;/span&gt;enter&lt;span class="w"&gt; &lt;/span&gt;app
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then update postgresql to the version you want, e.g.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt-get&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;postgresql-9.6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now link pg_dump to the right version:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ln&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;/usr/lib/postgresql/9.6/bin/pg_dump&lt;span class="w"&gt; &lt;/span&gt;/usr/bin/pg_dump
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After this, you should be able to perform backup successfully in the UI.  &lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="Discourse"></category><category term="PostgreSQL"></category></entry><entry><title>LDAP Authentication for On-premise Sentry Server using freeIPA</title><link href="https://yyhh.org/blog/2017/12/ldap-authentication-for-on-premise-sentry-server-using-freeipa" rel="alternate"></link><published>2017-12-11T23:27:00-08:00</published><updated>2017-12-11T23:27:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2017-12-11:/blog/2017/12/ldap-authentication-for-on-premise-sentry-server-using-freeipa</id><summary type="html">&lt;p&gt;Adding FreeIPA LDAP authentication to a self-hosted Sentry Docker installation, including build dependencies and Django LDAP configuration.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Sentry is a fairly popular service for tracking exceptions and errors in production softwares. They also provides a &lt;a href="https://github.com/getsentry/onpremise"&gt;docker recipe&lt;/a&gt; for people who want to self host their own sentry server. This post shows how to enable LDAP authentication for such a self hosted sentry server, using freeIPA as the LDAP provider.&lt;/p&gt;
&lt;p&gt;In addition to follow their instructions to install sentry, the following changes need to be made to add the capability to authenticate to sentry using freeIPA as the account source:&lt;/p&gt;
&lt;p&gt;1. Change the Dockerfile to install some dependencies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;FROM sentry:8.22-onbuild

RUN apt-get update &amp;amp;&amp;amp; apt-get install -y libsasl2-dev python-dev libldap2-dev libssl-dev
RUN pip install sentry-ldap-auth
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;2. Add the following code at the end of &lt;span style="color:#e74c3c;"&gt;sentry.conf.py&lt;/span&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;#############&lt;/span&gt;
&lt;span class="c1"&gt;# LDAP auth #&lt;/span&gt;
&lt;span class="c1"&gt;#############&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;ldap&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;django_auth_ldap.config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LDAPSearch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;GroupOfUniqueNamesType&lt;/span&gt;

&lt;span class="n"&gt;AUTH_LDAP_SERVER_URI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ldap://ipa.example.com&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_BIND_DN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;uid=jenkins,cn=sysaccounts,cn=etc,dc=example,dc=com&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_BIND_PASSWORD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;secret&amp;#39;&lt;/span&gt;

&lt;span class="n"&gt;AUTH_LDAP_USER_SEARCH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LDAPSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;cn=users,cn=accounts,dc=example,dc=com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ldap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SCOPE_SUBTREE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;(uid=&lt;/span&gt;&lt;span class="si"&gt;%(user)s&lt;/span&gt;&lt;span class="s1"&gt;)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;AUTH_LDAP_GROUP_SEARCH&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LDAPSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ldap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SCOPE_SUBTREE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;(objectClass=groupOfUniqueNames)&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;AUTH_LDAP_GROUP_TYPE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GroupOfUniqueNamesType&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_REQUIRE_GROUP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_DENY_GROUP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;

&lt;span class="n"&gt;AUTH_LDAP_USER_ATTR_MAP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cn&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mail&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;AUTH_LDAP_FIND_GROUP_PERMS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_CACHE_GROUPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_GROUP_CACHE_TIMEOUT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;

&lt;span class="n"&gt;AUTH_LDAP_DEFAULT_SENTRY_ORGANIZATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;u&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Sentry&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_SENTRY_ORGANIZATION_ROLE_TYPE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;member&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_SENTRY_ORGANIZATION_GLOBAL_ACCESS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;span class="n"&gt;AUTH_LDAP_SENTRY_SUBSCRIBE_BY_DEFAULT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;

&lt;span class="n"&gt;SENTRY_MANAGED_USER_FIELDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;first_name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;last_name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;AUTHENTICATION_BACKENDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AUTHENTICATION_BACKENDS&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;sentry_ldap_auth.backend.SentryLdapBackend&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# optional, for debugging&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;logging&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getLogger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;django_auth_ldap&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StreamHandler&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FileHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/tmp/ldap2.log&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setLevel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;DEBUG&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;LOGGING&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;overridable&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sentry&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;django_auth_ldap&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;LOGGING&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;loggers&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;django_auth_ldap&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;handlers&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;console&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="s1"&gt;&amp;#39;level&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;DEBUG&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Some notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We are re-using a freeIPA system account that was created for read-only access (&lt;a href="https://yyhh.org/blog/2017/12/configure-jenkins-use-freeipa-ldap-security-realm"&gt;originally for Jenkins&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;freeIPA use a flat structure for users:  '&lt;span style="color:#e74c3c;"&gt;cn=users,cn=accounts,dc=example,dc=com&lt;/span&gt;'&lt;/li&gt;
&lt;li&gt;&lt;span style="color:#e74c3c;"&gt;AUTH_LDAP_DEFAULT_SENTRY_ORGANIZATION&lt;/span&gt; must be an exact (case sensitive) match with the organization full name, otherwise the logged in user will not have access to anything. The default organization name is "Sentry", but it can be changed in the UI.&lt;/li&gt;
&lt;li&gt;Those logging statements are useful for testing and debugging &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Updates [10/19/2020]:&lt;/p&gt;
&lt;p&gt;This works up to sentry 9, for new versions of sentry, see &lt;a href="https://yyhh.org/blog/2020/10/how-to-setup-saml2-authentication-on-sentry-with-keycloak/"&gt;this&lt;/a&gt;&lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="Sentry"></category><category term="LDAP"></category><category term="FreeIPA"></category></entry><entry><title>Configure Jenkins to use FreeIPA LDAP Security Realm</title><link href="https://yyhh.org/blog/2017/12/configure-jenkins-to-use-freeipa-ldap-security-realm" rel="alternate"></link><published>2017-12-08T00:02:00-08:00</published><updated>2017-12-08T00:02:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2017-12-08:/blog/2017/12/configure-jenkins-to-use-freeipa-ldap-security-realm</id><summary type="html">&lt;p&gt;Connecting Jenkins to FreeIPA's LDAP security realm, including a service account, user and group searches, and testing the authentication settings.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The point of setting up freeIPA for an intranet is to enable single-sign-on (SSO) for all the internal services that requires authentication and authorization. &lt;a href="https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol"&gt;LDAP&lt;/a&gt;, originated from my &lt;em&gt;alma mater&lt;/em&gt; University of Michigan, is one of the most widely accepted solutions to the problem. freeIPA can serve as a LDAP authentication and authorization provider to integrate with most of today's reputable server software. Jenkins is no exception.&lt;/p&gt;
&lt;p&gt;There are plenty of guide of integrating OpenLDAP or other LDAP providers with Jenkins. However, there are not many guides on the particulars of integrating freeIPA with Jenkins. Here's how I got it to work.&lt;/p&gt;
&lt;h2&gt;Prepare freeIPA server&lt;/h2&gt;
&lt;p&gt;First, we need to create an LDAP account for Jenkins to access the LDAP data. Create a file, e.g &lt;span style="font-family:Courier New,Courier,monospace;"&gt;jenkins.ldif&lt;/span&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;dn&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;jenkins&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sysaccounts&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;changetype&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;
&lt;span class="n"&gt;objectclass&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;
&lt;span class="n"&gt;objectclass&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;simplesecurityobject&lt;/span&gt;
&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;jenkins&lt;/span&gt;
&lt;span class="n"&gt;userPassword&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;secret&lt;/span&gt;
&lt;span class="n"&gt;passwordExpirationTime&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20380119031407&lt;/span&gt;&lt;span class="n"&gt;Z&lt;/span&gt;
&lt;span class="n"&gt;nsIdleTimeout&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now use it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;ldapmodify&lt;span class="w"&gt; &lt;/span&gt;-h&lt;span class="w"&gt; &lt;/span&gt;ipa.example.com&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;389&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-x&lt;span class="w"&gt; &lt;/span&gt;-D&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;cn=Directory Manager&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-W&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;jenkins.ldif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Configure Jenkins&lt;/h2&gt;
&lt;p&gt;Go to &lt;em&gt;Manage Jenkins&lt;/em&gt; -&amp;gt; &lt;em&gt;Configure Global Security&lt;/em&gt; -&amp;gt; &lt;em&gt;Security Realm&lt;/em&gt;, and choose &lt;em&gt;LDAP&lt;/em&gt;, and set the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ldap&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;ipa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;Group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;Group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;Group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;membership&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Search&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LDAP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;groups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;containing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;membership&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;member&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uniqueMember&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;memberUid&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;}))&lt;/span&gt;
&lt;span class="n"&gt;Manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DN&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;jenkins&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sysaccounts&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;cn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;dc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;Manager&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Password&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;secret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then click on &lt;em&gt;Test LDAP settings &lt;/em&gt;and try login with an account, if results are all green, authentication is configured. Otherwise, try tweak the settings. &lt;/p&gt;
&lt;p&gt;Now on to authorization, pick any one of the strategies. For testing, pick &lt;em&gt;Anyone can do anything&lt;/em&gt;, so we will not be locked out. Once tested, I chose &lt;em&gt;Matrix-based security&lt;/em&gt;, which give fine controls. &lt;/p&gt;
&lt;p&gt;Once saved, one has to login to Jenkins with the SSO account of freeIPA, but that's the point, isn't it. &lt;/p&gt;
&lt;h2&gt;Caution&lt;/h2&gt;
&lt;p&gt;Once freeIPA is setup, it takes over the SSH sever and &lt;span style="font-family:Courier New,Courier,monospace;"&gt;known_hosts &lt;/span&gt;file will not be updated in the account's &lt;span style="font-family:Courier New,Courier,monospace;"&gt;.ssh&lt;/span&gt; directory. Instead,  &lt;span style="font-family:Courier New,Courier,monospace;"&gt;/var/lib/sss/pubconf/known_hosts&lt;/span&gt; is updated when ssh into another machine. This creates a bit of problem for setting up SSH based Jenkins slave when using &lt;span style="font-family:Arial,Helvetica,sans-serif;"&gt;&lt;em&gt;Known host file Verification Strategy&lt;/em&gt;&lt;/span&gt;. A simple solution is to just copy the relevant host entry over. &lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="Jenkins"></category><category term="LDAP"></category><category term="FreeIPA"></category></entry><entry><title>FreeIPA in AWS EC2</title><link href="https://yyhh.org/blog/2017/12/freeipa-in-aws-ec2" rel="alternate"></link><published>2017-12-07T23:34:00-08:00</published><updated>2017-12-07T23:34:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2017-12-07:/blog/2017/12/freeipa-in-aws-ec2</id><summary type="html">&lt;p&gt;Configuring FreeIPA on AWS EC2, using Route 53 to handle the internal and public DNS records needed for cloud-hosted identity services.&lt;/p&gt;</summary><content type="html">&lt;p&gt;FreeIPA is the open source version of RedHat's identity management solution, which nicely integrates several open sources services that are important for managing an intranet: 389 LDAP Directory Server, MIT Kerboros, NTP, DNS, SSSD and others. &lt;/p&gt;
&lt;p&gt;Most of my servers are virtual machines in AWS EC2. To manage such a cloud based intranet using freeIPA, some additional configuration is necessary. Here's how I got it to work.&lt;/p&gt;
&lt;h2&gt;DNS&lt;/h2&gt;
&lt;p&gt;The main problem of enabling freeIPA in EC2, is that every machine in EC2 has at least two kinds of of IP addresses. One is internal to the VPC only, e.g. the default VPC use IP addresses starting from &lt;span style="font-family:Courier New,Courier,monospace;"&gt;172.31.*.*&lt;/span&gt;; Another kinds of IP addresses are public IP addresses, which are different from the internal ones. A default install of freeIPA server and clients in EC2 will not work due to this dual IP addresses.&lt;/p&gt;
&lt;p&gt;To install freeIPA, we first need to configure individual &lt;span style="color:null;"&gt;hosts' &lt;/span&gt;&lt;span style="color:#e74c3c;"&gt;/etc/hosts&lt;/span&gt;, &lt;span style="color:#e74c3c;"&gt;/etc/hostname&lt;/span&gt; files, so they point to the full qualified DNS name of the hosts. After that, we are ready to add these names to DNS servers.&lt;/p&gt;
&lt;h3&gt;Route53&lt;/h3&gt;
&lt;p&gt;We will bypass freeIPA's own DNS services, and use AWS Route53 DNS service. We need to setup three hosted zones for our network. One zone for the external IPs, one for internal IPs, and finally one for reverse lookup.&lt;/p&gt;
&lt;p&gt;For internal and external hosted zones, in addition to the &lt;span style="color:#e74c3c;"&gt;A&lt;/span&gt; records that map DNS names to IPs, we also need to add &lt;span style="color:#e74c3c;"&gt;TXT&lt;/span&gt; and &lt;span style="color:#e74c3c;"&gt;SRV&lt;/span&gt; records that allow freeIPA to discover services. Eg. for the external zone: &lt;/p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_kerberos.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;TXT&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;"EXAMPLE.COM"&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_kerberos-master._tcp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 88 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_kerberos._tcp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 88 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_kpasswd._tcp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 464 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_ldap._tcp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 389 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_kerberos-master._udp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 88 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_kerberos._udp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 88 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_kpasswd._udp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 464 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;_ntp._udp.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SRV&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;0 100 123 ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;ipa.example.com.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;A&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;99.99.99.99&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Here we will install the freeIPA server on a machine with external IP &lt;span style="font-family:Courier New,Courier,monospace;"&gt;99.99.99.99&lt;/span&gt;, and the DNS name for the server is&lt;span style="font-family:Courier New,Courier,monospace;"&gt; ipa.example.com&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Similar records need to be added the internal zone as well, just use the internal IP addresses.&lt;/p&gt;
&lt;p&gt;Finally, the private reverse look up zone, named &lt;span style="color:#e74c3c;"&gt;&lt;span style="font-family:Courier New,Courier,monospace;"&gt;31.172.in-addr.arpa.&lt;/span&gt;,&lt;/span&gt; has records like these:&lt;/p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td style="text-align: right;"&gt;&lt;p&gt;88.123.31.172.in-addr.arpa.&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span style="color:#e74c3c;"&gt;PTR&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;ipa.example.com&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;300&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Where &lt;span style="font-family:Courier New,Courier,monospace;"&gt;172.31.123.88&lt;/span&gt; is the internal IP address of the freeIPA server. &lt;/p&gt;
&lt;p&gt;We need to do these for all servers managed by freeIPA. It's a bit of work if there are not many machines. For large deployment, one may want to investigate automatized solution with AWS APIs.&lt;/p&gt;
&lt;h3&gt;Test DNS&lt;/h3&gt;
&lt;p&gt;On a machine outside the VPC&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;dig&lt;span class="w"&gt; &lt;/span&gt;+short&lt;span class="w"&gt; &lt;/span&gt;ipa.example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Should return the external IP of the machine.&lt;/p&gt;
&lt;p&gt;Doing the same on an internal machine should return the internal IP of the machine.&lt;/p&gt;
&lt;p&gt;Finally, test reverse lookup on an internal machine&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;dig&lt;span class="w"&gt; &lt;/span&gt;+short&lt;span class="w"&gt; &lt;/span&gt;-x&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;172&lt;/span&gt;.31.123.88
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Should return the DNS name of the machine.&lt;/p&gt;
&lt;h2&gt;FreeIPA Server Install&lt;/h2&gt;
&lt;p&gt;I normally use Debian servers,  but there's currently no stable  freeIPA server available in Debian Stretch, so I installed a Fedora, which supports freeIPA natively.&lt;/p&gt;
&lt;p&gt;Use a small EC2 instance that will be dedicated to running a freeIPA server.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# yum install freeipa-server&lt;/span&gt;
&lt;span class="c1"&gt;# ipa-server-install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And say "no" to DNS. The installation should be successful if all instructions are followed.&lt;/p&gt;
&lt;h2&gt;FreeIPA  Client&lt;/h2&gt;
&lt;p&gt;Since most of my machines are Debian, I had to install Debian freeIPA clients on them. Ubuntu Xenial universe repo has a version of freeIPA  client that is compatible with Debian Strech. So I installed them.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# apt install freeipa-client&lt;/span&gt;
&lt;span class="c1"&gt;# /etc/init.d/ntp stop&lt;/span&gt;
&lt;span class="c1"&gt;# ipa-client-install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notice that we must stop NTP daemon first if it's already running. Otherwise, the client installation will fail, because the freeIPA client expects to run its own NTP service that synchronizes with the freeIPA server. &lt;/p&gt;
&lt;p&gt;After a successful installation, the client is still not ready to use, because the Ubuntu installer configured &lt;span style="color:#e74c3c;"&gt;/etc/sssd/sssd.conf&lt;/span&gt; is currently broken: nss, pam,  and ssh needs to be added. Otherwise, the client cannot be connected to. A working example of &lt;span style="color:#e74c3c;"&gt;/etc/sssd/sssd.conf&lt;/span&gt; looks like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[domain/example.com]&lt;/span&gt;

&lt;span class="na"&gt;cache_credentials&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;True&lt;/span&gt;
&lt;span class="na"&gt;krb5_store_password_if_offline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;True&lt;/span&gt;
&lt;span class="na"&gt;ipa_domain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;example.com&lt;/span&gt;
&lt;span class="na"&gt;id_provider&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ipa&lt;/span&gt;
&lt;span class="na"&gt;auth_provider&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ipa&lt;/span&gt;
&lt;span class="na"&gt;access_provider&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ipa&lt;/span&gt;
&lt;span class="na"&gt;ipa_hostname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aclient.example.com&lt;/span&gt;
&lt;span class="na"&gt;chpass_provider&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ipa&lt;/span&gt;
&lt;span class="na"&gt;ipa_server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;_srv_, ipa.example.com&lt;/span&gt;
&lt;span class="na"&gt;ldap_tls_cacert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/etc/ipa/ca.crt&lt;/span&gt;
&lt;span class="k"&gt;[sssd]&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;nss, sudo, pam, ssh&lt;/span&gt;

&lt;span class="na"&gt;domains&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;example.com&lt;/span&gt;
&lt;span class="k"&gt;[nss]&lt;/span&gt;
&lt;span class="na"&gt;homedir_substring&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/home&lt;/span&gt;

&lt;span class="k"&gt;[pam]&lt;/span&gt;

&lt;span class="k"&gt;[sudo]&lt;/span&gt;

&lt;span class="k"&gt;[autofs]&lt;/span&gt;

&lt;span class="k"&gt;[ssh]&lt;/span&gt;

&lt;span class="k"&gt;[pac]&lt;/span&gt;

&lt;span class="k"&gt;[ifp]&lt;/span&gt;

&lt;span class="k"&gt;[secrets]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Restart sssd or simply reboot. Everything should work as expected.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;kinit&lt;span class="w"&gt; &lt;/span&gt;admin
$&lt;span class="w"&gt; &lt;/span&gt;ssh&lt;span class="w"&gt; &lt;/span&gt;admin@ipa.example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Should login to the freeIPA server as admin user. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;ssh&lt;span class="w"&gt; &lt;/span&gt;admin@aclient.example.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Should login to the client machine as admin user.&lt;/p&gt;
&lt;p&gt;Congratulation, now you have single sign on (SSO) for your intranet in AWS EC2!&lt;/p&gt;
&lt;p&gt;[update: 10/23/208]&lt;/p&gt;
&lt;h2&gt;Cross Cloud Intranet&lt;/h2&gt;
&lt;p&gt;With minor modification, this same setup can be used to manage you Intranet with hosts spanning multiple cloud platforms!&lt;/p&gt;
&lt;p&gt;For example, you can have some hosts reside on Google Cloud Platform (GCP) while the IPA server lives in AWS. To do that, the &lt;span style="background-color:#e74c3c;"&gt;public&lt;/span&gt; IP addresses of these ex-AWS hosts need to be entered in &lt;span style="color:#e74c3c;"&gt;both&lt;/span&gt; external and internal DNS realms in Route53. GCP nicely supports this setup because you can reserve as many static public IP addresses as you want in GCP.&lt;/p&gt;
&lt;p&gt;For example, you can have a host on GCP with a public address 35.22.31.33, for which you assign a domain name "gcp1.example.com" in Route53. Then you run &lt;span style="color:#e74c3c;"&gt;hostname gcp1.example.com&lt;/span&gt; on this GCP host. After that, you should be able to install freeIPA client on it to enroll into your Intranet.&lt;/p&gt;
&lt;p&gt;After install freeIPA client, another important modification, is to add the following directive in &lt;span style="color:#e74c3c;"&gt;/etc/krb5.conf&lt;/span&gt;&lt;span style="color:null;"&gt; of all your ex-AWS hosts:&lt;/span&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[libdefaults]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="na"&gt;ignore_acceptor_hostname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This directive tells Kerberos service of an accepting host to not verify its own hostname, because an ex-AWS host's attempt to discover its own hostname will yield a name that is different from the one you assigned in Route53. With this change, you should be able to access your ex-AWS hosts as if they are part of your Intranet. Your SSO should work on these ex-AWS hosts as well.&lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="AWS"></category><category term="DNS"></category><category term="FreeIPA"></category></entry><entry><title>Ecobee3 installation with K wire</title><link href="https://yyhh.org/blog/2017/12/ecobee3-installation-with-k-wire" rel="alternate"></link><published>2017-12-01T06:13:00-08:00</published><updated>2017-12-01T06:13:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2017-12-01:/blog/2017/12/ecobee3-installation-with-k-wire</id><summary type="html">&lt;p&gt;Notes from installing an Ecobee3 smart thermostat in a home where the old thermostat used an undocumented K wire.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As part of our house modernization process, we bought an Ecobee3 Wifi enabled smart thermostat. We hope that this small device will help reduce the size of our utility bill.  The product looks very simple, but it comes with three additional sensors that can be placed in different rooms, and these can even detect room occupancy!&lt;/p&gt;
&lt;p&gt;&lt;img alt="final" src="https://farm5.staticflickr.com/4517/38758945381_22df31e473.jpg"&gt;&lt;/p&gt;
&lt;p&gt;One problem I encountered was how to install this device when the old device used a &lt;strong&gt;K&lt;/strong&gt; wire, which was not documented any where on Ecobee's site. See the circled &lt;strong&gt;K&lt;/strong&gt; below:&lt;/p&gt;
&lt;p&gt;&lt;img alt="step 1" src="https://farm5.staticflickr.com/4559/38758945231_bccf06a000.jpg"&gt;&lt;/p&gt;
&lt;p&gt;My Internet search eventually brought me to a &lt;a href="https://www.youtube.com/watch?v=NTDRQNpGi1c"&gt;Youtube video&lt;/a&gt;, where someone had a similar problem with installing a Nest thermostat. Basically, the solution was to connect the &lt;strong&gt;K&lt;/strong&gt; wire to the &lt;strong&gt;Y1&lt;/strong&gt; wire.&lt;/p&gt;
&lt;p&gt;I said to myself, maybe this works for Ecobee3 too. So I did just that:&lt;/p&gt;
&lt;p&gt;&lt;img alt="step 2" src="https://farm5.staticflickr.com/4570/38758945181_344c5b40c7.jpg"&gt;&lt;/p&gt;
&lt;p&gt;When powered up, Ecobee detected that &lt;strong&gt;Y1&lt;/strong&gt; wire is connected, and indicated that G must also be connected.&lt;/p&gt;
&lt;p&gt;&lt;img alt="step 3" src="https://farm5.staticflickr.com/4523/38758945301_242d5d8cc9.jpg"&gt;&lt;/p&gt;
&lt;p&gt;This could easily be done on the menu.&lt;/p&gt;
&lt;p&gt;&lt;img alt="step 4" src="https://farm5.staticflickr.com/4583/38758945271_292f9b0a7b.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Now everything works. What a nifty little device!&lt;/p&gt;</content><category term="experience"></category><category term="House"></category><category term="Appliance"></category></entry><entry><title>Upgrade Drupal from 6 to 8</title><link href="https://yyhh.org/blog/2017/11/upgrade-drupal-from-6-to-8" rel="alternate"></link><published>2017-11-21T23:46:00-08:00</published><updated>2017-11-21T23:46:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2017-11-21:/blog/2017/11/upgrade-drupal-from-6-to-8</id><summary type="html">&lt;p&gt;Migrating this blog from Drupal 6 to Drupal 8 with a separate test site and Drush, including hosting constraints and problems encountered along the way.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Since &lt;a href="https://www.drupal.org/forum/general/news-and-announcements/2015-11-09/drupal-6-end-of-life-announcement"&gt;Drupal 6 is no longer supported&lt;/a&gt;, I upgraded this site to the lasted version of Drupal 8.4.2 by following &lt;a href="https://www.drupal.org/docs/8/upgrade/upgrading-from-drupal-6-or-7-to-drupal-8"&gt;the guide&lt;/a&gt;. As you can see, the upgrade mostly worked. However, there are a few points of caution as well as some unresolved problems.&lt;/p&gt;
&lt;p&gt;As &lt;a href="https://yyhh.org/blog/2011/07/upgrade-drupal-almost-zero-down-time"&gt;before&lt;/a&gt;, I setup a test site in a sub-directory (h/drupal) of the main site (/h) and assigned a domain name to the test site. The test site use a new empty database. The idea is to keep the old site running, and migrate the data from the old to the new. &lt;/p&gt;
&lt;p&gt;This blog is on a hosted service that allows direct SSH access, so it made things a lot easier.&lt;strong&gt; &lt;/strong&gt;&lt;a href="https://www.drush.org/en/master/"&gt;Drush&lt;/a&gt; helped a lot. To get drush to work, I had to modify the drush bootstrap script to use php7.1-cli, because the hosting server had many versions of PHP installed, and the default one is not even a command line interpreter.  I then created a bash alias in ~/.bash_profile for the drush script, so that I could run drush anywhere. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;alias&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;drush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/h/drupal/vendor/bin/drush --root=/h/drupal&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With drush, migration was easy, with only a few commands.&lt;/p&gt;
&lt;p&gt;First initialized the database.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;drush&lt;span class="w"&gt; &lt;/span&gt;si&lt;span class="w"&gt; &lt;/span&gt;standard&lt;span class="w"&gt; &lt;/span&gt;--db-url&lt;span class="o"&gt;=&lt;/span&gt;mysql://username:pasword@new.mysql.server/newdb&lt;span class="w"&gt; &lt;/span&gt;--root&lt;span class="o"&gt;=&lt;/span&gt;/h/drupal&lt;span class="w"&gt; &lt;/span&gt;--db-prefix&lt;span class="o"&gt;=&lt;/span&gt;drupal_&lt;span class="w"&gt; &lt;/span&gt;--locale&lt;span class="o"&gt;=&lt;/span&gt;en
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now we found out all the modules enabled on the old site, and enabled them on the new site. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;drush&lt;span class="w"&gt; &lt;/span&gt;en&lt;span class="w"&gt; &lt;/span&gt;migrate_upgrade&lt;span class="w"&gt; &lt;/span&gt;migrate_tools&lt;span class="w"&gt; &lt;/span&gt;migrate_plus&lt;span class="w"&gt; &lt;/span&gt;rules&lt;span class="w"&gt; &lt;/span&gt;config_update&lt;span class="w"&gt; &lt;/span&gt;libraries&lt;span class="w"&gt; &lt;/span&gt;tracker&lt;span class="w"&gt; &lt;/span&gt;views_bulk_operations&lt;span class="w"&gt; &lt;/span&gt;taxonomy_menu&lt;span class="w"&gt; &lt;/span&gt;tagadelic&lt;span class="w"&gt; &lt;/span&gt;mollom&lt;span class="w"&gt; &lt;/span&gt;better_formats&lt;span class="w"&gt; &lt;/span&gt;statistics&lt;span class="w"&gt; &lt;/span&gt;pathauto&lt;span class="w"&gt; &lt;/span&gt;mathjax&lt;span class="w"&gt; &lt;/span&gt;profile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Not all the old modules exist in Drupal 8 any more. Some of them are folded into core, and some simply disappeared. With above, we also enabled three modules needed for doing the migration.&lt;/p&gt;
&lt;p&gt;First created the migrate configurations.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;drush&lt;span class="w"&gt; &lt;/span&gt;migrate-upgrade&lt;span class="w"&gt; &lt;/span&gt;--legacy-db-url&lt;span class="o"&gt;=&lt;/span&gt;mysql://username:password@old.mysql.server/olddb&lt;span class="w"&gt; &lt;/span&gt;--legacy-root&lt;span class="o"&gt;=&lt;/span&gt;https://yyhh.org&lt;span class="w"&gt; &lt;/span&gt;--configure-only
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;At this point, one could run individual migration one by one, or one could run them all, which I did:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;drush&lt;span class="w"&gt; &lt;/span&gt;mi&lt;span class="w"&gt; &lt;/span&gt;--all
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Most of the migrations worked. Two migrations failed with errors: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;upgrade_d6_filter_format&lt;/p&gt;
&lt;p&gt;"Missing filter plugin: filter_null.                        [error]"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This error turned out not to be a problem. All one needed to do is to save the formats again at the UI: "/admin/config/content/formats". Otherwise, the content of the posts will not show due to missing filter "filter_null". Saving the formats in the UI got ride of the errors.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;upgrade_d6_taxonomy_term_translation&lt;/p&gt;
&lt;p&gt;"Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'langcode' cannot be null:..."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Basically, all the taxonomy terms failed to translate due to missing language code. Since all my terms are in English, this was not a problem either.&lt;/p&gt;
&lt;p&gt;Now the new site was up and running. The look of the site was of course horrible. I had to install a new theme and created a sub-theme. Then did all the work of creating views, blocks, and links with the UI. Now we have a functioning site. Cool!&lt;/p&gt;
&lt;p&gt;A few cautions though:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do not enable "taxonomy_breadcrumb", otherwise the page will error out. I think it's because the migrated taxonomy terms miss some fields. I did not investigate further since I would not use it any more.&lt;/li&gt;
&lt;li&gt;Do not enable "comment_notify", the migration may error out. I did not investigate since there's no need to migrate this.&lt;/li&gt;
&lt;li&gt;No need to enable "blog". The functionality of blog module could be easily reproduced by creating one's own views. The "blog" module does not work well with migrated posts any way.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An unsolved problem is that the "popular content" links are all out of whack due to the loss of all old statistics. This is a &lt;a href="https://www.drupal.org/node/2500521"&gt;known issue&lt;/a&gt; that has not been resolved as of today. The fix, however, will be available in Drupal 8.5. So if the node counts are important to you, hold the migration until 8.5 is released on March 7, 2018.&lt;/p&gt;
&lt;p&gt;Overall, the upgrade is a smooth experience, in the sense that source code modification was not necessary, nor was changing the database data. I am glad the Drupal is getting better and better.&lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="Drupal"></category></entry><entry><title>Tips for Traveling with a Baby in Japan - Diaper Bag for Air Travel</title><link href="https://yyhh.org/blog/2017/01/tips-for-traveling-with-a-baby-in-japan-diaper-bag-for-air-travel" rel="alternate"></link><published>2017-01-11T01:09:00-08:00</published><updated>2017-01-11T01:09:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2017-01-11:/blog/2017/01/tips-for-traveling-with-a-baby-in-japan-diaper-bag-for-air-travel</id><summary type="html">&lt;p&gt;An annotated diaper-bag packing list based on flying to Japan with a baby, highlighting essentials and the value of extra supplies during delays.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The list of items contained in our diaper bag for air travel, annotated with how essential each item was based on our experience as follows:&lt;/p&gt;
&lt;p&gt;*** Must have&lt;/p&gt;
&lt;p&gt;**   Nice to have&lt;/p&gt;
&lt;p&gt;*     Not needed&lt;/p&gt;
&lt;p&gt;For travel gear that may not fit in your diaper bag, please visit &lt;a href="https://yyhh.org/blog/2017/01/tips-traveling-baby-japan-travel-gears"&gt;this page&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Portable changing pad (***)&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is definitely essential for both in the airports as well as on the airplane. We like our &lt;span style="font-family: Arial;"&gt;JJ Cole Collections Changing Clutch.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Arial;"&gt;&lt;img alt="bag" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAYAAAA+s9J6AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAALQ2SURBVHhe7P0FkKZZliWIjWQrWO3KJJOZ1qSVrS1IuytbjRamZ7qLq7Iyq5IqKTIjg5mZmT3cw5mZmZk53CPCg5nJI8KZGYOPzrkef5ZXdiT0VHfnjOZ/ljd/jx8/eOfdc++78C/gHM7hHD/pcILQOZzjJx5OEDqHc/zEwwlC53COn3g4QegczvETDycIncM5fuLhBKFzOMdPPJwgdA7n+ImHE4TO4Rw/8XCC0Dmc4yceThA6h3P8xMMJQudwjp94OEHoHM7xEw8nCJ3DOX7i4QShczjHTzycIHQO5/iJhxOEzuEcP/FwgtA5nOMnHk4QOodz/MTDCULncI6feDhB6BzO8RMPJwidwzl+4uEEoXM4x088nCB0Duf4iYcThM7hHD/xcILQOZzjJx5OEDqHc/zEwwlC53COn3g4QegczvETDycIncM5fuLhBKFzOMdPPJwgdA7n+ImHE4TO4Rw/8XCC0Dmc4yceThA6h3P8xMMJQudwjp94OEHoHM7xEw8nCJ3DOX7i4QShczjHTzycIHQO5/iJhxOEzuEcP/FwgtA5nOMnHk4QOodz/MTDCULncI6feDhB6BzO8RMPJwidwzl+4uEEoXM4x088nCB0Duf4iYcThM7x7/R48eLFXyWvX7/+Xvl3YThB6Bz/pONtE/8fIv8hDCcIneOfdLx69ep75YfG24D5D5F/H4YThM7x/9fj5cuX3ytvA+50+ecYThA6x0863mbHTZe3AeOfU/45hhOEzvFXjbdN3Ony1463Udh/iPzQeNtnpss/x3CC0Dn+qvE24E2Xt2m36fK2z0yXv3a8jYJOl7cBb7r8cwwnCJ3jrxpvA850mZiY+F4ZGBj4Xunq6vqrZHh4+HvlbcCbLv8cwwlC5/je8TZgSRzjba9Nl2fPnn2vjI2Nfa8MDg7+VfK275wubwPedPnnGE4Q/gc+pI1EC6cPB4B+zJgOuLfJt+nnt+VtwJwuz58//6vkbd85Xd4GvOnyzzGcIHSOvxiykzR5BSDHv7/Phvo26P6h8lOPb5/Pt+WfYzhB+APjbRPnHyL/ro/R0VHTSI6hY54++RyT8bvOZfq5vk3+2uH4/X9b+aHxtmOeLv8cwwnCHxhvuzH/EPl3fYyMjJjmcwxNXNG0p0+f2vPTteB0Gumge2875+ny147pv/lvIz803nbM0+WfYzhB+APj2yvrP1T+fRoOoH3Xcet5vS6QTk5Omj35tok7XX5oTL9Wb5O/drztO6fLvwvDCcIfGG+7cf8Q+fdhCCwClcA1fUjT6Ry+D0zTAfc2+aHxts9Ml792vO07p8u/C8MJwreOP4NHk/Dl6yl5znvmkGdvHl+/nBLhzZ7nZybfyARF/xYpkvBt3yuO90n0ubfJ9Pd83+eny/T38BC/kemfcbymMTQwjIvnLyAvJxcP7t1HY2Mjmpubbd9Nbv/x8Um8ePbSzluXSnP52/Jqmkw/FonIr0R/2+B7vvnxN387npr+PW8TB5i4VHzz3PTfcpy34/wc4hj6e/p7JNM/P13e9j7dk6dvHqe/Z/pv2PjWE9OP4z94EP75Ygh4U/KaU+TVK9GyF1MA5LN942Pom5iER3AoojNzMMgPPe4cwFDPGLqf9KC/bwxnrt5CQlEJrnR04MHYKGIrq5BaW4e0ylrcae8xUHaNvDCA6saN8os7Bsfs32OUJwOjeNg3ivuUa239uNTSj7v9T9HJ32qdfI17/SN4MjKBlrEJNA0NoWNsEm3Dz9DNLx7kdw3zO4YoOrYBnooe9b2d4xN43NNjv9nU3fHNpBp+8Rx9fI8+N07RRHqu//Gz82bOwa/+9hd497e/w+9+9zu88867eOf37+Hdd/+AP7z7AT5490N8+N5H+PzjGfjy81nYsHYLVq/agA3rtyI9I/fvTVLHwqTf0THpOAd4TvZ79sO8D/wAL7ktaC95XPr8U37RAD80wvfobZP8t57X949MkBY/fY6n/JK3/Z6ut+PajvE7+3i9HJ/l19tnJ/iH3q/36L39PA4dm/6ta6hrM0Jp4n1qH52w9/ROPMedJx1oG32KW7wn51p7cKm1F+UXrqPm/HX7Pq5ReKUf4nfYjzkebX5pTk2JnnKC8I1MXSXJC/6bIHzNG0sZmxjH+ItnaB8cwv3OLizZvA3zNm7F6XtP8KBzELeuPcaTu21ofNKFg57+mL1hM2qoPa4PjaD+cROWH3DBRhdPrNp9GAFx6Wgdfol7HcNo48R6NDCBHqrUx7yRhQ0X4BmbgkNhcdjqG4FZ2w7hvSWbsCMoATtD4rEjMAY7AsKxxsUdn61ah1nrN+FAQAgWb90P/8RcnHvQQaASyKOcID3DeMBJ08aZcLu7B5HZ2XALDcUed3dkFheha3gAHX09eNLbiw1u7gjMykMnZ07X8AQ62vsxNjiOGR98jvd+SfD9+jf47W9/i9/+7vf4nQHxj3j39+/j/d9/aDLzszn44A+f4rM/zcQf//AJ3nvvT1iyfB3qTl3CSU7I6obLyCitRWpJNYobLqL22l2UX7yBknNXcfzyLTScu44yvl5cXIsTfO/pi3dx+vI9NLaPGWAf9z1DF9EkaRl+ikv3m1FcfwapBSXIKSlHZ28f+gb60dHTj9LaesRzAbh0/wn4MX523D7XTzBkFtcgJDYJd5+0YGhsHO0dXcgvLkFYYjrCUnNQw2O62daLRp5769NX6ORnWonYQR7DybuN8E1Kx37/UGxz9cZMnt/MpWuxzy8UeyOSsJ/39VBsOg7z7yNBMVysuQBoUXGA0CFvQDgFQC7wNtecIPx7IBQAp4NQrw1PjqNHN250DAd8/PHF8tXIPn4ajb0juHy9EZ09o7jb1Il5qzdixoo1vIkv0DzxAk2jBDE/P3fVZmze64qthzywbPtB3O+fwIPxl2jlaw13HyHn+En4JqTBJTIergTijoBoLDngiQX7jsEtOQ/7IlOwNywR7kmZOBIVj2X7DmHJzj04EBQO38QsHAyKxf6ASMQUV+NKey96+L1NVCGXW9rhEROLYxER2HjwIMJTU9HY0Y52Ttr+0WFcefAAq12OYpt/EFonXuJRVx+ePOnEUx73x+99bJrw17/8FX7961/jl9SIv/rdOwTje3jnd9SGv3sff3znA3zxpy/x+9/+Ee+98xGf/4CAfR9/94t34BsYhYDIBLjzceW2fVy8duEQFxG/xAwcCo7i8YbDJzENvjGJWLljN+au34ydnr5wCYvFnoAweCfnovDSbbTwtrTzfC53DSKl/hR8UjOxzdsXblHRKDt3Dp1Dg+ijtHX3Ib+8CgeOeSOv+gSGeePudw4ZEJsGJ7D/mD+OePmjc3AEXQNkMLyfD5qaEJ6Uwd/fj72eAQhKzsL1tp5vrt+N3kGE5xfjaHQ8DoVEwj0qAXu9g7B0215sPeKB0Ix8HIxJgWtqHg7wHrkRiBsPeWKAC5o07pspNSXfTDQnCP/e+ObavLla3wDw1VO8oDx/+QLdg/1o6ulF28gokotK8eXKtfCITiJtHMH5O4/RM/4CtReuYd7aTVh34IjRl/sdA3jSNYzO/md2QzZuP4x9bv44FBiNhXsOY7W3P+bsP4idfkHYfNQdu32D4M0JcZjfu/SQO5bwZu6PSsFugk+r7YGoJLjEp8I9IRX7QyOx+rAL5m/ZCZ+ETPil5MMvNRcu/OxO32Bs8fDDnsBQmzzbPX3gG58I//h4NPf3Y4gUrLW7Gz0Dg+gcHsGxhESs9/JBzfU7uNPcTo3egcnx5/jT+5/glwThr371K/zy17/Cz6kNf0Fa+qvfvWtAFPDeFRDfFfikHT/CH6gJP/50Jv7uV7/HMd9Q+ITG4IhfGNbyfDccdCMA0xGZW8KFIRlHOaFDcgoQWViMrT7eWLRvP7YHBcGDIDuaxHPkYuSSmo311D47ImJwIC4ZO8IjyArCcCA6GgWXL6Kb96uXZkIbqXYPwXX17gO4+QUjLDkTnWNiHIOk7K9w5VEbXHhdwuJTMPriNR5QGwqIoqL3O/oQl1+G/b4h2OLqBZfwGBwKj7ZrvDc4HIf4217J6QjNLYRrZByW7tiHxVt2Y6e7ny0mbklZOJqSjUNRyXYPNh/xRAuB/4zTyXZIpoPQhoOOOkH4zdBFmLo+vDjkDwLgdBCK6nT29+JeSyvutnegoO4kPlu6Est2HjDKd/FxGzqfv0YQJ8+ynXuxh+B61DOEG/db0dlNatM8iMYHXTjZcB2b9hzF4ZBYLDh4FDsSk7AuNIQTL4Q3PRJ+aVm82RlY6+aDGZt2EYTuOBKfbgB0S86GZ1oeDscm4zAnggvBtcXTG19Re6w84IbtPmGmQd0S0k1THgiLtvd4c/L4JBLIBNnF+w9oj47i3qMms6Xu3H1odO8gJ9yqYx4Izs4ndXuGx63dePK4Fe8QSD/725/jV7/5NX5B+dk7v8PPf/8OfvXOe/jN7/+A37/zPoH3ASkqAfjeh/jNb9/D3/78N/jdHz7G3/76XdNIPvzuFVt3Y83uA6ZBBMKA1Cy4U/u5xycbDfbLyqY2icJaL08sdT2KrQSZW0YWJQ87oxNxkIDaE5MA37xiBJWUwjUpBdGVlTjf0YYHQ9Roz8k6OrrRPcxza2mDq38wXAPDbRF8RNu6m1ops6KOxxKLyJQMMhra1D19PM8OPObnZIefutMIl9BoOy4tXAfCokzjHuNicCg6Dh6JqfBMSsMmd2/M27wDu70DEZ5VgACCz40L557weLhwwQzJKIRbcAxuNLYbCOWg+gaAU5OMwwnCvzcc10cAdIBQAJQ8fzmJnr5etPd2405TMx50daPuynWs3HMAX6/ZjIb7j3G3bxgtk8+xwcUNW908qXWS8YQa8nE7aVLfU3S1jZqMcsZLEx4MjcWWkAjM9fDA6rAQ7ImIgmsc6Q5X3MX7D+FDatn5ew7x+Vi4kK4dS8nBPgJrR1AEaWMw9vGzWpndqd22evlhAReDTV7BOBqXimOkevv5PTuoBTWRPBJScDA4DEe5qgtwQ89forNviFSM59U9SE3db5NsS0AQ9vN7R/meNj5//sIV/M3/8rf41//q3+A3v/stfvX73+GX772LX/7hPfz6D+8TaB/gvT98ZPIOAfiHjz7Fu3/8GL+mvfjr9z7C3xKQ82m37j7miW20Yd0IxrD0PNK3PKOgHrTNBEKPpGT4pmcgKD8Xh+PiuPAcwsIDh7E3Jg5BBRUILqxESFEVNSPPNyXLQKvjrL52Ez28aW2jE+jmhe0aGsXIy9e43tgEN1JZz7AY036P+8docwMugRHwI6DTiyowys/pOrTQhtRjFxfQJ2PP4ElN60vgCXCHY+Lhk5FtWlePu3gN1/JcVh12xXpXD9OIgWnZOBIRB08CcR8ptAcXzOC0XISQ0p65ftccSgbC6WJjCoSvDYBCqBOE31wfA6A8og4tSAAKhE+am3Dl1g1cuXef9kU/ik40YBcn/0JSkpwTZ3CncwD3egaweNsubOdKeSwyFu28qa20+xpb+9HSNowh8tN2akXviERSxQDs44o7z90De9NSsSsyCptpZy475IIvt2zDV1t2YFtACFw5GXaSDq33JG2lhv1q83bM2bEHKw66GBANYJzcs7buwazte7H4wFFs8QshZeXk5op/JCoOuwjaHV6+SK+sNe9pO1f9jt5hPHjUYl7JxvYe0t0IrPbyxlpS4keDXFAIwobT5/E3/+rv8POf/xK/fff3+PUf38Wv3/8jfvMBAfjBR3j3g4/x/gef4IMPP8WHn36BP3zyGR9n4LNZc/H+ZzP43g/xu48/w7YjrjgWGoEAaq8gHtNRLgw7aJdtdffBxmNeWOviCleeg39yCnypdfbSNl1zwBVrDh/DgcAYUu1sk9D0QvgnZCE2qwh+vIbySo+R6ulY77d0om1wFMM8v7rL1+BC+upNcFSdv4J7nX3m6XQJDENgXAoS80rQ+4y2+MAI7rV22sLUyL9lAxaev4wgsoHDvH/bA4LhmZ7JRTAZ7qnpWE2mMG/XXrtGuvZusYkGWldq6JWHXHlPjmIDbcTNlEM+ISirO4PBUS3qjslF+WY4QDglGk4QOuQNCB1a0AHCB40Pcer8WdxtbkErbajAhGRs4wTa5RWIE7ce4HZLDyfBOHaRfsmxII34kCtz+9PXaB15xpX6FW4+7MAYfySlqBp7fMMMLAcFMq64W3jDZ+3YhZnbdmCthxf2cKIKSPuo0VYdPYavt+7kBNiH1UeOYdn+I5hNkGo11kQ4RhtHzpp1tAG/3LzTwLiVwHPnhPdISbcJdSw6Adm1J9DCY2zs7Ecb7dTRiVd49KgdLb0jpFKR2BIaavT1MVeLLr6v7tQZ/M//07/GL375a7xD7ffbD/6A3374AX778Yf4/Ud/oub7BO9/9Bk++PhzzJy7AO98+DF++/5H+Hz2PPz+T58aCP/2nT/gaGAIQnkcwQSYO49Fi9fmo57Y5Dol6w6Tfroew35vP/hxUYnJK4J3TArWk2Kv2OGC7a6B8AhLRkZJPfwjUxFMyucTEI2u3jGMjdJWJ91s6R1C5/hTDBCU5Q0X4EbGIK1XfPIsuiap+SdeIDIj10B4mHbhw64B9D1/hfYRshS+/nBgDA9GJlB6+TopfaJpPgFQstk/EHN278Wsnbux2tUdrrz3Aqret93TD+t5T1ZyUdxGE2TjEXesIkPa4eKBCi7OI5OinG/w9xcg1HCC8C+GA4QCoC7OlF/rBZ49H8fI2OA3IJRjRt7R3e5eBraLj9uN7tx50I7BkRfoGJyAC1fJzQRS+c1beMKvesyb3fCw2fb9evi1rqSiR0NJdWjjbfDwx0zaSx+vXo8lnIyiPm7JnKzJtD04Kefs2I35O3dhm0+ArcCiSrJX1rocw1quvrPXb8Nh2jmiQ3v5uOaYDxbtd8FcAlaygcco2irqdCQkCn38/btt1AyTQHP7AMigUX3mEraSigqEfTzrzme0rzhJ79NuFAg/+vgTfPjJn/DHzyiff4Y/zvgcH3w+Ax9//iU++XymiTThewTe53Pn4d1PqBm//Mrk3U8/JwiDEJuTjz0e3tjh7omdvDa7eFzhpJVJpZU8rghsp5bZ6UYNQgodlpGDBFJQ37g0A+CaPcew5ZAP9h4LQmRyPmJT8hAVl4kr1x+YJm9q7UEnwdT99BU6xl8ijPamDxedG80duNXciaZ+XneCoWP0GaIy83DQN8heE/h0PVpGn6Nl/AXaea90fWX3eaVlYpOvP5YediE1PoS5e/Zhb2S0PR+UV2gAXLb/sGlzOdO8uBBGEJhaRPZ4+GLbQVd4UPNqFjlA+PcwaENzzQlCGz8EQtHRi9evGh1NLy2zLQppwlN3Htnqe+dWM15xYj9u6cUOru4uMbFY5+uD+69e4drYGB7xTjyilV5H4981PA7Ldx7Gws17sXDrPizYvh8buYrui4qFV0YW/LJyzUZbc9QVy/YdIGU7ZjZd7snT6OGhFZ2+SLsjx1bd1ftcsICU+HBkArxpi/hnFZr3VJpwJUE7f/d+zNy4DVs46eVer7t215wUT7pH0E+13NQ2iKMBEUZ5d0ZE4tHEc9xs70QHJ24mQaJtiA+p4T76lFrvc8oXBOCML/DhF1/iT198hc+/+BqfUj6ZMRN/JOBmzJ3P98zAp7Pn4E9fzyIgP8NeN2qPoFBsp0bf6+mDw6SbmRW1Rt8licXlRkV3ig6Tju8jKwjJyEdcaTXCs8vgHp2G9Yf52v5j1I7u2OXqA6+QWOSVHyfV77ZNcdl8HZOvUXXxBlmK9vyyUHvpum26yzYXDX9MCh6RnkN7LQOJBeUWENE0/BSPhiZs8am9cRcHyUC04MnuW8NFYTmp8gYfP3hnkhJn5SC0sMQWtZWHjmLFgSNm13pQ4xY1nEM/vyO7qg5JBcXYwc97h4bbLJp48frP2vDvDScIvxk/BMK2jnbcvH8XeRWVcAkINBtnDVfCPT7BqDh9GZPDnAgtg3DzCMTRoHCsdDmKA4nx2JOciPLmJzhDO7K28QlX0CROuCys2eeGRQThHi/afbRvXOKScCw1A345eaYFtQe29tBh7PL2gUdMNGLzC9FLjdrHGyrHidzpEZkF2OsdjC2u3li297B5REPziuGdnm3f58pVeRfBtWjfIczavANeienwiU/DufvNuP64E2euPUAEba097gFw4+q/zsvH3PLa1O6nZgmmhvq7f/MLzKDG+5Qa8OMvPsNHX87AR18RgF8RfF9+jRlfzjb5knagXvty/jx88vVMzFq0BDPmLzCtuGbbdmqGw3ChZgkj/Y7PLcDN5jYM8He0j3fxUTNiSkpwKCaKGjnAZEdIODyzcxFeWktKmG+OKbeUTGzwCsBG2tzSWBH8nqzjdWQYQ7jVNYiMmlN2fro2ArY3r8dVavO2kXHbp1WEk2dELELSsmwvMKm0Btfb+wyAl5s6EEy66s/fkNNHWs4tMcWop0ca7wsXRk/enwORMVhDFrKcrx8MJuUloBOKysw51P/ipf1OUm4+EgjYSC4smkUKbRQIHUCUvG04QfhGvguE7Z0duNP4gDZJFA75+hFooeZ88YxJNlA8ediNoZ4JXLv1iAA7xJuXiK1hIdgYFmpyJCUNrgTX2qMe8JP9xhV95W4XeNC+CcoshG8m7RXaQrrZB8IjsOWYJw4FhyAgKQmBiYlo6u1H68AQHnf3W9iUonS8qP3CUnLhFhaHtQdcpza+kzPhzYmkfUR9p5wzW/2CsHTfYYTkFsErLtX2NsM4sb0IfregaERmFWGzbyAneRryz16072/u6MO6tZsw45Mv8cVnM/AFAfYZRQCTfD6T4Pt6Dr6eOY8yF7PnL8IXs2Zh1oIF+GrBfCxavgqzFy81Z82cJctwmFQ0ICoGSdkFqKSd1jP6FI87+9AxPMnFhRrkdANCiwvhn0+6mBCPlaKsfH8QtaFXfikC+BhTdwqHeF5ruDC5JCRRO/E8U3guBYUIzMjDsdhUpFWdgi81oS/PM66gBE/6h9BNzt3PxSujvAr5x0/Bn697xU5tJSiwYadvKKlkEdwi4hCdx8WAjEF0P5yfjygs5aKWxUUtEWH5xdjO67Rw517TgFG5xQR9Km539loIW9vgsGnlB23t8AkLR2ltHZq6emwmOUH4I8YPgfDajeu4ce8O4jJoExBguwgSORh20KZT2FVHzzh6ByZx2DvQwsgORkVjc4A/9pKW+lK7bSEQDnEVdicADgZFGgVdcdDNNuU9SS39sgsRpKiMmATzFsreDCcFis3OgSs1gzaUFfP4oLUL4/y7rX8CwbFpCEsgfY1KwwHvEGx384VLaAzCSElD+H3+XNm1XbGLv7do7xFs9Q5CMrVFYEaBOYZ84zMJwBLs9QtHMCfcjuBQhGbl435bF560dGP+3EUWG7po7kLMnDkTXxF8M2YTfJSvZs/DrNnzMefrBZg7ewEWLFyKWfPmY+7CRZi3ZAmWrVqN+UuXmt34BcEaQw2YnJ2HSGqXsuMnQDMMnQNj5gAafP4aRWfOIrac2t32AJOw/IgbNpO2+pM2BpfVwIdADKukVuTxrfUhSyBI9b4wAjcoj9SV1PRAcBzC88oQSoYggIRzEbp4vxGNtOMlMfz9Y6FRSCypIs0tQkr1KXjGZyEki9/Nz4STAvtRk26jXb3XP8T2TCOp5bRXKAnJLcQOgnCndwBBSwDnlhjYZVd2jYxh8NlzDNOeHph4Cv/wSITFx2H05Qver1ffANExz74Z055wgvCNfBcIW9pacfnmdUQkJcM9lBM4Jh7pVcdJYzrxoHcEe119zcFxtbkdpRcuI6KIgIpPMG/jMVJDrbxHQ2JwLDweS7bvMwDKdvPl5Pegoe+VmYeAnALs9g81b6EAeObOHdRfuIgkUps7Dx+jd2iU9gVvOCfuvSedKK45jZMX7uL4uVuISM3Dhn2u2HTYAyHpeYjh5BUQgzjZZCuuPuqFOfzdAxHxXNHL4BqdjMiCChyLSsUBHldYcSVKrt3EuYfNuHyvESF8bv4sarVPvsLG1esxm/bdbIJv5py5+HruPMwhMOcRpAvnLDawLli4GPMWLcbCpcuwePkKLF25CguWLDVt+flXs5BO8Fy7fR8V1fU4foqasH/MgrCHx17gcXsvqk6fR+W5izh99yHKL1yBG7X8ZndfeHCRiSmvR0h+hR1jDMGmzXNRwp1+AaSQBAcXOb+0AqTWnkVC2QkDWG79GdTfuIWmgWFE8T1nb99BY18frj1pQ0p5rdmciRX1CM+n3ZlbYWwgNCUbO918LApGIA7hPYng/QnmfQkjS5FdLU9oasVxlJy+hMoL15HLRe0Kr9nwi1foH59EczcB39aBqOQknLl6xQLJR148fzOb/gJzU2PaE04QvpHvAmFTSzMuXLuC2PQMnLp+A/c6eyyTQY4SbdYr2iKaBnkXP3WHtPEBV8baG7fhRU3nHZGAg8cCsXW3KzaSgi7essfAEFRaCa+KCrgVFyOouAIhvOECobyFFx88Mvuid3TcwrHOEIy9gyNobuvGwPBTVB0/i3FO4sdtIxjnMVy60wQX/wis33uUv5lsk0wULTSvFIE5xQjgxNxHujWLGniVizc2U3Mei8tAUEYxrnQO2B7Z3aExtE+8siyQGmqJTz74FItmLsDKBUsxf/YczJ07l+Cjtpu3APPmL8aC+UuweN5SLJm/FAsWLMLipUuwdNkKLF+xCkuWLjdgzp23CF/PmofQsChMkhL29Y/Y/uTDh62Y4AwdHn6G69fv41FjG3q6h21PTR7byrqLOOodBo/ABGSUnERMVjnicsqRVlKHWJ6Pa2Ak9hKkh739zRvpnZiDsMIq5J6+irtcFAd4Pq0EhexBRQlVnTuPB7yOuqYWH8trqMXIO42mQGo+DviFWdzormO+XCjjDKiyD8UMpBFlL2o7RfubtzppGnDxEI2+196PS3cfoYf3+05jIwbGxnjsdWju6bZ4VoFQ4gThjxiOa/E2EI4ShK3tbbjz4D4SqaGUxiKngrIerjZ14fj1u7hH26Pk/AVc7+7Gzd5etD9/ga6Xr3D1cSt8IhOxZus+7DzoiYOc/AGJmYitqDMteDArG94lpFBFFfBPozY74oHDwZG43tqJQR5GGwE98vwlBmmn3bx1H2Pjz3H+/HWjvoOjr9Ez/ALdwy/xuHcM3pFJWLvvKG0bAjwznzZNKaLLuOpzsnmkZiOcNEwhbVt9Q7D2sDc8EzJws3OExwk0P31tweYPugdw4eY9JHMCimauWrwKq5aswLw58zFv3rw3AFyI+QTdQoJzEWXxwmWYz+eWLFtqAFyxcjUWLlpi71u4aBlp6kLsOXD4G7uon4vX7QdNpgnlADp38QYG+2gbdo1iYOA5uvufoqbhKo54h2PPUX9EpxQjKbMSGQW1SM2tQlJOGTKKqs3D6UOWoawGxdvG8lzbOePlpdR2hfYBr9x/iP6nz6ndH6Bv8hke9Q5Y2pY8oqfvNyG6pBp7g6Ns8ZMtGFtYgdiicsSTAvunZyOa9yW+pBIHAiPMCyp7Wl7VXv5Ol9LK2gfQ3DeC2tPnbMacojbX/OibIM1+9hSdw0PfgPAN1r5zOEFI0QTR1urU5qnCiZ7j6eQohkf60dbWhtt37+AKtdsTakE5FYZ4ZRu7R1B4/AyuP2lC29goCk6dQNvTCVxsfoK250/xcHQURyIjMWfLNuwNCkMUbYy4siquwiWm+fyy8nAkKhEHfKOw1yMUO9yCEFdQg2RSsLs9w2jXisuVu52/c/nyXbQ09eLihRsYfwo0kcYNPXuNtuFJZJMWJXBCbXD1wk7aM9tpl2qj3yszB/G0wWTzpdQ3mJ0o58zqPUe5OCRN5c7xf8qJU8B5Hamg8u8OuXpg5tdzsXLFWixeTLARVCZLFptI6xn1XDIly5cvx7Jly74RAVKyaNlyLORrv/njB2YvyW4aeP6c5/SUGuQ+Lty7j3Zq4Ob2IWoRYIiX/kZHP+Iq67E7NBpbvALNft3vEUIWUozyukvILj9llDO8pALu+flYQ9t7V2AQikhp2/i9Oo9OAv3moye487gZA6OTGHv2Cpdu3UX74PCUNhymDcdHb4J4d1AwdkfFwL+0zOzOgKISRFZw8SostXuzyy/EjmEvF6+4/Epq5FJ0jnMR7uMCze/oGXuFs1duobG5DWeuXLfzaxogu3hKEPL+C4QGQP1vurx50LzT+A8ahI5r8l0gHBnuR3t7O67fvIGElHR09Q/bhS3mxM8tP2HR8opd7CEIT1y+jJSSYnS/fG4grL51HcuPHMKcHTtxKDYWYUWlZmPIXosiVfQmIHa6B8IrLAXB8bkITy8jAE/CNzkPuQ20MVt7TCOa1+1xN8rK6qktnlqemp67QDsru7bObJdortheaVnmEd0dGolVBNIuUtvoihp7Xq8re0GewC2H+NoRb1y48Qi3H3fiYUcPTl67Thv0Eho7urBi7QYsWLoCa9dtMm0mIBoY34BwoYGQslxAowYk0FYQcA4wLl2+zJ4XCOevoCxfiXM3buLqw4fonpxE/6tXKD51CqVnz1rCrLYqWkZfoeLqXQTmlcAnvxih1ccRVFgGd2rvQwFRcPOPRnAsWUR2GTVUFaJoXwbWHseR7Cxs9/NFUkmJOWDah0Zw5toNnKON28zzamknDaXabevux9mrN3DrcRPutbbjRkuL5Vfu8vdHQDHvS3Ut/ErKEUhwB5JFHIlLwZ6gSGz1DKTtnIyIrBIDYURmMXLrzuPyk25SXmpdLmK3G1uoBS/hCW3CJ/0DFiZ3ivNl4OVLjNJeNMxpWjnEnpiacxL90wlCyrdBqPhR04RDfeihPfHoyWNs370PLu7eOOLhhyNcpW/zRij28Nb9J6RW4+bBzCotxwFvH1KlBGxz98DSvftt389X+1PZBfAjNYzgahqSVgDXsAQcDYlDWFKeTa60igZk1p8zCumvCIz0HPgnZSKz7DjK688jv1gb1L0oqD6BVIIqlJTJMzHZojgC8goQyskkoMuTp7jRfQGhZs+kVdYhntRKLvjEokr+ZrSlFcm7p32uhPwic2AI2K39g3j/T5/ho89m0LZbiU2bt38DQmlAyRTAlv4ZhCtXYMUK2oMEoUQgXGyyAgv42vuffYGgmFgkU3NFZWSg5tIlVJ4/j9LTp1F8+izii6sQyeOSp9g7pxBxJ04jlpo7uIDaidciKDkXB73C4B4Yi8TcSqRwMYriZ0LLqqm1qrHLx98icRJ4HfKrjiMhMw+Xbz2wPTplhAyM8l7ytqbz/FNyi5BHjReRnmVe7qMR0UiuO4Uo2oE+pPGhpLkeiRm2daE8zdDMIqRUnEBi6XG7b9rW8ErOgl9mAYK5kKbWnMTpKzdRQBv/4u27yCgrR1haKlyCAmmTjtg1Ncw5QfjdQxdAYhfkNcFnf02BcHJiBEPDfbhx6ybOXDiPrbv2wpU3XPlqSou51dxjQdov+AWtBEcfqWFEfCqCYhPhG5VAkEVh1d7D8E5IRXAWNWBGvtkdaRUn4RmdigN+EYjJLUfB8bMWUyrtaLYctZckjADxTclC7vHT6J54jd7x1xiiFswoP05QlSGn4ZyBLrqyGhFlFYiqqEIMJ0MsRaDb7RmA/d5ByK46gThqwVh+v1z0cjgoOkT5coG0c6Nz823rRRPm0p17Fgu6cNlKUk3ag/MXYwkppwkBN0UzCUhpuxVTYFuxaqWB0CHLqP2WmKzke1ZgJm3InYeP0J7LRUJOjlUnGHjN83nxAvf6+uGn7YAqavTK4wgrr0FsjSg0F6KsQk7yBrtebsFxOBoYg8T8KmRWNSC+sBoxBaSHBG8UF50D/oHwJKCiMrKRwO+78bDJGEtrzxCGSemn2AvBRCYSkZaJQ36BOBwUYtcxlTa6QBaZzetTXAv3yGTs8gymaVCFrJoz/I1q29oJJ0Blz0fzWANpO4q+xhH0or+ivbp+xSdOwicmGl5RkaYJv6GjThB+99AFkHwbhArgnpicAqG04N2HD7D3kAs2EYgeweEWpV9Qe8ZsKJW16OujHXLnCYLC4uEfEY9Ne1ywYvs+ixWd2jao5GQvt5ucWFyHgwExXL1DkMDJlMDVPoOTL/P4KcSVVyOEdokfgRFOrZp6/CTSOXlk6zQPPkU/D1ZgTqquQwwngRdBpL3I5BOkx2cuIJ2remROEbJoVx0LjraMg8hk2oY5JWY7ppHGyTaVq39HSJgFFijDIamgkCCfRAZ/+6s58/Hl7HkGwhUr12LpUmo3CQHn0HIC2eKVU2BbuXoVVq5c+Y1IMy41WcX3rDRNqMiZYtJHacOrDxrRK/vw5Svc7OqGZwEXp7NnEFJVjUPU7MGkowVnLyO77ozR54zqkzgapuDvQPjEpiImqxjJvJ7ZpXVWNiM+r5iLWizcwyIRwvNK4eePnyU97OrHCG13bevIjldQdRptPb+YeAu48I6NRzIXrKzyOqSX1CIhl6yA4sl7eNgvHNHUghGZXAgIvMJzV5BJu9Of2vZoWgYCyysQVl+HEGo+mQzDtBE0F8JT0xCbmwPPyAh0jI2hk3aoYc4Jwu8fugiyAgVCiQOE4xPDGBzqxeWrV3Dp2lVExCZg3Y5dWLphC/Z6+vFmpqLs1CX0Dj5HZ+coUtOLEZeUS6C6WN7gdhdvhHMFNfBxpQ1OL4ALb/Ahrup7fCNwOCQeMXkVUL2UB1295lrXNsep5idIPEGbhxNWoFS6VGP/GFrHXqKDS2vxhWu2rygnQlRlDe4MjppXsJ1aUiFYWZy00dQie939seeYn+XS+cSm2P5XJCdhbFkVImj/HCX49oSGGXWOTM9ADrXpPjd3swmXr1mP5SvWYMaXs2jnUbtJCDiHlhPIlqyaAptAuGrVlOhvacZlFIFwCZ9TiNv67TtRUX+SIC/GNYJwhJNx4NkLnH7wEH5lpfCpkGapRvbZi7ilNCWej7yQlx+2WYiZooFcoxMtf2+fT4hF+yRllKCg8iSS8gmshCQLrN/n5YuAuETEZ+WhlnZa/9OXeNjWbTQ1IjkdXtSWB30D4B0Va/uxAnBO5QlEp+bDnxrQzT8SLj68JpFJiCXYU4tr0Drxyu7NXWq7C919dpzB1dVwLyxA7tVrFmXUw3sgmzCvptZAGJqagsd9fU5N+GOHLoLM55cvpyqsySkzHYTarC+qKEN4fCL8IqOxdPM2LN+m8gb+Fv518sJtBIcnIyAsCXuO+GDjblfsdPFDCldqUZrQTGq2lHwcCqWd6BmCvUExthEdRGM/mlrw5uMW9E08RccEb+brV7ja3YGa+3cRVUKqSTtPwFOBoyEeaNv4K3RynQgnDQuvqEU5bR+5y1Veo3vsuWX0P+obRi41YmJJBWIKS3AgNBx7AoOx3c8fh6OiEZpfgLT6EyYBGVmWSuQVEYnE7FzsOHQEX89biBmz5mLZ8tUmy5dTu1EEwD9rOcrqKbCtWrP6GzGtSNHzipxZuno1lqxcg4+/nAlfHkft2XO2ua0E3P7JZxa7mXrpItzyaRcTKDc7+tE5/AJdA88xRNUip00W6XgkNVZYaQX8ufjsDQy3a+/L6xmTmmeLWBrpe7ASf8Oi4REeY0m9sTQBTly5hTouWuGk9cozdAuJhH9cMhepfPuM4kyVhKt9VveQWHuUJoxM4+sE4K2WXivG1UIgXqVmVU2gUy3tCCX1P5qZhZvDo2jpH8bI5AtLEO6efIqorEwD4s3mZqdN+GOHLsJ3gXCAIDx78QLqTp9CGDVGECmMAri3H/OypN5Fm3fjWFAcdh3xxYY9bti0zx17PYLN1lNsqGdsmoVUbXIPxFavELgnZVsUSFLdWUSRBslWVCzl+PNXeNjege5nT/FkdASNI0PIIH2LLSjBzZZugmsET/rG0cO7ev5hu4VohRRW2go9xue6OobRR7qq/EB558Jz8hElJwG1TFLDKQQWF2Ev7RRpvn0Ur/gkJFMjRhJ4IclppF/+1AB+WLh6LT77ahaWrlprThk5ZxwgFAAdIDRNRxBKpoNQspwgnJI1BsQ5C5dYPGk4aWBxdS0ecBIr1EsFlx71DSL7wiWEcVJr707bJlyP0Ns9iSHyvI6BZ6i9fg8R5VXwp+aPps0lsAak5xpoDrgHwDU4AlEEZ2H9aaSXVVugtpiKwBiTXWCvK6lXzymLIou2Z1xukcWXKv1IdWU2uXgimpQ9qbja7PPE/AqjvP1c8EQ3lYbWMv4SjaPP0EzGEa4g8YwcXGjpsGNu7xnAKN+n6Bzv6Cj4K2yNzzs14Y8cqis6dV1UMXsKhKKkYwRhR1crbty5jfrzZ7Db5Sg8wyMQmJxq9WTWHTqGza7eWLXPFYu3H8Iu7zALBQvJIO3Lr7LydwLeRnc/ixOVs0FGvSSKE0HePW0vKBytm1Smq3+IGuIVgfYMnZOTKD9znnSoDHG0KW83doCmDe439yE+u9xc5nmnLxtlUxbHs15qjp4JS9iV/RhNmyWh4ST8KkrgU1mCwOOVCK2phC9XaGnGAz6BCCFFzeUxZFHLyCb0oo04b8Uqc8wIhKKjS5fRrpu2ReHwjjocMxKHw0b24nS6KgBKNmzZbnGkx7z9kFtUiopa2rhcdKQ9ivh3SGaO1Z3pGHqG/sEXmJDK5zUZ46PiTC+3dCKSIPUk/Qs/UYfw46R8NccRQ03vGk5bMJKg8wmwhOBM2srxpNzBvD/7FbMbGEr7O8ScZAKqkpv1nsjsfByLiMFub38rmRHO65xcU2/fmVBaZbGhaaTBndSAcoq1jzxHLxcH/VtScf4aomivSqvefdymw8WNxscW1igqWkPtPvT6tcX92txygvD7x/eBsK27FWcvX6RRfxx7jx3DliNHcJSTODAtE24xSdhHerPFJxQ7A6NwNC4d/rQjFOt4ODoFa938LEJFAFTcYzJpUxDpofahEk42II42kiIzmlq78IxUcnBoDIOkaF2j4+h7/gKXHjxCKm2WhJRcK6lIOx9tHaOITy+iHVSB0nNXrb7ly4FXeNExiXGqyXaCUBvRwYWFiDx5HF7VpQg5Ww+f2nIEVpUhqoq0LjsPHqHR8A2IRGRMMpJy8pBTVY09R92weO16o6OLV6w2p4w04Vo+t2bNuiktR3AJgNonnLdkEeYuXmigdIBQ4gChbEKBcNW6jfiMduHOfQeRXVCMuoZzGBp/hoHhCdQ2XEBqUQVSqNWl0TtahtDbNIQXVOfjXFyGufCoJGRMFekmjz3iZL3ZkKGVlUjhNYynzaxNdwHtSHA4YvKLrdByVH4RQrNyEZSeZYWuxAziCLTs4yctoXifb6CBMCA1A75kA6FctJL5fYm19Ujje+RFzqisR8foC/OAD3NKcI2gfdlPtjGGCzcbzR7VAqnAiVHano86u+FDui86Wnn+nGlCJwh/5Phzv4i3g/D0xfMoPk7N5ueH+Rs3YiM1okcCgcUVU2UoVHfSM4uahCtjYD5pCu0NlZtQ4LRCxRKrTiA4p9CcKTEV1ebWDswvtPzBWGoGxYTqJ7u6B2xyyj4UEC/dfYiY5EykZuTjOSfoJEE4MvQKGTnlSCdVUrFaVaaeVKYugTjZ/5SUdMISc32zMxFQWYzg0zVwKc2BeyW1SH0Vkk/VI6WCkzk5Hb6+oTh61Bvhickoon24ass2LFm34Rv6KHtQmnDlStp6FNuKMFvvjePlDR11bN47NKTDeyoQmoeU36XwtSUEdmZuAa5cv4PBkUn0D4zi+q2HyCyoQGxKDoaGqG26RjFKlSMZG6G25CKjZFnZsREEYfyZUwRjOYLLaS/X1lCDlSCSC5UyIEQrVbs1le/XNo3ApEexjYz6KcDqvUpb2sH7E5iUiaTyGl4TgongjqqpRlhJCWIJyMi8QtOsZ2lzy8Oq6t99RGEnAfiU/z5/6TZS0mlbZxbZNe8eGDHvcjTtRNmDZWdO2x6yqKoThD9i/BAIlUFRdqKWVDQcS7fTTtq5C3tDQhFB6nIoLhFH07LgnlMEd9p3x9JzsDM0ysoWHqWWiRQFzSelLK6gBiowW0zOkBTSqfS6E7RLilB/6gK6uwasXkr38JhFfXRNTOL0tVtIysxHGVdk3amJ0ZdW0qHu5Hl7vub8VStVMU7w6ZA7m3s5GcZQdekKUkjbAksJfALRsyTXABjFhSS4QNslhcjhhIwjwA9x4gZExyKtpBTLNmzC7KXLbY9QzpT5C5YYJZ2+WW/U06Hp3oBwAWmq5O8Dkd9Dmb9Yf6+2jIqUjGy0UPOP0A4WCNu7+pFfXIOktHz0c5L39IxhZOSlAVL/vnG/GZllNVY+IoLXSjQ7tLjYbN3IygoubLm2hZNUXGUlPI6ERVvQtfZLtY0TQs2rvMC0ulOI5v1S0q4KJqvqmxKAdV8C8vKoCadYgtoWJGrfld8h503FqfO02Z+ja3DSqL6AKOp58sxVxCfnoPJ4g9XrUUSOHE6lpxoQk5ON0tN8nu9z2oQ/cvwQCJVLKBD6xsZgr58vluzZg02eXhYiJhB6UsMdIe3x5sqp0nyraOQrKDiKdkVwSjYiqcki03KsKvT1Jy22HXHy+i1kVdYghZowMi4Fl67ftV4Jivx/0EdA8obm1tB2pG1z+cYdPH32GmOjz6y3QeOTNkQlpaKs4TSG+L6W9j7LQBibfI07fC2eq3g0NUe2QsNuXMPJJ49Q1/gAOVydQ3NzEVtYhPwTp2jzVMA7MoYSBf/YONOEH8+ccspoi0IZECtXrftmi8JiRheTgi5cgNnz52HmvDkm8/mcZDoQJUv5GYnyDdet34yP//Q54sgchocmMDH+wh4VUpZFKpqUW4xWLiAqwqR4WG1hqHZMIVlEPK9fRmEF6ki/L957bClPVVdvIP3ESQQRhEovSi2rJRUtNYCpQoC2YaLKVC6xxAIaVJpCYNxO21GFr3LqTiOS7CWhuBJBWTnIPXsOpx89wfWObpy512glOOK5qKYXlOPijQfoHnpq2lB1hLqGn9KWPWXHrGiZMT6vMpKDz15YHHFkZgaKTp5Av1rIcSY5Qfgjxg+B8Ortm0ZHg5IS4UfZ5O6OVUddcVD5grQp/IvK4MIVXtEeR2ifrD3iDk/ai9qrC4hOpNYqxMOmDgud0n6Soiu0mjZ39yGdtoteT6QmvUDb59GbPT8SVIRlZVtImfafhqg5BofGQVORn59ATFoq7bgq86Yq+qSFGlTgVuhWLG0+bUorE1/Bysoubx+btEpq19raOYGvIbm6GuGFypXLgxs1/EEfX9OE73/xpYFQe4UCoexCpSpJ5i2YbyIAzpo3F1/Pn2sgnLdoocl0IEqU0jSV1jQFwk8+nQE//2BMTrzE08lXGCXIRO1qz12xAk+XnrSat7eNs/JaVw+qL19HDDV+Nu3fixdvY0gan9dQsbOqbneZ7xcYlXoUT7BkcJE7GhFrQNM+aHxtHeLIOBRJpBoxAbQLVdtVuYLpVfVWB7WcwL7R1oVmXluVqZRTa5Dff+tRG2pOX0IatWVKtsB2mybCM6tX00oqLedPHOWhapfyXPpovCqGWBXaRUczqaU7x8edIPyx4/VLXpk3V+r1t0DY2tNKI/waiuuqEZ+fh8DUFBwMC8OSAwcNhD6c8AoAdudN1j7Wdt8gbCUVDU+jxiHFqj1xARO0zp89fY1xLqW9tPu6OgiqgWFqg+cYJzJVKFbUKJbUtebWHTQ+fYb74xOIKytD1ZWr1lGpf/wpqeYwxp4/x8DkBLLLi5FUlI/G0X4DbM7FM1zp8xCSlmahZ129Q3ZOPZ0DGOHqPcoJpgmhTfB7wwPIvnAawRWFCK0owqHgIOz18MRXCxfj87nzLXhbQBR4FDUzZ868KSHwDIhvADd/KWnosiWmGd8GRGVYCITKKxSt/eLzmdi/77CBb3zsuR3XCK+Buh1pP7T89m108vhOdbYjrr4OkbT3pJHa2gYw2ffcHFDjnRMY7p4A57cxB23HnLhxH5lVJ5FG2q48St2DY0lpSJYdePyEBTQo68Jq78TSlidg44sqUXDiPB50D1lnLNmerZ0qijyVCS+gq27ozQctBsQ4LgYVZy9ZTRuVs4wpo11O6qnf7+W1HRxT6pLSnJ4jndRW2lARM06b8EeOb0BIMRC+1qURCEepCdtx6fYNVJ4+hVxqD+/4OLjHxGPBzr04FJNgIPTLL4EHV1efzFws3LUfO475Ip6aLZ1CzNhkm6A8p23xcvwlJvvH0d9BG6JHQHxhBnwvf7vm1j1bwRULmnfpkjkIVGWtm+pikGBt6xuc8p5yta04cwbReTm42deFoKJc+OZmIKvhBFo5O1t7CTxSuuEeruvyno68wEDnINrae9BBbdj2dBJXejuRc/UiIsqLsNfHB0e8ffGHTz6nPbgKcxeISio3kECcvwTLlq4yOmpajQAT0OYsIiVdSK1I0d8OIDpAKHGkOqkUhrIxFH2zYeNW2oIjGOasl00oZnCLNqKcJkn1J1H+8CGO5WaZo+R8a5tp8ZHBp3hFFfSqYwJPW0fsb01maSAFJyhYoebyLSSXVCOxtMZMgS2+gYivOWl5lBGl1Uijbad6OwdoNyp+V9rzLu+BFUTuGzO7boh2n+zu0f5J9HWPmP09yIVT+7hV5y/ZvmpydS3yz18wapvdcA53yDa6qRnlUBMItb2Uz2P3io02EI6+ej2FOf3PCcLvHoY5XQnKS/I9yYsXzzA8PIzm1hacuXQB5SfqbVVLKauAP1fZDW6e2HDMG0G0Qw7GpyG+/qyVad/i5W/ub1FCpdLoa/s6ezExNIZnpDzDBMMI5TkNfIlutmrGaDNYVEyaoOrOA0SWV5pdk3fqHCJIm9JIyfLL6pFXWks7MRspxRW2kR9Om0gpU12vX6Dz+VO085jVZ2KY2uXpAI94lFSpqY9/P8PTkZeWza7K1QK+ihTJ7gyLTcbevS7YsGEH5sxeSNCtxpKFK7Bi6RpL3F0wj8CjKJhbdWRmEWizCDKHKGdwuiiFabrMX7yEGnMZ3vvoI8xdvBjZJcUoo6bL5SITEpeAhKwSy55XfK02wRta260LUy9FOYCdLd143sMj7nuGlx2jGO0YwvDAVNaKbOiBZ6+smNPpG/dsf+9ISLSV8EipOYPYihNIqj1D2l0Bt5gUi0EVWO939Vs5fAVfd46MYfz5a4zw/rwceY4XffyNtl68VCEqMhf1uBBN1f2punUbCRU11oMiKqMYcRkyJ/Ktdk482VCQinOlJHGOJOB2a6vFk2oO2P8cAKToQRpXor+dIPwLEL76BogOEJ7mylded8IytOVMkb237qg7dvmFISCXVDSjED555fCmbbcnNBK7fQPgH5eI6tNn0Mvv6OsbwChts0ne8HFOngmuuM+GaRcNUUP1Tdo2g7L1G+4+Rv6ZS5bwW3LtltXejMwpxsOuYTT1jKG1e9wiSG40diCfE0vBzfIMRuRk2+p7/ckTqMr3EKlrawvhzJsuDfiaM2FsgHS2YxA91I6iXt1c4Ruu3janR3hUIg4ecMOSxauxYO4yrFq+zurHqHzFMoLRAUJ5S+cuXILZ0wD4Y0A4e+FCLF+7Fh988TkWrV6F6w8foFVdrvp6rLfHqcv3kVWmzIhaq/2SeqIBdfcf4FZHl52PzmO0i8Br6sFLbYyOU2sNEzymeaYarl4kBc+pnCp/cSgoEkfDCe6yE4gpqUds6QlEF9bYc+onGJ9XioYbt9HUO2ifFd0ffvESA9TKk7TtBMIxsoYXXDj7ySr0nvOND5BWX4vYqgrknbmAcGV48Hgv326yAPEBLnyPevt4zB3IrT+OoNRkXG+eigDS9HLML4fowQnCaePHgFDBx3GZ2bRRqnmTIwyEWm191RuhuBoHuDKqPJ+auGz08jXKGpGVhbqLFzH28jVtBpWkIAhJKyeevcYQqekw7Q81DTlz+S6ySmotQkMu8/MtHbjQ2ml7W6JNKjA8SGqkchaqtqbwqKIT55BMe+kxv/NWVycCkhMtoViU+er9h7ayy5kj6STt7aDt00PN2Es12NQ7jDM371sJQG2UB4TH4igp9IwZc0k/l1u33bmzFlo1tcULCCxSUomoqexEabM5tPkc8jbgTZc5ixZh1YYNpkG37tvL439pGqJ7fNTqdbaRLmdUnUHOqYuk18Mou3qT9nAFInPzLAxMIX2TEzQPSOll43ZSi3UPTdh1UVLww+4+pBQVWzC2PJ57CTT3OLKT8hOmAaOLawnG49Z8dZd3kGnLfGqu+ivXLdbzXleXAVFAUi2cMdLLtpZ2tFIjP25rQ3ppKUIy+H0VpThLYD2efIEkAl42qDr5qr+HnGz6DtmIeSfqEJyWgvvdXRY76gThjxg/BMJzly6j+tRpixuNyy3Adndfq76lXnQ+1H4B5cdxmFrJnSvslvAorHb3slqVgZmZCMvKpKFebqukKKBqn0j09xPaIkqjiUvNR2pOCfKqT6Ft4jm6eGPlbFGxoVTaSk20Iclc0UptKBD1cHnVRnJEbpEVaRJNah0dQUYFKR2Bn1pcggLaLjcfT63EomxqgqLCvqqNY15HZa9n5CCWj+5BYfAPi8EXX83DrLkq2LQa8+YSaKSm82YvMkoqsboyqilDeqnShvOXLjV5G/Cmy9fz51tdUmlQNz9fcxCpTXc3j1kgPEUG4E+NfPxuo3mGm54+x8m795BQVIRIXsOUggKcvX7T4k3ljJFzSfRQJeyvk6pqYYzMyLaAbP+kDCtJoWTgxMpTCM0tNzCqnozo6MHQaISRPqaQ6ovVKDSwl9/ZMvbUPJ1yrAg4HUPDqDlzFvHZmRaGVnbhHO5Te3cQUk2cG7IJte8oW17tzi0edoKshp9NKi1GVG62lTxxgvBHjh8C4SWVfjh3AYk5eZYCs8nFwzZ9VbhXIPQuqoQXtdiRnCLs0z4h6eimwCBLRfLjTQwryLetgKILF/BwdByNvOFFF69aAq88orEpOWg4e8W8dNpm0OrezsmQWVNvGeDynuq1vlHS18mXVto9PDuHEywfj8bH0fWUGk+lFPi5UzdvctKkErzl8E1MwqORUdwdHLQiVPWk0zkNZ8wJoiiSwMxc+CakwCUg2FJ/lq7ZhK/nkW6Sei5avAKLF63AV1/OsWJO38ii5VNxpNq8f+N4UWjb22TRsilZs3ELPvjkc9t7jE5IthjZjoEhq9E5+Oo1EquOW+jYPbIFXZ8OXvu+169xi1ooND3dGEVsYQHKuRjeGxpBC7X8paZOFDRcRnJZrW2sJ5YSdASFKmOrP0diVR1ieE8iiqssETeskPYnNaC7msKERlnoWlpVtS1EyWU1qLx8y2JUL7d3ou7uXSSWlyKI2iytshyVl87hychU2YrWyQk8nphASv0JhFNDnnjYaIuCWrMpP/IOtWoE73lWbbXdR2l8Jwh/xPghEF65cRMnzl9EagFBRqqpkCevpDQEi4pmF+MYb643b6RbXgn8SquwIzoOC48chWsaJ1B5JXw4weKP19u+lfar5FGV61yxowpnyy6qQnt7P3poW3TQJrnb0W0rfcWFS9YVWAHWAl/P8KR54rTRH62olzOn0cWDVoSNvKYttD0Vc5pXX4+4kiLEK6KEK3ISbZTY6kqbNGGkbcpRFBAVt3qIWlAxlOlllTjg4UN6uQpfzJmPhUtWYsXKdQbCJQSeQ5YSnEsVAUPwfZPsy/c65NsAtAz9FastgHvPwSPIKy7D3cYn6OwbRB/tZNVkiamqgmd2ljljHgwMmkZRMajusQk03LqFVB57DMEQQU2vQO5IXuvQgkqEZpeRaRQju/40ksr5HWQfuwNCEJiVT+pYa+UnVDQqklpQqV9J1fVWoVwVto/xHmXU8jVSWJWtCFBV8rQsCyWMrzvO3yqFV3oy0muruBi0omV4AD0Enzye0nYVN64jsKTAjkvaXFRWWrSoocGoaNn5swZOeUedIPwR48dowuNnzsEnPBLbXNxwlNRNBWFDCEA5Zrx4E70LKkwCOUGOke6s9w/GtpBIvpYH3/xCS9WJqKpBUEmZ1RyNUEhVFScK6eDDJ13o7ui3UC6FrVneIG927eXLVvtF4Fc0Rg9ppbrMJhYWcgJmovz6FXTx4DUBmpo7LBtDpf3qaOvElxBwxYUILy9BQBEpMyWcdpYWAoV0aRE5EBBmWQQhBKNphZR0y5WcMX8hZitkbdV6o6UO8C2nZpSsWLwcy5ZMl+8H4W/e/aOVw/cJCUM+F6VLXES4phgI1fk4IC8Hh+Lj0KxzfPrCsit6SJsV1CDt7pWUZOcRQXB4FxZZnG5oYQ0Sik+SltcguYrgSk63Xoyqli0tqJBCSQLZRBSpp+J1VUtGAFXTF5X3UC96hRXm1V+i5rqIxONnEFxSaYHiPsUFCCzMoX3+2EwHLXL9PF7t1XaMjSP3zCn452fZFo8WPscebByps6hoOemr/i2HjxOEP2L8EAjPX75iNuGmvfux5fBRszsUGBxKOy6IWjAon9SPgFRnWTUw0aMfX1vn5Y8tAaEIKCyzmxtCLWnVvCgh1ERB5bVWR6Z/aBLPx2mz0cDXzdRN7X72DPXXrhkIwxKTzROoDXvZeDGktjFFBTj+8C46Xj63bIRJ2oqKqOkdnTAtGpVfYHGimrzxJ+qngMjFIJoaQ73XFVniFhZr5d/jS8qRXFFplG7d3gP4atES04ZLVyiLYhWWmPZzAJAakiCUrFyywkQgdADRAUCBT6JKa2og4x0ahiwuDFlFJXYtFQ7R2tljtUEDCcJI0mfRN2n6ttZujPKa9PYNmx1YTYqdevYMQmtrKaSWFScQUlCD6JzjSCg8YQ6yrVxMdgeGIr2+ARlWe6fMyjwKfPFc8PS3AGl1e6jxVAhLoho+AnJ8UT0Sqs/YfQmv4wJZW4n4k8fNBuyffIqu7n6M8jo/V/gg50n11SuIrSlHXHU5bja32HWXJvSNj6e9nYvChpMYeP3qH887+pr8/CVtjufPn+MZJ4ce/xzqNfX624bjM9/1+re/9yltG8n3feafZOinJDole3yNZ7zw/f39Vvj3Lnn/6ctXccjLxxwAquGiVTSMWlB2hnoN+tKuUyk+FfHVc+knz8MnvQDb/SOwLSAC24OiDJjqNBRRRrpDmqTK2/KyqRz8K1rw41RlTbQJZSfJzis8ccK8fhHJqZYmo0z087fuILG4GAllJcg+14CmiTFeM2By8LltNkvDaN8suZTUrbCYE7DGQrcSSIeVweEnChocZVWng+IzSENrjcqlHT+OHGXaJ6Vg/tp1ltz71ZwFmDN3EVZTI65dvQEbVm/E+lUbsHb5aqwm2FQY2IC4fA22bNyBFcvX4suv5mABX1MtHsWivvOnT+26qZSFOhZlkQkk8BpK2ylaptzSkcoRkpePx7QVdfzDveN4pW3B3lEMTrzEuYdPkMxrEc1ziD11BmHlBEzVWaQUn8GxsDTbKlIXKu0xCnDaX1UfCTlO4iuoKQk+BXNH8XW9lnritDGQ3bTr9VmvKNpwNReQWnveQg+DuCBF19UiqqIMXS95nM95UJwXY/2kot2DduwlpJ0K+/NNT8OF23cxxrc0kUpH5+ZaEIVAKBvyH80mFChevOBEmQa86UMA0uvfBo7e7wCZHt82vus79V2Oz/+TjzcX5rtAqC2KhktXTCMFJ6XS8Ca1402UHbE/OBIbD7njoG8IgghGFQZSTZmEElLNzBJSqRxs8wvHBo9A7A9PgEcyV32CML3hgpXZiyussJv0gqpB0SPNvVxx+e8W0tEM2kpx1HoV1BwCoW6o3OBn7t1DaF420s+csButvb+BjmGMj7ywrQhF16gLkeXVUfNo4vln5BgF2+MXbD0Sw1Np+5BGa19NUTlRRUXIbzhttVo+mTcfXy9eil37D09pw2macNlC0s+FS7GUdHWpKrFRFs1fhrlzFmEZwbj3gAuWrduID7+cidnLVliTUB2jnCxqcJNDOnq/td2if5T+09wziJwTBCK18R1qwJHx1+jvHMZI3wT6e0atUtqF+4+RUnsCMdWklA3njYq6RmfiSEAydntEwD02A4HU7iqBkVDJBYfnrfsjyq2+/kciY80RNVV4mRS0qJyMoNo+o25OhwPiDYi6V4quiSHY447X0qaummpJRzt9VFExvLZCTd/gGLIVCpeTj7pbt6c2+zl31EC24sIF26xPoCkgzf5P4h11gGo6MN+mtfScXtf7JicnDajfBTjH0Ov6zPcB/p9kvLkw3wXCi1ev2T5hQjZXuaxc82gejoixwrDbPfyxYe9h7HP1xH53X7iHxExN8IIqJJXU0+jnKp9VzomQiv0hcdgdEGV7WNKiArGys1Vhu6t3xMKjrG8fD+FqWzviiwkgUkjZiHLYqFp1F+0/VZpOIkDDSopw/M4dDI49t3ArrVejT6lFh58imceo+FUtGCrx7hYVj2ORCSbB1NppXCTSi6kdMrhoFBRzssZjl4+vlQ5U0ael6wmkL77CAoJvDbWgtie+mjELX1PTLVm0FOvWrMfGNRuwZtVazJ45HwvmL8XM2Qswd9EyfDDjK2zcfwBZPEYBUI6MlIpy89iq1qgomhYUTe5+av/jV+9Yxklp3XkrmjVGvtfZPsTrP2n7qGqBrZqpPurCm54Ht9h07A2IxdGQFPgnkHZnl5JKnjTHi3I8VU3OOyEZ+wNDcJg0+EBQqP2tNDKzAwVCmgfymiaQkfjG5+JIcCL2+PPeJKTDhwuW1eEhmJsHRywuVPa6sj44nXH99mPa6WXGiLS1oXxDRe/IDGibmCC15TGlpdhmvSol/KOD8B8yBMS3AdQxHNruJx9vLsx3gfBe4yOLmNFmveiobMKtXn5Yvu8oDodEI0T96qgh97l4YPshN+t+q54TqeUnCKTjSKshzSEYA9K48kYlkw7GWFl1R/RG/flrVhFMnWW7SH2uUuul047zS8sw2+7cg8dW0atr/AVahkaNnim4W55Ove9OczsmedyibiqNf/z8VduEV5U17yhOLq9AS2BNJF1WK2o9ZlSeQGoZFwkuApqg2z29sNfP3+hoNjVAVEoa1m7dgf/yv/nv8fNf/AZfEoCbNmzFjm27DXgLFy42z+j6dZsJ0o045u6Dbbv3W2b++r37cLO93TL8JXX3biOWmiG9ugqZ1dW49OChpWB1DAyjk7ZfThXpYXIBwlLycfluMxeR5+geIhg5Q7WgqGBTYHK6LSY7fYNxODzeCmdFFdQiufqs7QWK/qv1m/pwqH21vL6uEZGIJyVXHZ09vn7Y4xNgZTRCCZ4I2ul6f8aJc7Tv66w5jkd8um1vyMPqFhWLBLKIE1dvWAEnldnQ9b3xsAV5tElVDj8svRDn7zbZQvKE9m3L0LCxlFja4qEZabjR0mz24z8KCN9GJwUe2W9jpE2O4dB+en6CK8L4+LiJNKFEzztsSn2fvkOf0Xv0/NsA++8CHb15955tUYSSqrmFhGOrm7dpwoOhsdYw5BTtxYbLlwjEFLgFBGGflz+2HvWyHoBJZXXWfiswvQixpFEqfaiQp30+wdjm6o0kTobM4hqrCnb6ziOUXbmGNNJDOSoiSysswVRaQD3WFSGijIOU0hqz95QnF0P7RWUbrhCIDXcf2ka80oJUR8WNC4S6DWnCCHiS2IJyO6aMmtNmw3ompFmLaq/4BNO8J67dRMONm6g9ex5HPH3wu3c/sBSkv/27X+K//q/+W/w3//V/h7/925/hj+9/aPLb372H/8+//F/wy9/8AX/763fxLt+7mvbghcdPbL8t4+QJ0u8S2ny5lsuYSoDLe9tBzaFN7saOQURklCKz6oI5RzJqzqL0/A2cud+Eqy1ddq4qyqRKaq6hMabJ1UZA5ULUMyK0uNo6MsVTq2nLSCURXUKjrVmMKPmFBw9Qce6cBVnoOXm2D1HUNi65mjSc3x9DDRpeVml0VgnBeo/if+UtVs6lkqSryYZO3Xlg9Wd0D9WQVGF2GWUnbKHQPqFMBdnrAmFYZrptbfyjOWYEFgcNFZAcYHLQxm+D7Pu0m75H75ku079f/34b6P9Jh+PifA8IRUcPeHhRu4TYPqFc4nGltbjR2YeusRE86mglnaI9QhtO2mSLqwe2HvM1h42KPmmCqCdgMiePctk0IXZTe0Rl5lmHIdUzUU1QJZ/GVNci6cQpK+ir3hUq2CtKp97sCpNSEd+M2pOIp42kLQfbPyNoBUiVSRRwVZXaJTgKrpRs1ebkZBUAVbFaTTVV7t01Md1aavumpptntOzcBWv9LJe8aoPuPHgE2/ccwEcff2a5hUprWrR4OWZ+PRsfffoZPvzkU/zp8y+xcctOrN6wDUupFZds2ootR92QdfIkoktLrANvZHkp4mpIz2uqzQH06E1jFk3QG086rQdHYtlZRBTVIY5aUY4r1eFRFXIVYcqiPaiCSscIQnlzEyuOI7qqFkEV1SYRvA8+KXm2KKqDksr7KzBd7bKbB4fwqKsHtRcv2YIXkJhhjqn9wdHWFi26gte9rh7+qltTUoZ42qxqL7DrmDcCSF8zamjb5+bAN5ssqKIKvrQDVSlPntTI/Br4xGRa/Rmdi66bNL3ieAXEu50d/3g2oUNjOeTboNEQALu7u3GHNkpDQwPKSJdycnKQnp6O5ORkZGZmopirxKlTp+w9eq/js28b03/nn3w4Ls53gFDe0byyCmzZfxBekTEISM4kVcxC6aVbb8Axhp7JAVx6eAcZFaUW3aHiQps8fLE7MMwmvUQgVCdZxYNGEyQqQuseGW25hAKnbJU4ajA5BlTXUo4I1aXx5cQ5ceMBai7cxI2mbtNo+p5QgjaY4Ik7ewoehbkI5G+rDkvS8RO08ZJJeYOtt70oqMr5qZy7KJgabu4nhd6mUvhxCYjh5IvIykHTyJiFtmnSikblUTt8+uUsbNm6E5u37LASiOs3b8PajZuweuNGiwddtX4TZTOWr9vC63MYy7ftpJ3siWTVf6HNGlpahICCXERVlVvws0dSIjXdBdRdv4nTN++g4uwVpJWTUuYchwc1Yjg1dBiZgDu1sryUaafPms16NCjcilOpTKEcTeGc7GENJxF64iQC8sqspuuR0DgEpmQjmQvN2dv3zIZWG2sBRFshWbzuei0oNQe7vEOwPygW0aTlkacb4FdbDn8uGMoTVC3S/V6+8IvltSksQjRpdERdDfz56F9dg7BqXkNqwPiyM9Ti5UZRy+tO4tydu2QhNCFys+ETH0stfP8fD4QC2/Qhqnn79m0UFfEAo6OxadMmrF+/HqtXr7WGIMo906OKA6kqs1Xq4qNqVy5dutRsCfUs0PvXrVtnQK2pqcGjR4/+4rcEwJERmbv/hENXQOCT6GrZvwnCpxPfgPDarZuoJK1Szp1HWKTRI5VSuPSkAx1PX+J2UyMv9gvadKNIKSmk7ZfCVZ2UMzwKO6lp3Kk1Y7iqK4pD9TJTqfWk3Q6R2irjQj32ZKvIoZDRcNYywf1z81F24zZu9AxATSkf9Y2i4uRFo29tw8/Q2DtizUkDMnPhot/jJEk8Tc1J7bOXwHZPTrNeEwK2mpbYdkp2sYVyqceDsj0ORMVZqT+Fx2VTsyim9VFXn9VK0fKYRmq2eNlqrJXdt3YjZRPWbNiMdQTiRoJt487dJmqltpKacC3txa+XrzJNmMjJrBbYSXW18EpPRXL9cVxobcKDoQHz/F5pbEQNaaL6vT+hMXzpST+yzly3PvUhyoY/ddralbkkJmNPYCh2eQUgKDkLam6jshXarog+ewYevM5utNH3+UeYd1p9N4qPN5gm7xubQEtPn0109Y8vM+davnmE/RMyaDMm8thyEXK8FpFnTiGCc1DbODl1p+AWHk1aG4kdvv7wzMxAdF0dvDjf1b0puKQaJVcfUKO/Quco0NwzjOziUtxtaaPtPorHA/2ou3oFj6Ro3kwrG5pbb0QPet4x5f6F47VnNEA5/zDKg9ffem5kdBxPn73Ac96YZv5IJldMNYH86ONP8MWMr6BmkALVpk1b4HLkGPz9A+HvFwwXF1ds2kiKwteUUf01KYw8bALm2jUbCb4N5nUTEBcuXEjgLsPixYvt0cvLC+fPn8coT0hAlMYU8B2aUxpSdqSec2hMyfTh8Mw6tKlEf+v9fzH0T7WH1Z3SFeHn8PIF/5vEwEAfGh8/xOnz53DuyhVs23cAYbQLY9NyEZOWj/bBZ2glONraO9HTpy2El4jOzkBwZhoC87Lgk5WBrUGB2Eo7UdEbClHTHmJSVQPiSBEjymssA9yDK+5+vwBrUOKTkIhUUqJ7nDyibCpP0TU8YbUtVVrv4pXb1m76GY9Ve2qyqwo5YbXFcCA8zPrl7w6PtH75UaSqUaRycuv7qtsRwZ9BKqV+Dup2q8z/HNlcBHIhgahVu6V7EL1DE7Z3mUUKvXHjTqxbu9WAuJaPa9ZvIfWcklWknibUhFt37cOmnfsxY95irOGjHzWtB0GuoOpTt++ax3eQ179zdBjDL5/i0o0ruNt4D72DAxYJ1D321PokyumkxUg0dLNPAI7EJGN/eJy1/ZbdpxA05XDG1k3tGx4mZVRxJ3XZzS6rQUpeAdJJGR+3tNqtfdz0iP9/hbGJcWSoKBRfU63VwJgkhFEj7vMPsxqwuk5qSGNbFDzmON4bT96bTR4+2BcSgc18VAnFlPJqdI69tGvV1TeJkclXuMNjvk6td5p2Y/8kF2+KZqoqIAzTTHMA7dtDzzme/waEY+OTBjbHvwVGPU5MPkMK7YbZc+YZ8D7+06c4QpDFxSeijqtL48MmPHzwBPfvPcK9u40m+lvP6bW21i7cvHEX5Sp2G07D+OBRbNyw1ZpQSjtu376dYFxtIJQsWLDAOsOqucju3btNS3Z0dPBIpoaorwNQAuL0oecFVgcop9PZbwPQnEgTJCvfgJCfeS4QPpsC4WAPHjy5j1v37iKdFKOAGkoXV3LtfhNOX7xruXkqV6HomvNXr+Iab3orJ5niIK8O9mFnWDC2UNvJtovl+av8YaIoV0kNV9RahPM53Vzf2FgcDQ6mfZRu6TuKnZRXThEj4gYnzlywm3nm7CW7OUpqHaA2nHz6Co+5yicUFJBi+cA1Lt4iY1StWj3+AmTHFFUgqvqkTWB/apNdrr4IjUlDW+cQbXl+19PXuNnYjGt3H6Grf9SyyYeGniImOhlzZi82EBoQDYTbTGQDrtq43WQ9qeo6UtXVm3Zg1uIV2H7A1WrruAVF2FZJ3+QLPO7uRffoGBeNPty4dwvtPW38nV7ce3Cbl/615V1qj1TNV2suXoOnvLq+IfBLz0NEcY1VK1dYWUwVKWhJpWXNRxEQKlchJ5eoZmN7j92bYe2lnjtri+jY+BDnwyRu3bphjX36yKz0ngeckzo+VUFQhoVswxhSU/1OjPISabdr4VQ7O9+kdGx380FQfCqucG5rqqhkSV8vqS6v/4WrN6w3/YkL59E7NoruwUET3a9n1Gp6dADxL2fgn8e/kPbTiwKbQwNKJp8+RxcvXizthhlfzsQnn36Odes34sbN27hHji3p7RsgQLrQ1taBpqYWUsonJvpbz+m1e/ce4AHpQWPjY3u8ceMWzp49j6qqGtqJpfDw8OANntKImzdvxt69e43eCpBLliyxR9FZf39/XKFGEgi/PQQ6ger7hgOYjiGwDtNwf83znLpSfN004V+C8CKpRWl1JS5zRVf/vta+YasGduNBOy7feoyuzn67DmeuXEMTV3qlIWnJePB8Er65WQbCw5GxU1694ikgRlccRwhtO6uDopIWpJ9q1+UaHIZT12lrKlt84oXtHZ6/cstKGWovcYyr8O3bj9DdNYSBfrIUHq7snoCkJGxxOwaflDQkUktYh15OVus+W1iB7PPXzS5VRvhej0CExmdYBTHVUVFuXlM3bdqb96f2Gfk7d+48RkZ6PrZu2fODINyycy9WkK4uW7sZ87mw7ueEDVa2gmzS1GwLPlAWuzr13mtuwsXrV6lBhtHU2ojHrY/wqLUZai3dQyUg50b+idNmz3olppNOVyKhusFAEkdbLKH2tF07LSjabD8alWBbRgKuytU3dnZbD3mBrbHpCbV6H+4/omJofIhJ3v9GzkkVZBLLUIl81QPySsy06CY5q8QWtOeox+SaE8g4QeAXlpnHVOX0z996YIuWrpMCI27eeWidl1RyRL979up13rdxspchA6vkR4HwxcupOhgSBwgFSD1G0L74/IsvTXzIj+8SUINDIzZfHz1uQg9Xr0EexPDwKCmiPKTyoD63v/WcXtPfozxx/a1y7y2ktQ8fPuJkumuAvEoNco72gRw3wdQGO3fuNFAKiNu2idIuNZoq7Thr1ix7Pj4+Hjdv3jQNpCHqOR2c+nv6v6UFp2tIx3jBiWEg1NN6jVT09atnePFyEv0OEHLSqAK3Ogq1EITDvKLaLuimFjxz9Z61r75+675F/d+lHdBCED9++RxVD+4SaEXYHxZu+4ra53IJi7V9qvRTZ0l9aNtUViOhVD0Lq6D+etuPHkMcKZNKI95r7eT330LDxesYUsMXAlGFZptae3CcWqGLQFT/98K6etsHO0gAK71JtqcolWhbyomz1BoNCMots6RWeQYPkoIJHLeetKOdANSEVJ6e2ofdedSKNlLSJy3dZCANNCFW/AUI1637MwjXvAHh5h17sHzNBgPhvOVrcMDDD1G0tVwDw+EVHouqcxdxv7MHN7g4N1y5bJ7kSV7j1q4WavnnqLtwBhfv3rVg7quPm+GXmIqd3gHWb0Ob6eFFU9sQ6uERzwVMfQI9EtNsq0He0BD+lqqtqVe99lPliBE/On/juoHh2v179jhElqPnO3nDGm7es1qlLqExFrqmJj2eSZlmM8t5JeqrDX3R0uTqOnPGadsig3T18r1G06QN56/i9KUbZkP3jI1bjOkTLgIK9u8gzW7p6vqHgVCg0huk/URDpR2l8eYvWGRacPOWbegfGDLN+PhJM64TPHpPB390gtRJMkngThfH888J7DF+p8o8SDMqY7mddpQAqeeePHnC51qpKRsNkGfOnEFhYSEOHTqETz75xKjqxo0bDXwCpDTjmjVrzCEk0We0RaIheuoApsZ0OuqwDf9i8BxeEYhTV4gUV4WevgXCK6QyVafqEUKqp1bLilp52DMINQu529aH+rNXUUz6olX8MVfEy50dONXcbADUhrqK/R4Ji7Qy7aI1qnuZwdU+tpJAyctHUnmF2YGKjjkWoW2FMOtBUUBtFsYJqaXkMe3BDlJFgVHNSI+fOIe0zALkllRZlIs221XePrGsEhEEXzQpaER+OdJrz8E/tQDb3IOwPyASHrSxVPhW0SB51MINd+5ZRI6A2NY/gppT503zKqi8kvRs5swF3wtCiVHRDbQZt+7A7CUrscfVC2nFlQiITbZGLIEJqVZfNbusAicuXrLW4r1jgxh7PmGP5+/dRlJRIRci0mZeDzmsFGom+1msQXRUAIwtq0VoXqlFHCl7fj8XE5UaUf9H5QRW87jvdPWh78Vr25po5tyqaGjA5fv3LXZVm+mdvHfnacOpiarqlbpHJ71pVxdj5S8U+xvLa6qFTBv6oqMCoRKsD/P+KWhAFeBUkDic5yV7XUxEC7Duvyh3UU2tZYyoe7PKU34nCKc9YTahQxs6QKi/Bbwvv/raaOhlUi29R3ZjJ20Qacrunj7TnNNBJ60nmQ5KAVCPAuNLfocDlAMEtYAo8AmEsvseP35sGk60U+CSJCYmYv/+/aYNBb4NGzYYGOfPn2/PzZkzB3PnzoWvry+aOfk15LiRd/PHDGnDqYshB88LLi48VoKwd6gH95vu48K1Kzh15YJleKsJpDZxi0+ft22DC/eakZBZhJMXb+AC7cSG+43wy8qGX04OjvK4VTFam+mqUSmvqlpz7fcPto1rVVMLzScgqmssqkPVuPV4JCDYGl5KI0q0vLT0Dpm2kuNERWiTVZiWGtU/IhY7vbzhRpsyjTagas5oP1AtpROL6xCRVYb9PpHY7Rlsff5SKo/b+1QY2J/2p/ISVbxKkSHXODkvUEMI2E/aehASHsfrvPatIDQxEG4lALdg9eat2Lx7H2YtXY5dLh7I5aIkuqdWZYf9Q5BcVI7kwhLU0AzRZG3u6zL7sHNkAKdv30I0r4MAuIeUfKdfkKUcma1GkSa0UhW5pRZxdITay500VHuG2jNNodbSFo/KfUgrKrn3PJmWAsJjeB9O3bhNoD9ELami7kMQWYBK5asJqbZ6YvO1N1hoXbQESFF27UUqJUqJ18q9VOqa+lbs47H5c2FUKY0Q0mVpXgUeyDyRc0n3SsWr1B5c1FfOsx8NQocmlHaTc+bqtRtGQWfNnouVq9ZgXKAiQK9dv2nvGyb/lVbU36J9ooPSMqJ9Ev3toIiigRL9LY2lv2W/TXeUCDSdnZ2kWOp622eAfPjwIQ1q2Y9ncfHiRZSUlMDT09O0n2xHPQqEsiXlxBEQv/jiC9Og169ft+8V/VTP+W87cHRsDhtSf0+NV28ahf4lCK/fvW3Ff5Py8hCfm8cblonAlAx4x6fhSnMXbrdQS42+QCzpk9KEXBOSrfJzCCe4sgOUxa1OvDlVpIlZuTgYEITDYSHm0dSGtjRhZE6BibLE5VVUgxNFiahqd37NSbu5T3qGTCuW1DZYZejEjALbO1OIlWIdk6oIsMo62xdML61HRtkp+ESkwTUgBgFxmVabU3GvRlkr+ZtlJVYmUUWGkwiQsoazVjBYtmFzRx8OHHbHHz/83MDnkLeBUJpw5cbNBsIFq9di91FPA6H25EJScywyKCI9B+FpmTyuMmueqfoyzf1kQi+eIp32dmRRPoKysqyH4tGYhKlUJIJE/fvDCZKEipMWayuNJe+uAhxUGiSP10JlDv0ILBVgUrfjaAJHC9/x67dxq6sbNzt6eN4l1iRG4FOgQ6q8oWQMadS0KaXUbNS0auiqIlFukQlIKOdzJ8/YnqREidBKX1NIm8wKlcgQBS5qOIeeZ6/Ni91LO1GLWRLnQHBsvGXEaGZ9JwinbCD76y80oUMCg0KwZet2fPrZFwimah2ifaftCoFVFHSAKljvE2A1wSWOyBmHOJ7XJJdMB6MDkI73CYSObQc9Dg6qMliPgbG9vR0PHjywvUlt9Mt+TEpKMttR2lBgFGWV80aPixYtIo2aaU6dXbt24dq1a/Y904fjWATSZy9oF/K5128BoejotTu3UFRbCd9IaicCUZpD3X5iSLkUG9nYM2o2YgW1oWIXtfcmCS0kHc0jUAgqxT+mc2Kl0/47FhaGHZ4eCMvPoTacmhzaq7N+gQSiIjYOB4WZDRKeNlXe8Oydh6ZBbqoTLydIGG2UIz5BRve8k1MJ5jKLuEmgnaPeiIm5lcguOQWv4CR4hSQgJqOEoFRxojrbnA/OzUJYcT4SqsqtD2I6bdPTt+5aALkCkps6+xFEe272vKU/CMJN23dh6dr12LBrD5YRjHvdfY2yWR1QAlFxq5uPeBgdV+xtEhefLt7nVpoN6l4UX1qMo7Ex2OjhiUPRcWYvC4SJ1HICYRy1emb9OcuAd4uI53fk2zVQQV7ZnMEZuda/PyAjB9HF5bYYqcWZHGSqV9PJc1JNV2k0va7rpIyKP5cuLERudYN15VVJRJVMFCXNpMmglCilQelRmRwhBNg+nsdmNy/r/S+tquLDovP1tN9TCssRmpRhgQvaPholNXbYhQ5s/XlMA6E0nF50aENRTW8fP8yZOx9z5y3AqYYz5v0TFdVrer8AKQDqM9IoEmk/TWrJdC3n0I6O1yQO+0ziAMR0gE4HqWy8gYEBi7JpaWkxQDooqzTkgQMHzF6UM2fHjh1mP0orShQM8Omnn5oduWfPHvO8Hj16FNXV1fYbw6MjdoEmnvO3aQvKm6bLJnuwtb0JTe1PzCY8ceEsTl66bHQ0KCXNImJkdz0afkpb4xknFRBNe0VOl1BRF9JIRV/c6u7Dg+4B3GnutI1irZKqTakiwkeiI+AaF239+TJp/6Wr9wQBKcqksDOv2ETrqycQK1KkoK4BaaVV8I6Kx37vABwLjSL94qTmpFOunBYFUbPEohoEx+fCPSAert7ROOodgcTscus8+1hRJKTfzc8nkXKiFgFZ6RYVooiZwvpTVmxX6UXX7z2GO0G+fNVGsoyNXOA2maxevRmr1pJ+riMNlZCKrt+yHas2bcHa7TvxIc2XzQeOWoiY+kMI9Cnyyqr5DBeW3V4+1l9euZIlDafgmxCHA0HBvBYx8Oa1Deb5K81IWwSyA2UPqmiTcjb3+KoSQJDt72lRU9eqO22deDw8joprtyyUUMDS9VDq0sXWTp7na7SQvut5AVC0MvFNqtOlti4r1HTxQTNNhRKkctE4HBxpnlClfblSI0sDagNfRZm1ZRHFBdGfoHeJjDdRNJNigUvPXEZoWi4C4lOw280bO4+4mY2t7ZC3g1BgmwZCvSBAyb4THZWW27vvgDXzUJygPKJyykhEQyX6W5v4+sx0EDqA+DYQTgfidBB+l6Z0iLSjAsUd2rGtrc1sR4Hx7t27uHz5sm3uR1JTyYMqcXFxMcB99NFH+MUvfmFAddiOW7duNa05e/Zs3Ll3F895MTpJjXjkvEiv8PS5AhTGqP37cP/hHVy4wu+/ehm94xOkG9fMblPrrNpbDyxVR5pQcT3NI88JopKpeM+6U1Y0qIt3QFWe5VG929SOWK7W0gYuEWG2+m/w8sA2b18DorykAqGcKwKlwKiNfLeIGIveOBgYajaJJrOnKFsm7UhqXCWuKqM8hdQ1IEV0NwaHfKNwLCgB3iHJSKBdGJNWgCsPW9E58QIdXESbSQdv93bxODnhiwtRefkKWrnINg9NtX9WYakE2lefz9R+7feDUAWcFq9Zjc1792HuilUW8qVqcKK+ooeplfW090ptv+1ISITZxK5hEdYDY4+vD1yipgAoLaOJru0BgTCQmu9ITCp2BYRjb2CkeXa1f5hIunn80lXbSxVNf9g/iG4e79nGJ2bzxtL+PPngsYUU3huewL3BcTyZeGkaMOfNlkP781dof/oSqrSm3hKKSFIpRPUl9IxLNhAeDI/G7pBw+PB+KVhei4M0dCjtQQVeaAtFxyQnkW9CumXFHKUWVeC8X3QiBohAmQ8OIP4ZhG/A5wAhnzQQyuYTJZUIYLv37MP6DZssIkaOGG1FiIbKaSONqG0KgdA0IgGkitWSb1pOv5Z9KPwLkFN/O8ScHxS9V+IA8bfB6BDHa9KKAuPQkHLN+g2QsiEFSlHOGzdu4P79+8jOzjYq+vHHH1t4nCiptjpkP0pjCnySzz77DKnpaegbGrSLNPp0jNRUl43nNdyPwYEePHn8AKdPn0bDubN2MZ/09HGC0X4jCBseNqODpL95YCrNqHXkmXXwDczMNgBqYrSOP0Nz3wgGJl9b2cLkPNqAnGjBPMaIsjJ4ZWTgQHgEdpB6KjNDK7jsFYl652niiG4pH3Cvf4h1HdJk1kTT66JVcqWHyOkTk2Lu9gOBMQhMzid1VtvnGuRWnkYmqWgff1+eXdVI6eHi1v9K4WIPEV1IeldXT2BOoF2ONJ6nJnc6j3XBUvUm/EsQrllDrUdq6gChQtgWqFXa+g344MuZWEbNKDqtXoFyfshpYkHXZA5qDycWcSiY5xIYxEUmzgLIBUAl5KoMhTIklDd4KCoZ+8Li4ZWcZeUl40m1RXHl5Ln88LEl08orqSYsWgRb+Hcx7cI4UsJT9x5Zb/+7A2NoGnuB+/1jViIyqbQa5xubDKCKk+159tJE55xAgClkzRqM0m72ombdERhiIX5H4kjr07IsIz+p+qSlQFkWSqw8teHmWVXsqkd0ktHvSN4zdZXSdfxuEOrZb4FQj6KXApbswFU0siV9XGkExPaOrm+0pd4v7TnACTwFHoL4DQjfBsRvg9EBxCkw/lkrfhuQEofmdDwv7TjdlhQgRVdlO0ozOpw54VxpRUMFxr/5m7/BBx98YNpQUTiiqe+//z7WrFuLtq5ODIwMY2SMdq4d7wv0dLTi0b3buH/7Bi6ev4D6kyfMyJY7WhH6KpWXfrwBDfcfGwCf9AyY9y8sI4s3O89KuKvDkrr9qOWXIu3l3Sw7ddHacan0QlBhMaJqaqGSf7IztJfokZCCEDlpCD7ZMLJt9KhQLj2vySpapexxuc5lr6hSt0r57QkgvY1OttQpVZ9OLj+J1PJTZiPWX6G9x3vexmNSvRotNc093RjkPUssLTFPaeGZs2idfGou/jPXb+OAqxc+mTHbKOl3gVBhbKKjS9evw8bde/D18hVWDMszmnQtNMa0hRwgSrhVKQ+BUcctWzmYGiahgnYwNYvOU9czvf601SDdRq2yJyQWAdkl5iFVQaac+rPWaVc5gg+4AKvrUQvv+wDnhPZvtS1x7u4DW+TUoekcF8mHgxNGOZW5Is2sNC+xl3sdXCQJWqUfKXNE7KCQdqUAmFRVg6yG06b9AnMLcJT3ZBc1uMphBGTm0TZssPA/pYTFFlZZLqLyRZU7KrtVOZpqiac2bwpScIBQM0sY+wsQmkyjo3qUdpO2K+fF+XrWHKxYudroqRwz0oayCfVeaUMBUjaVtJVAOB2IDoBNB+F3AfH77EUHKL8t00HqEIFT9qM0o8AoD6m0o5w48qBK8wmQcuaIln7++ec4dOQwPvzkT6ipr7PjqygvxeP7d/jnc9y5cgmtD+/jxqUrOMcJOkatpoI+F+49tJvpxxVPQdSK1ld3XY/gUKSUlFg6i2jOnfYuW2HVZHKC/5Z/tvTkResKpFL33pyIypZQ1oOApcwMgXE7taICswU0laUQYCVyDijVKZyfVa6hXk/lpNwXFIEjEQmWs6iCt4k1ZxFVSgpYepwa9awFbstpZEnDpGfKaNdi29XRTSoOpFVVIrKYtlhBodX81KSsPn8JB919vgHhitV/H4QSiyWlDS4Qbti1G18uWWplIWXTHiN1VBKuW1wqomkfahNcm99TNUH5m1xoBEjl6MmW1aQOzCjAgdB47AmMhpcqFFSdsg17UUB5LEXZtZ/aJDb06iU6xkcwRHtem+P9XEBuPWm2xVC287n7TXjIBVB9PqJzipHDhSCL9p32D/VehZh1jIxYE51OXpCis+ds60jdoBJrCSjagQqmTyAr8aLtrRhW19gUqzcblVdu+aEJJXWILz3JRZK2aAW1qJ7n/RUIW0iDp2vCHwShQwQuAU4b9SrsKudM46MnBj5RUDlo9CjKKm048VRbDlPiAOG3gfjNj76R6UCUOMbbbEeJA2RvA6PE8boWAwFRj9KUlgXR2moeVWnHI0eO2P6im5sbUlJIiQ4dssCA8MgInLtwHqEhQfjX//P/hI0rl6M4MwPtDx+ggRP0VFUtzp5qIEWdsFIHimQJSEozV/ZD2hKK3RzjhAiNT0BEWpo5HFSysGlg2DyaLd2j6Bt9RQC/RmwmNVxxDbVgGWJPnrN8uFCCS84Ei8wg6PYSiOqjJwDKySOni7ytAp42+JVHqKppQaTEKvmw8oAbPGg7aRKk1J1DDB8jy09Q6izXTlEm6kSkrtrKEFephjFqRM2McQIu/8QJJFZXURuVmLdXC4jonl94DBYsX/ujQLhg9XIsXrsOv//8C4v6SSLItAfnEp2Anf5h8OPfsvVENeXckMiWzTpJukqAphKEwan55nzZRzqtbHkFussxI82j95tnk+esBqgXHzeibXIcXZNjGKEJ0d3fZ6FqD1rakFZAbVZQjOu0wZ8MTVKzT4Wo5ZHBqLDUYzK6IbKoQSqQTjK5xwS0mEt4fr5dB+3zKtAitrqW17ASSaSoMVzwfNNycSCE9nZwDIJS8mwfVkwjuZJzKJ/3MbvCAiOkHX3j0sw8EQinDJwpEE4NAVAiAEq+BUJpQgFR9DMmNt4yJpJT0sweFDi1NyjHjICox8lnmvTSivKWTpgo2uTlq6cm2vieOoS/FPUANJkGwunjbYCcriGni4aoqWxFgU/AFE0VRZUoGMDhzJFUVVWZVzUoKAgzZsxAaHgYvp49C++9+w7WrVqJ9371C7z785/h1rlzuCwvHrVSPSmKQNg/MoHrtCmCEtMQQFtFE1ahSkMTYygkYANjo5FBW2/K7nphG7gCoOT6/Taok08saYviOWNOXUAANYN65ynlSAHeilfUqr+Htt++8GirmakQNEuFIkhTTpw2Uciba2IqbZZQBKfrxnNVJgWV9osoq0ckNUhQSa3V6EyqI7XKLcblxmYM0/5R6b6xbsJt4iUmeU+Vea79ysLz59H6lFqF1Oza42bscXHHB5/N/EEQrqSdLRCu27ETc1evsSrleTxG2XByYByKiKd9lwjfrAKL+5SDQ+eVWFuP7FNnkUi6qT06t/BEHAyKttIVynoXCFU/xqpo89rI/lVFgYTSMhSePoVHQwMY5lwamRzlgtuLDpoVD5qarPFqMn9XbdOUmTHEe6QIl8SsfJTyNyek7TvaMTo6bA65hwN9uETzQ5XTlPMYUUp6zDmiGNyoyqlFUiCM4nEoWudQcBy8YzMRT3s7s5q0tOI0F5eTXDgqjZqqu9Q+nxBz9igg/UeD0LYa3uwVyuaT5pMG3LiJK92adbhy9fo3GlCvC6wC5fjkBLWPUp9UokJZGAShNKFAKG1oIOSX22H85eO3NeHbhkA4fbwNmAKd432O5zWkHUVPHfuPDqD29vZaqJy2OOTE8fByp424Br9/57f4z/+v/xfM+uwT+LgcxsZlSxAfHIyKvHyc4KqomFh1PLpy/5GtrErOlX2hnLVB/saVe3eRzNU0NDnFej9YwxKenjqUqf1ZVslxZJXXQxXWRMviOCEyTp83x0Vq2XHE5KtRqGyLKngnZeBwZBxX5TybsCq9IFFZP1FZv/Qc0rxkq4mSV3/Boj6CuFKH5ynUq84K3abTxsm7cMXsLWWnZ1J7qq6Lug+ND9EOetQC3iJkKX+vpBS3+vpwp6fXjl0a3CckHB988gWWrV5vsaGSlWtoH64lGGkPOkC4a/8hLKVtvXzjJsxYsAh7PbwRSxAk8DwLuNBoAdgVEIq9YVHmXVTGfAipqAIapM11PY6Fx+NwoDbBC2i/nbD9Trn+1ZVKdDW/4Ty/66wVKU4ur0B4ZiYucUGVg6mHYNQsGiD7uH7/oVV1K6w7aZO/o5+L8fgr3H7cCv/YBGsxrspoI/IrvHiO1r5utHPeJtcSdNUV8MtIpT14CnnnzhL0ZB6l5VM2OI85pabe7o1C/+QJ9SI1tfIl1IIpNefMFIjnfYwrqMLGA662CKiBjxCg4/tmJusPA6FDCEJN5OmTXf+WF1KTVc4OOTMUoaKQMAfN09CWgSa26N/4+Kjl/wmIU2OKRmq1mQKGqOnU4xSQvh98/5DhAJ5DMzqA6RANPTo8rToH0VRVAMjOzsQRlwNw93DBz/7uX+F/+h/+X4gM8oHb/l1IjAjGppVLsHbpIhTmZvGzpOQ8z3zafH5xcbgh45728f22DnN2yNaITM9CaEommklF7nUPo4OX41HvmDV70eZyOGlsKVdY2SSyEdWPYYJ36c69NiRQAyRllyC1qMqqpMlbejQ+yWxG0dE40mJRUzky5Hk8wImgam3ppHIJ+QQfKdjp27etCG03z7GNk1NgyqaWy1BsJm2+svoTGOBiorL6qo2iaA/tmWk/TNsp8p520o6SEyotKxez5y+y7YfFa9dgybr15gFdvp5AXL8Z6wjA9RsIxk3bsHj1Oosd/WL2QoTGJKH0+GlkU8Ol5ldY5IxfYrol53qmZlBTVyBUUUIEvz81m5w1Ozz8rRxHrsLusvOQUVyKylOnSfUJkv5By/RXoLRaoKXweBUgrqgc1ebROWq7onV4BCdu3kR8TRVOPnhggfWqxzqh3ow8N9FttQXo4rxUqf2u0XG7Tip1H1tGCltRitLzZ639uPpKyNmj7z197QYSuBCrOY1CC+NoM6pbs1t8HPwJ+GAuFNrL1GKjLRkVVd52xBVtVFi6jn8fgN8Sjr8HQv2tierQGqJvf/zjH83Nr+x32V2a9NIwel2i9zvAKzDqdceYDojpQHGA568dDptQ8rbfcdiIenQMvVcU9fr1q/DwdIWXtxu2bl0Ld9cDuHbxNNITIuB+cBc8juzD0X27ERkahKfPqel51QprBcJY3O8fQBNpp1zk/ZzYStnJqz0J78gkdPGnFEZ+o70PySW0ARMzSFMrcfPRY9Oa488naJsN4Cntmmekqm1NA+jvfcqJX2qFn7Rn5RIVh23+QeYc0MTVprFCp6J4sz1oj6p+TCI1nwCookby+I3w3jV1d6GLFOvZ6+fo6G3nJHiFWw/uEeBZyKmosOBwlerr5Ay51Ttsmf8F5y+bPaiwNSUPixmlpWfjN79/lyBciUXrVmHx+rVYsmEdlm0QCDd9A0JpSoWsKah77aYdyOQxaek7d+k21I9f5QFDkjOs5umx+GSr1aIs9khS/XDSfPeEVKjdXEB8GqIzcywx9ypZRXt3DwaHh2yeDo0MWxn60acv0dw1gCpq2ERS1ficElxtbLH9TTnBMvmdHjkZeEh2ppzIgaZ+PON17ewcROaZBoRXl+NaV5eZEQrmTi4tRWRuDgJSkqwHoRKPW3lfH7XoulHRyOnG7x7me1MIxOTCQmQQ5Dv9vXE0IZrUtdCosmVcKO2Ki+TaPQetWrta4imf8BtkOUD3beH4eyDUEDg0cQUqTera2lrbY5NrX6AUzZMWdGyiOyb4lJab+i6BVPt4Aq1D9D7JdOBMB8zbxPGd3yXTh45bx+sAno5R/9ZvOxYKDf2uYlSfPHmEs+dOoag4F0GBPji4bztWLZ2PvPREhPt5wvXALqxYMBdRYcG494ATo7cbQXExFnTc+eLl1FZEbx86qAm1KX/m9gNOpCJcetSOC4/azN5R2YUr/FvZCiO8MUqr6ezrIp3vI/AoPaN4zlWblxJPOoaQTtDmnThrmQTbA4IRqPL1tE0cHlFpQkV2qJxhKm9+NulnCyeoKnfL2ycnUd/4CJo7W0m7OHGfjdtxDz6dRNWZM0jUPhgBdvFxm3Uikr155kmrgdA8vcMyK4DcvCLM+HrWD4JwKnZU+4V78Kt33kdWfqkV7R0iCzh16SZySNsV8LyPlNQlOh7RBJ5AGF5L6qYCWiFRVsQpUSyA7zt76RoGuLDJC685pJhizTP1+Fepf323gtjvPe5BUXUDAuNSbNvoUd8gFAwfU1+DLp7L4OAkhtuH8XxAvgeg4vZNeOaSxja34Oyd+9RuhQhLSzPt2djXixYqnbaBQTM5+vq5hPIzsp95OdHW3o0x0vTg2DgU1NfBi3Ngb4AvQsiQFOQtE0DmgHmFQ6Ow180drb39P6wFJRxvBaGGnnNMWk1qxWxu2bIFX331FeJIx+T00NAFkuiCOTSOJrlDKznsMYled8i3gfld4gDjd8mPGXqfA/COod8eHh7E6NggWlofoa+3A1HhQYgM8cPXn32IA9s3GRjruXqmpiSgmrQlJDYGuZWV1n4sqawcxWfP4Sq1m2iS7JAkTkAV3VUwt4orlZ67gnb1Q+fvPeYkUUMXgaSjrwfDo6QrL19Ycu7g4Auu/GPmTZNBr01tUcS9EVHwzsxGjCZuSbk5M0QftXHvR82RSSraS43WPjZpIWdKjG3hhBIIJ6kBhyZG0KtzfPmME6wfg7wfig+93dZJLVBpJRtlp6lUfMXF6zh/6x7uUrOcPXcJnl5+mDVv/g+CcP6SFVi/fRc2bN2N2QuWIZpUWV5YST/PvfzkOdseUEsyJTcLhKKjqiETXVtnG9wqt5FB2/DUhWsEwTNr+a0sG9UYeqa+9dRGA/0jXLgmLM2qmzb2wAgVBaftjUettqWidCm1Dw+pKLFOVGfOXEHLnRY8vPoQZZX1SCCDCatSFE+dlTJUsLVyC8VktN+oQr3S4LKZ+/uGcffGPfzsb36OfmreZ6Tv4xOk+bSpZfdHZKTDMyYK/imptg8qx1qC9jNzCrB0y04c9PQ2W3CITOkbZDlA923h+E4QOoYmqwKgNYkVKnbs2DF8+eWXBkg5NxxDIJN2ETgdAJOWFDglbwPidDB+lzjA/F0i7ecApP6t45Q4QKyh85v+nL5XC4dAOPlMGSFt6O5qpVZqR1lhNjyOHkCglys2rFyM/+P//j/CqpVLcevOTaN08dnZ8E9MNCeBSuIV8KaqKafSjiLTFJaWj8yqE8ivP4srT2gvvgHho96BKRBSGwqEA2MjeMob36v+60MvrAmo7BtteygbQ9sRDhBq4oaX/iUIZRfKHuzmzHGAULZOM2323vEpQA9MqkYNJ7OcEKRZ2tgWCG+1dtimtjoDq6Kb9u2KTl/EqSs3cP1OI06cPIOjrh74YubXPxqE6wjCrwnCyGkg7Jt8hVKCMIsgd4BQC4pAGFhShlhqMIWiHQt4CwgJupGRMVJ2atXBsb8EYR8XruGpTscP23px8tpNczwpUCJQFLG6EnV1Z3H/8n3cOHMDefzuqPJSBJcXW3SQMlou3L5vjjPZ5u39Q2jt6kNP75CVrZDv8DUv4JK5S9FQexqjvEdqVdBPTRxPuz8wJg573D0s/K7g7GXzAi/athfrDx21urMuvv7W615L/jfImg686cLxLzRBvw+EmtgCj2Mii4qmUhMoLlMZC9p/U+ymY2hyC4iyDfX394HOAYrvEweovkumDx2jw9Z0AHO6OID75+dk5b2yrInunjaMkCI+nxxBZkqcgTArNR7/1X/xf8PcOTNRVlVpEzqMq19Rwxk8IGWR3aecMrUk098qTaHti/qrd1B54Tr8ElLs39oe0OQffE4tODSMVmqrbto5cjp0kTYpmmaQ68XDnmHzuuaePo/DMfHYHhRiNWPkKpddKOeM+ikcCI2Ee0yihWGp0G/TCDUDv0NdeZXbpl56cmoMPntqhYeaerrRy2uvJNc4aouwlHRcfPAIl0hDlarT8IjHx+NvHaDmHJrA02evkE1wfv7VzB9NR9eTjv6CdDSDmkGOn0FS7JOXCY6KWqgjsIOOCoRaVKJqjiPx+EkcCYqEZ3AMF7gi0tFSy1bXVpCcKQJje0fv1N4m6agqCwyNvsQoAXL/UReKKk+QnSRxEeQ16CUd5cIYfbzKavyoIFZ/cz8meqYSa0tuXINHdjouNTUbAJNJt6NTMnHh1h3zGgtg+h0B8NnYCzQ/aEFceDwykrMwyIVxcGAMf/zwU8xevAyHvXzgrk5TPAfflCzM3LgNs9ZttYB65U+Kjmqx/dEgnHrgv9+A0TGJHaIhWuB4XeDRUJymvKYKDVM+n6urq9mL0n4a+qw8qd8FKgcgfki+/flviwPs0rY6Nn23AKZjdRzHt8efz4+alJdqaKQfZ86eRGFBNgJpCzbUVeNv/sf/Af+n/8P/Fv/x/+Z/jdVrlmOMNpUiMwRC/8RkdPPrm0hn5BSQFlL8Ym71catNqlILchTcbuu2WEcVkk0jnVTirMKlVG9FWdjyVGov6WGX9rSeW46agpAVHXMkNsFAKEeGegvKLlS5P4FQEf4KMlYwsnLlVNXsLifrII+psaffssj1+9KKWukv3buHmIwMZJSU0CYssBAvhWzd6uiy6Jzya7dsEVHPi84+3mudCyfpHz/6+Ec7ZlT2UMWe0vJLbHug4eptxGUXWkaF8i8djhkFGgiIikSRPepNm84y8PkYnZFn4FBBJWVzqB6Mvkt1cLoGqf1oDz7pGEBl/TkkZBaYqASIyk1I84uZeOZk4NGLZxgjVx3rIbfgf2IbORfOIYKmxdVWsp6xp1ZXJzYtGxlFJUghi7nHhWji2WuaJ88wPsbFndPm5rW7+OD9T8wWTUrNwoxZ8zB3+UrrVekVEWlZIb/4YpY5l7KOn7Yghe1HPbDLxRVDvLf/ViB0aAsHUBwTWsMBPg1pQ8dQ9ruKNan+izSjgKkshkraTvqs43umA2tKC/04cWjN7xJ5OZuammxRUCC34kaPHz+O8nLabMXFFrYmGzY0NNTSmJSZrwBuafLfv/cufvf73+K//5f/HT748D38zb/6H7Fs8TxqwgT8R//iX+D/+V/9P/Cf/O/+Ixw+fBDj1Cqa0EX1J+ATl4CLTa14MDiC+1295tpXYqcoqZrGKChY4BQNfdDdZ/3RozKyEZSQbGUrRBt1BWWTCLzXmzoRmUUaVVBmgdkKTVNunVtyqm0ah4m6kfLKLhQIVY5PLn8FJatUhVKd4gupRW7dt22HLi4K6lshj63aqyXl5SEhJweFtbUWSCBRKy9lTgRl59vWRxupozWe6RnCs+evkZKaia9mz/lBEH6zRbFlFz6fs9A0U0ndKavHIgCqmK7qxkgT+hCMFoJHm0y9AxURpIz4HR4+lmGRTWBGUQOrtVtpw3m7duqzLy2vpNkzN+8jIbcY4dQ+2RXHUU871mwvHnsngVJ385YBreLOLQwMP8VQx7CJSjgGFeSZJrR23NKqo8/sc/LGZvL6ZvM3c3lcnX08f0559X3sIj39/MvZiOLiseeIK75auBhzVq3GFrK/r1evxtKduywm1iJ68stsP/YQF5vth46ga2iEGnsqJtvGt8HnEI4fLP77Y4Y0kiJTVHVbeXtKJ9L+osLENOkFSgFBoBBABBTFdTqy52VbOip3Z6iKcVQUAgICrAapvLJK1lVmhICuujPvvvsufvWrX+FnP/uZbZ98n/zpT38y0eccohxDySeffYoPPnof7334B3z51Wf4/LOP8dmf3kd8TDj+y//8P8P/8N//N/g//6f/Mfbv32sOjj6Cp/7KVYRkZKLw/EV08twbB4bQQTCpzXV8XqHlHApkAoA0jvbtHvf1IyG/yESpTHpMp1YrPHXWtJ/20VT7Ra2fFb7mGptodFSgk+bwI7C1V5hcd9K0pECqzAuX8Bhk1pxETm2D9W1QxW3FSaYTmMrm14KQyu/Iqqi0va7GHi4YMhe4KN5tbbU+iAKgnEB3uql5qCFUx+YFJ2EoNe1nX36F5RvWYulGyXoTgXDlujfFgCnbdu7D/OWrrOjTZ7MXwMU7ANFpWZZyJFAFE8yqz6LsDwWiq9+DflPRQUr70m+7JyZhH+mdEpTjFSomusr3WhWAkkrLtRT1luNDKV4RWXm4TCrdTc2o6mfS3gLVtZY2RNVWIuvcGSst0dPSj5ekBCqIpZL8yWdOGu0W+FQ4S44Ybcuo2ra2R9S7v7LhHPZSm321YCnclQN51B2fzFuII/5BiMstwC5Pb6zcuw8+PGZt6CuAXt2gInNLjJVEZ+Vjx2GXfztN+I81REHr6urMVpQDRyAUiJRKJCA5REHVCqb+IRGQ9X5pWf1b4P7666/NS6vvV0mL7xMFbitY2yHTX/t8xhdYsHQh/vTFJ1i8dBF+9euf4ec/+9coys/CH373K/wX//f/DP8rakQ392N2w+RFU80SZVFoVW/kpFVxIWm8HFJR1TSJzsyy7QjRPdu+oNZR7zrVOQnPzDavpCZSTt1pq+StrApNMJVekBb05aQ1m4/2pOw1BWkrWyKCn1HGhTyZiuDQ70u7yEGjpjGyJS1Dg38rnUdOmxx+VlQ1ihNMvRnUX72T9L25twejr17aZnXRhUsWp6pCSaqILZtQLvrtO/YYCJetX0MNKFlnog37FWt5T9dsNFmxeoPZhALhBgLSkxpN+X6yAwUa5UOq0FUQJ7gFbPN49JhWe8oWk6TjdRavuTcsHHsERF4jNTYVAxAFV4SQFiJtz2ifVCBVT8U7BI8a5ag1XDdttt6Rp7jZ3gnfghxzzEijP6eBrN6NJdRWek4glLEkwI5OvLIW4yX8rr/5w/vwiomzxOa9nj7W1Ca5qBRrSLNVfGvp9p3IrquHR0wsjkXHWAvvfCqSOC5uAqCKQikIXcWBFS10LDCYdubQPy8IRTdlN8qB4xiiigKkaGFYWJiBUZpMVFDAkh2pfD8l2OpRzwlojtKGApliO6fLN+CZBiqHpvsuEQgd8m0gCoQzvp6JOQvn8u/PsIhUdM7srxAdFQY/L3f8y//3f4v/9D/5j3Hg0EELdbrT0mLpMnHUSofCo/FgZAJ3ewbQx4sZlZVlURWiqyqHrskuZ4j+7nn6zDyYqi+aTiAJbErNEYWRDZhV14DEsmpLKBWwlD8oL6gCu5UJnkYwKbhbWkR/q6CTojNUffqgSgvGJlvYm2qmJJXV2vfGF1VCKT0CpuiqUpRsceDxaLtCWxgDz58i88QpayEt8KpQr0DYyYXliMsxzJ6/4AdBuJaUdO7SFdiwfS9++9GncA0KNU2v33TlNToQEEItmGrnkqG21dIaecWW6GvnSDsuprLccit3hoRgV1iENV6R51T1UwN5XIGkrbG8DgJjdHEpzjW1WOaDKL1AqHqsqgV6s6XdKKcAd+32Q/S1EXIEmgIIUk7WI6S8GBVnL6CICxYtHZSTRfzm4y8s1lX3JYgL27oDR7D+oAtm0tZduecAKX8BZpF+Hw6NwE6/AJoBwVZORIW6tCiqIptKMOp84qm942gixGfloK1vKpzuDc7+PvgcwvGPrgk1ZPdNd4jIKyqHjbYwVKJCibLKhFfCrbSZACfgCYDSkAKkgCmgSovq0VHUSWlIqiEjUApQ+vz3iYN6Sr4NyM+++Bzv/OE9fPzFZ/jbn/0bzPjqC7MLf/ubX6C0kNSkogQ+3p7w9fejPfjajP+SM+csE15Jqqpd0kxt2Dw6jsDERKtBU0C63fNswsLGNMkNjKTrHVyglA8nsEkLJFZMlaUXaDQpXSPjrN6mgCVAqCSfACSqqvIQxyLjLbJEIW1K6tWGfniWNE2c9bM4Gh5n4MusPWPfrWh+xTqGZxeh/MI1sxUV2qUambJUWrvbMfL6JbVSrWU0iA5ri0R09OKla3CnnabuS0vXraY9KFk7ZReuUyzpeqyiBpQsW0lgEpRrNu/E3BVrsPuYp6Ubycbb5uFNzRFnBY6VMaE4THl1DwSEWS0Xn/hUKwmpwlNKH5IW3EEKuD04Am4pmVZtW0V/Q6jZlQ2iyBQtRHf7Bi1QQh5nOWCGh59hjMahPL5+hbnWQFWlG6UFFbZWWlVPkKeh8NY1HL98zfYzHzxoweZte/HeF7Osp8jxa7dMe89YvhrrCELZqSm05dVO/I+0BbfwvDYe80BqbR2PIdfKl8ipdZAmgRr/qKS+D21HhS0q7G5w8pltQb3B2dsBKOH4q0Ho8DQKeAKbtKE047fHt4E53dOq5xUmp8BqlatQ6fv8/HyzD1Vhzd3d3ZwqBw8etKRchdA5apGqDOL3icArUZMaicDtkOUrV+DQURfMW7II23dug6e3ByLCQxEU6I+IkEDbpM/NycLtu3dsr00Vnk/cvM2JFG8esavUGK1qajI8aqXoEwsL4R8ba2BVVenWwV5S2D4DYT/PUZnf0nwy5lXxWQmrPgSY9tD2+AQZ0Ixa0r5TXKjafB0OjLBS794xydjl4W8ufY/oRLP/REGjaIscDo7C1mP+luGtpF41vlRWRQonsIBZe+2OOTcEwq6RYXNmCIRDLyYtM0HOHu0TCoTqr3Dh4lXThJ98MQNL1q4yx8yidWtMlLK0bPU6rFxFTUFRQPcSglKOmfmr1mHTwSPwjo23Mha6Tko/EoWUE8n6RnhRm/BcD/qH27kpyz6AdrTsQNFupWdt54TeHhgJl/h0xFU2ICxP/f1PWGU1dci9R/YhZqHS+QJgb88IRsZfovLcRYRVllo7tntP2tHd2o9XvBnauwzMz0VsfY31YPxsxhwsXrQK9+8347cffGbnff7eI8zjuagspWqyFnDRkNmhsiJ7aQ/u8vJDRm29LSiFZ87DPyUdm9y9sdXT34Ltt7j5mO17hExG+4gKFFe+5hucTf3xNuH4J9GE8mpq20DA0hDgHEDVa9PH9O0Fvf4PHd/esvi26Hun/9vhrZWo0pqy6seosXRUz18+47G+RFdnO65fvoBT6jVHUFXQNtHEVXiaEnpFGy+2daOVH3o0NGbpP+08h/D0NAtra+xqM9d678QI/+5AH39LWwaqqqaSe4FZhfDLLLLs8b2kk+Y5pFZQYSQ5WcLUFpqa4jAnowc1nC8BqBJ/iq885BdqVbQFRjlhlKmgIlPqMqRaLEqKVUvpoKwSA6P6KIqWygsrOto+OIDOfoVhjeIRj9M/PdNsM5XjkHe0o3fYMmUCOPnmLFho3tGFayWrTRatWYulq9ZiBTWgZPO23ZizZDk27zpgTUK3HnG1rr9iC2nHef1Ky+03VJpjh5e/aW45oxLyyuEZEc9JGwyXoCDbU5VtrKwSlbM4FJqEfcF8PTyFi0sSQtJI8woqkFl23HI6e6n6umi7dncM4jmBJkoq73RsbRXqHzfadkZ4YDR62gas66/o6JZAP/z2k88xa+4S1FSe5H0exBczF2Ld9n1YuGojtux3sRKTCroQmFT6fq9PgDmX5H1WgIMe3SNj4Uutt/6QG47RFJCTKTA1B+5RZDNuXth91M32CTWb3+DsL4E3XTj+UTThv80QMB17ed83HNE20rICkUOjOj7r2Mr4LnEECThEoHQA8+nzZ5bgqYulJM/RcUHlFUZHhjBMOllZUYY8UsyzFy9hgj939sYthJOCyHN3qrEZKqv3cIg2Hy+4ou+Dk5OQQM2Zy9W4Z3yqA1H78CBp00sryaAAX0XbH+Dkc03Ixu7gGLhSq4lyqiy7omySCiumAOhLYEYmIio9H8cv3sTtJ12ou3QLEZygAqXeo4h9JcVa+k9JrU3ewxFJtFeTcTg6DUejU62qtDx393sHp7ZFqKEVV9rc0YSas6egEojZDefQx9cUO/qwqcPmhh812Z8+/wKLVq/AgjWSVSYLV9M+XLkGy9XQhyI6unrzNtusX7tjDyehB9Kra8yWyqg/aTVkDoSGGwi9yR60IFxr7sJ1no8ApUrWXiFhcFWLuFjajgWV1so7PJMgjc7Efh/avX7RtDXjEcjzySqsthL02vubIHUeUqTRyAvcu9eE8NQMRFdX4HRrs3lAt23YhezUfFtAdwQHYs6enVizay/ZVSCWLVhle4HNzb3IzC1DaGQS4nmt/Hlv3APCsfXAUbiT/sdT8+bIsUPqrzbkek7ipX6JvK5VV27jXHMH6m4+sOJbAq46Nv+DArinHv66IWD8kCYTcKYDVn8LCA4wfpf80Hgb8KaL43ff9p36SxpQxZ70+OLVVPqVpLu7Ew8fNaLhzGmcuXQJ527chDuN85C0LNskV4k9lc17PDqBLnJ/VWGLIWADEuKRXFyEvOPV1qtOXKD71UvknGgwm2h/aAy2korti0xGQM5UqUI5K6xwL/8W7TxA+ukVHo8UaovMomr0jkz1Te8ceoay+vNW/FYlFHaSCim3TVnsWcfPIrWmwUotqDbL4Zh0bCaQRe20jyUN3KIUHt4nlYUoOk6bMS+b9iXpG1d3eW37nr+yorW37jbiCMH05azZBKGANwVABwgXrVqDpQSiZPX6TaYZN+zYjT98PgPbXV3NAaUehXJg7fIPtD6M2rCXt1ZB7o5wsYu3HvL8SMtpRx0jIzjkE4LA+AykV5xERsVpqyAemVmGoKR8HPGPwgGvYIQlZCKOTOF2Y4s5kbSnd/l6I5Kp+bUtE0yTQO0F1DewpOQ4Fi9eixSC5avNW7D62DEs3LAVV248wrIVW9DaPoyhsVdIJDOpPXPZuknt8/DDfl5XdVFWtI8C5JWpog5Th0ijBUAf3sPIpEzrX6+MmabRZ2jsH7PADKViae9RSBh/poisN0N/vE04/kno6L9fQwvDlChnUDmRE0/HrWTCfdqoeSUlKK2rh29EFIISEs11LW0oT1gnSf+tzn7be6qgwS97ITx/quOreuyp/qhfTh6OEbBq8aw+61sIwF2hsQjnDVSnWPU9kGaVc0SZE4osUZaEtEQuJ1FH1xiPCVwYaK9RUT9o7bOEWQH6aHQ8Nrt6W3l4deJV56XwIjkzTkBtpw+QNm/0D0E06VJQYQlCCAo1IPXnRMk8JVtrqnKcov/rqeUVPKAcusHJ56bd5pNmLl5BGrpyShaskqz8RhZS5i1aiJVr12DDzh2YuWgxdrm5oejkSS5IBXAJCydNjkRCUQnSy8uRRvtTzTs7evqtfq1iP0tPnbHOxaKosnX3+YVYqXu5/FWPJ76sxpxg6mqlAAV5jmVXqyhTCIESmJoH7/gs2r5VCM0psS2DPNq3isFVVv0HM+Zh5vJ1tlAt2X3QSlMEJuZhr0cobdJoq5BgkUcEkL5/T1CY3TddI3ljtaepIltyjqmIsRhKUc1pLhy5uPOEpgZtUXXPkly9/9BiS0t5r5/xtx109A3WvnP8Bw5CBwB1ubRJPVUvR/l+PQOD1srrzmPSnORkJBJM2vTWxq5/XKI1B3lIm0Q3u2n4KSdysdEtZcWrNJ4aTvrnFcMruwBR1fWIqzsDV9oNm3gTD0QnI7S41lp+KWokvrIKfhmZVgR3u48fYuS65/eJIunw+rrHMDr0Ar29U2FcqmamrQVVX9tNrbnfLwK+iVnWr0EOH5W0iCXw9sUkYhftFDfasaEEuUd2Pnxyi3BMZemVB1deTY011YymhGAQCJXM+qS7FzsOHMa7H3+KBUtJRSnzlk3J3OXLTOasmHpctGwpllNTLl+7Fp9Qc+50cUFqaSk8omKwx9vXGqAKhEkFhbj1+Al6Bkn7CcS2llar1FB74ZpdO5WW1/Xb7RtkogrXWpy0N6g9Uu1lbvHyM5Ao4kZ2rA+fSyYDCC+qRWAmr3l+uTlvVMBXBZ5Uhv+3n860VKm4nFL87MMvkMyFreDkFWx1DcKqfcf4PaUWLK8iWgoTPBATZ7GtYbRlFS4oj61ferYFRhwJiUKSfoNMw4sAVhaHWgao9lB7z4DNomNevkjJyDYQapFxgvAHx1+C8OWrqapxk7TlegeHqHVacKvxMfKqqhCZkkZKFGA1VKovXEbJmQu439Vv+X+VZ67g5PV7KDt7xZwksvt807KtHIU/bYqo8lq4JmZig1cQ7cFEo4sqZhQhjVZQTA1aisOhYdSC/lzpo1F8+iyKak9Ybt5AL9UfNaFsn/6+MdynzaZ9uPJLlw2IKrG31ycMLiFxtP1I3woqoA5GKqzknZGHNR6+WOHqaTVeQqlR1NtPPfh8OEGjCqmdKmuRW3cCZafP4WF3H8Gfbyv6JtpO6lk/d9HSb2T24qWYtWSxyddLpx4XLl+OJStWYu7ixdQ6X2LHUVcLDtjLxUR7hNrArrx42fL3io/XY/SFonXlSJkgXXuJEi4Y2aTR+fXn+N7jRq8l0lDae5M9q+OUNlQ7tE3HfEjpo+ARn2raMaqw0mqAquyE9kszqo7bXqDSm/72nXcJmFzM5HHfbmrDl4tX0rYrQjAXrDiaAku3HbDf8CYd3ktbbiNB7k3AqY5PmO4dF63U46es14V6GbqFxZEVnUfZ8fNIIVVWt15F5jxu7bQZpMfo+CSc4LUUCHWeThD+4OCVslIbfwahMitUEl+JpY3tbbh8+y6K6+rgGRJmNUoekkopgfRB3xBahidQ3XAZeeX1VkumfeQ5bpMu3qU9InAEEgSqBXogLBab3AOx1SsE3onUQrkEg7YSCEIFHfvQjtzu5YG9AX5ouHcXzdpbVMmGrj6UFVdhhPbGIL9zoH8U9afPT0Xi8DhFg5U8fJQA3Obmj7CsYqOlmpgCYrC8pvFp2Oobgm3UmEeiEq0+aXp1g9VHqb1295vCub20BxVVo4pkCiw/4HIMX3w9F7MXLP4L+Zr0c+Y0mbVggdHWrxcuxsczZ5GOelg1ut3e/lZbVDGpcggpuuV2awfatMc3NIrhkQlcvnab2rHTqpjLtmqfeI0YavM9WqwCwm1BUw0abbNIw4lS7iJd3eDqxfMIs6Y82jdVZI5iTe92dlqZEe3NzuYCkZKbg7uPHuGX77xji+leF1cEkx1kkH5Gk8Z+tWQNXMPj7Lu2eQXwPkWbZlRguQpuKRJGrQ02unjalsrZ248xRNtcTrrmzlGcPHPd+jkq60MzqLyG82Bk3LYmJE4Q/qjxCupJ6AChClMps+I5/1ZC5pOuTtx40Ij04mKkkLIpDlR1OQXCHl7hS/efWMfby9cfoLOXFKt/Al0jL6zM3vFLt61w0fqDHtji5gc3UkvZL34JOeZuTyioRSJX8KQSGvxBAVh7cD8OhwXjfn+vAWP41Ss8aevE5MQLND54gr6eQdy4eRe9qo3y7CmejI/g3vAA7vUOW6eitQdccTgk2jK8pTXU1MSPtFM2kjSzGpSqBfX6Q8fgn5CB83eb8GRg3DaqH6iUJWdKOVfwpt5+XLpzz/rQv/fhJ1ZnRjLrjcxcuABfvRH9/emXX08BdPEyfDRzDjbsP2Ll4LUdoQppbeTPjVys7nQO2DZN3bnLZnNKU5y7fB39XLxaRLUJQr2eU3sWGw95YvWeo1DLsmgyBj1qgQkng/BJyLTK17qeW2gPu4REILOy0sA3xIWJX4ObjfctFFGlPc6eP4OAIH8cP3nCKqn/3a9+i9NkMkq5mknNuPGQu1UvVz1R2ZRiEqobo3qt6qysWqgr9x4lCCNx8X4baBHQriUQef8FxJoTZ232XLh6E5dv3MHY0xeWgqXz099OEP7g+Psg1D6hbt6IEmR7unGFEzK7vByVDWdMA1kpCV7VK6Q3NeevooOreCfl0rWHaGzttzy6VgKzdfg5QtPysHb/MRwMiLLJFF9YjdDUIsTmVpGeVcMjLN7SYfb5+2Gjqwvc4qKRfaIOT0ZHrHZpx9AImlq7cPrMRYyOPMX9xmabqI0DA2h6NgGV3LJ9x5Rs61q73cPfVvSjXO3V40/NS0Sl5IGV1tWqr3J8O476oH3wGYZ5Hk2DY1ZvpeHGbTyi5h3l5LnV+MSyIz77aja+nDX3G5lB+XzObJPP3jx+9NkMS/GZOX8p3v30KyzauMM247e5+1nWuUrRd/Ly3umeStd61DWAa/cf4+qte7xe3VB5/hb+6K32QZy8+QiRWSVm4251pf3nTfuZk1+gU2nHYFJJ35QcA4rsv/WH3bF6135Unj1nAfMPyVyUPZiYngy/YH90dLVifGIYe/fvgYvrEauwlltYhL/52S+tzffsZasMyLKl9Z2q/i3QBXDx9E7Kwm5qv2V7XXhdA7l4ZqHkNO83bwCxh87hV+gYeIZzV2+bJtSCoho43f1D6BkYNhCKbjtB+IPjFV5x9XSAULVQ9ZxAOPb0mSXfisYk5uYiLDEZD7q6DQRKX1KGwAP1qycFHaT2O3/5Ds6S3kkTCoS323qx45iv3WSvuFRSqSITlcRTiUK3sASs2+9KDXYEe2lrHgoPh19GOu24NFTcuI77A1P7ekPPXluXpIraUzZ5lbGhkK0TjxuRfOIEKWYc/NNyzAZVCJXsmlVH3a0mqRwX0obShFObyYnYcPAYlm7egyv3WqyvorS2qoUrF1IB3O2DUxE1oqL/5me/xiefzsDHBJpEgPvgi89N3tfj5zOocWbi48+/xidfzcWvP/gU89dtxbHIBIvekWZRrc6Ge0/QMv7SnFiKTik+fhInuYDJyfSE1+ph/zOcvttqHs6gtEITj5h0rHfxxaoDHthOm/dYXAbUq9A7ORe+qflWGHh/cCRpuKeVOVRqVt/TqcraRz3d4eXvbfexb6AXvf09+NOnn2B4fMLucFhcIr6ctxAfzVpgQQ6O73VPyoZPylQfDFUBX33YC7u5gHolZPPelfA+ZqLs3C3cbB1CO09E3tdbD5tRUFo5lYjMf4uOdpEpiYo6NeGPGt8NQu3xtPX34WFrO1ILC7Fu52672UpFUpLuxUfNVt+lc2DCKGkfJ3QC7ZNQrqCxtGVcQqOxeMderD7kZk4Er8RMa/GlCtyiUst2HDItKTtHweBeaZlwT02Ha3IqdodF2BZHeE4hsirrUVR31jbpT924j7xT5+y9rmnpOJyUDI/UTHikZFjPBJVr179XuLpj/r6DOECAHqN9plAwOTUU4C3gL9+6D57UwqpWpvw835h4i6ZRR6Y7j5vtanzx1Rx88vlM/PH9j03e+2BK3v3wQ7zz0Rv58GPMmDkXH3w8A+9/+jV++cc/YdmWvWbLReSUmm2q3vOie8GkycUNF5FOWzWFGrKK55FXWUc6ftzsZA9OcEl0ca2BzJ8UVB7PLT6hWLyPi5U7bV7SwwBqrUP8Ph9qxSMxydYrcMm2XQhMSEZaSSnvQS4yi0vw/iefoH90mMAbQ2tnF/7NL36N+PRMxJEZRCVn4BAZw0HSc7/0PPteP9LPqPI6+JCWLj/iiY3ewQZKleJX0IN1C86rsGM8GpmC6MIapFfUG71O5mJXXd+AQtLvhJR0JKdnGQidNuGPGly6TKZAOCWvzDHTPzxidLS5u9fqyqzdscs8f5qw6iuvfLaO8edWkVslJdRsRQBVSJNfchpXUVfM274bu/hed/5bQFFnH8Wcrjh4FAu274dLZCJ8k/Ns9fVQJAwn75GULKuc7UK7zTU+wypSq45MMylQO1WUJsSR+HQcVM8/TqqDCUnYGRpu4HVJSYVvfgF2RkRi7v4DWMLj9crMxqHYeMtP9HiTXLtyzyFscfG0UozKaPeNjrMNdJ1Dc3cfhqkRBcCf/fw3+O3v3vtGfv3Oe+bk+Pnvp+SXv3sX775HML7zIX733if43YefY+mm3QjhuUjbe/P4PXkesq8ETMXCVp67ak1ypOFlUx/kYuWRnAVfUkEvamtPUmv9+5iC1ikR5TVYeuSYeXg9Sa/d1aWKWt8vn5opMw9baHuu2udiYX8KJfOLTbIK4ipBsXH3XgsKkPZ975MZCIpNRHJuGdbvOYLNB90t5taDoAyh3XyI90XbNwf5+cWHXHk9MxDExUKvq0uU+mkEZBcRrIVwTUy311RsWcxoYHTSqGhgWBQycvJRUVPndMz8+PF2EKpmp7yjoqOP2jut4O+iteuxkRP7kF8gjoVGQD34RBflUVRW/aWHj6FW2soeUMrLkr0HsezIUcuO98rIggsniMSNQFh7zAuL9h6xEvFu0Wlc+QuxxTcC+2n77KPsp9Y8RhvoGMEZnF2OLt7FxsFX6OHv+WQU42hKLraRWh6khtsXl4DD8Ym2v7XWxxebg4IRUFKCFZ6eWOjiAvfMLOyPjsUBigdXaXcew3ZPP6zYfRArd+83re4dGYMb1Oxk0higfTjOGSRw/S//6u/wdz/71V/Iv/n5L/Cvf/FGfv4r/H//5b/CL37+Dj744PP/X3tn4hT1kcXxv2irspVo4o1Rk02Mx1qaJWo8A6KCgHLI5QECIqKAeIAXHnFNxU1q8dZ4ra5H1BKNlqBBEEFkYIAZBoYZ0O9+X4+TTFxKsmVtdVl5n6rnb3CO39Xf7tf9634Pw8eMx6yoeDPrRfpQ0uJLzsS8nftNRG1JpHmv/plxeyU6tVw7yW68iuLIokAL/8HW79Bh5LLCEgHmsVITocVsLEJU7nqk8BzkGWcOKxYRYg7PX0Q7d/kqzErMYL/xO5OaTCKkN7i8iIxPxCBWHjE8z3F0mYtZeWXklyB8YTwik1ebqX5Z5Qew7dQP2HTkJL2Lg5i7KhszUjPYIn5vIoWvoGst0c/l+Ws6K9j00t3YeuykqRzW0+toY+dPnhPKNas4fhp5BYU4dfaCeUYopUlFOCAhIqTwQkUoo6ONbU4TWv2cZAReuw4xaemISEg2LaGMyt14VG8GaiQMgwTglZx7i1auwhfLliJidSZbrN3GxSw49J0RSizFOW9lFiYujsX05DSTey8xrwSVT1yo5e4fc++7L/yIOdkFiC0spXgrkF5Sjqq2XlS3+nGlxsHW9J9GrPEUcBz7gDtOn8H9ri4j0EsNT5C2vQzLNpfgsyUxmL16FSbELsFcblPY58zdtx/ZbBWT8ilCFrSZscvMItasohJspjsrrdP92nozMfrd94ZgxMgxGB02DmGjxmLkqDH8+0MMGTES748YgcHDh2Pw0GEY++HHGPr+SAweNAJ/emcIstaV4FnXc9TTPf+5vRub2cLJMz/ZpqwrMoNZD5864PT6cOrqNeRsL0fqllLk7f27iSYnc3LrWWqrWLC/uXLN5NyILyzGtKVJmBK/jNewCKk7diKVFceKneV0Gb8xo5kL2NedEhmDNVt3mpz/lbUNJiTGsYvX8OWiOEQsZdcgeQViM3LYVy/E3opz2LiPbjCFlMn+vvxWTH4Bwum9RGayC7HngHlIf6mmPhBftrsXJ+9VUZxsiVmxpmzbbt5/0NhsQmLUcVvMbsXX3xzC9Vt36Ab3mFFSFeGAvBQhRfeCLmhQhPKIQkZHJSLaTw9rUHH2rFmekr4uHzMWxWD+0kTEZ+WaPOwSYe17Fh7JyzdzSRxmxMZhanQ0EjZsRAFbIWmBFufl46+x8ZjM9+etyMR8ClG2ieuLcf72QzR7WehavainEO+6/Th4rRJpdFWjcwtRR3/qQWsPbj9pRx19nwfuPjPjZknRVhQfPoE61sT1/j486u5BpaMFR2/foeu5k63wakRkZXG/scamLInFnNQ0pG3abBbZyhKdeSxw075aYNYB5mwswQH2D+9W16CMLtnQYWEYNHgY3mVr+N67H2Dw+8MwZOhIDBsVZiJzjxo3DmPHUYCDhiFsSBjGfzQBH3wQhoKiMtOiyuBUUw9MIGSZDyuPLST+KE8V7b5es95ORn+PX7uJlSWByd0St6eBFcFjFt5aby+q+L4U9DxWHumbS7E4Owczl6fRUhDDyiNz1x4z8CTPYaW1XZK1FguWr8RKnltm4SZcvnvfxLtZy/skaawTM9ciKmklStjXyyvbD8l5IRl552aswGy2llGrMpFetAVZFJgEoDpy5TocLB7tPObHFGG1qxPf8f8kCkA++30S3kRWnrR0eExrKNtk9sUfBSN4d8oqVBXhAPwqwud9wSxSEgS2zwzMOLu74GKBOXL+PFLW5KBw127TcnweEYXp0XGYE5tgYpAk0+0Mnx+B2TFLzFKehLV5gRkwRUUIX7oMUymAqTHxWMB+osz3zNm114zsyQPp+hYPnjq9qGp04m5jKwueB1fqGkx6NFnke6OmAY9aOs1EAJkMfpn9qPi8AqRtLUOlhK13d7PAd5vHJhLevYGFNyqNBZEFe93e/WYleDwrgZkJSZg4P9K0fin5G81sf4mROS9uGRYnpZqYKrImMDl9FWLiEvHOnwezFfwIn34yEeM/nRSwzyabhb7GJk/GhImTMYX/97cJ0zA7fDbG/2UStm0rh4viq2tx4akEU+IxH7l41fTVJD/g/cdP4HCzT8iWgnrDLopIQmIcuXDFuPfyyOJ+4zMT4EkCZp28ehObWGnk02XdIP1fnvtCimYB3f1wehQyl1Tm20pu/zJ6HLOiYxGZkIjUNdko2r4DxWU7MDl8OqKTliMmOQVZG0qwja5u+T+OIiY9C1/x3CVmjIyyioezX2bnyCR99k8lbbhUGjJg9YjnY9ZkdvlMjKH88n24xXOR0WTJ+Sjeg9ierw+aRxMiQh0d/V38KsK+3kBKN/lbRke9vX10z3pMmIJLlZX44qtI9ifWI5euU9zKTEyaG4EZC6MxdcZczJq/ADNYwKOWJiCN/b2M9RsRl7kG0xYuwsczZ2MGC3p8Tr4ZFEkt2ISE3AIk0zXLLi6Dl3e5+Vkbmhwus0hVIqXJjJk8tqDL167FQrZWP7G/KSH/ZJu0OhsZBQXY8u0hk+L6icPNmrcFjc1u1DV3mOywUuvnbtluWusYtrrpG4rNurgvKcBPwr/ElNkRiE7OoIu9AaksfMvYKk+fH2VSoUWyYMuI59Aho+hispWjKxo0cUlHjhqN4WGjMTQsjO5pGD6huzr6PbqlbDnHjByLTcXbTBClBoqopZvXkJf31qPHZgVKXFoGdtI9d/Gk6xoasfcA+2jsg5XvO2iCDssMoRr2GaUwt3XRnW1owrnLN7CG11NStRVsLTXBl2SpkBz3lDnzMezTCVhM13oF+8MFpaUoLCtFZGw0Pp85HXFJCfhs8iSkZKQjPjEJJWVl2ECh5dMkeY1UPNJvlN8ropgLeIz72Rcs3bEHxbw3D+kaO50UWEsHnO4ePJNla509Zg6xjAtkbypBFVtvaQHFgyinayviC7aCslURDsivIuz1B3IrBh/Wy1qwzr5eM9exo68P3x47gcMXZClOFX6s/tlElZZna99XnMRhdupPn72Ik2f/hVOs0c9cvWHek0xJMse04tJVVFz8EUcv38Qpupo/XL+DU1du4cS5K+iWgLZNDrQ2UUhNT/GQ/br6Ngcu3LyOf1fewJmLF1H7uA41NbUmB9/xM2dw4cZV/sZVE3jKRbfP6ehCU0M7qqufwNnhY5+kCvd+bsCdh/V41NyOWkeHeUhe3eBAdX2ziVr9sN5hVgFI2jAHa/fq+iYzIflpSzta2z04cfwMjh09jbM/XMB5ntsltmay4r7y9k+4V/3ArDCprWUvlm6YmUBJF9Tn9qHb4zOFT2KFSvS2YOhFaVHEnF1eI8Juf6C/JP943F64eR38Paz8PL1wcf89XrkvgQLcF3hprIMikL6W7EM6D1JtSrBj2Xb4ZPqYVKK98PV2w+WWVZJ++HtlfFRaJb734rkJRSjfF2sLEYvMTjJFghsvr6tsu9q68Zx9Sz8vjrPNbfbf5edx8mMyfU2eDcqgjIfdAjF5Tii/F2wNg8f9Ov7gIhRk1oyPIgxM3hYRykXz82Z1U3xyoyVSttzkYEFqk2Sq3Mrwt0Rtbm9jMeOXJJGKi4VQ7qWT7pa87+zpM8P/we9KtG0ZGZTXEmXaz4L6vNMDd2srW8UuujZO7pffpcmjEk93J7q6pBg/R5fHbf6WxJguPz/r7jDRoX3cgd/zgq9Zaze1g4eNxmftRhuSQEUikTlcXrOVwEhiEotTgiPJFLIOmWplgjx50NLuNtHWTIHkcfZw6+NnJBy9j+ctadIldopUUrJe84WcJ4XrlczE7Z0UoZdufaBwerh/uW6STrytx2eS0sjwlyygDuS2ZIHmPvu47z6KzsdrIVsZ3zd/c78tzW1meq9MbOp0eeCTHyaS2k9yanb18ph4bQLREZ7D7Wk3Ga9EfL28RmK+Hrk/gYE3mZYoi8Ql05MknRGB+3lOEubez+vg5TUyzxe4P18HxSs9FO7fz5ZZrkcnKwxufnkEIdZNUQZfy0wZftLEbpXPBe11qAgNgRsbSvDiUaKmUMmF7c9knXKoyU0Nmtyo15l85sXLD8tWFh9LTR1qwUXJofbb9+U3Aiavg/byZwc0Sfj6qhmxvbTA7wX28+r+5fUvFypoLwn+GSycYv187Lf/+ar9Dv77Kzym19oAvPqDoRZCf2+H2v+CinAAQlfk92fBgvm2mkRDeJ31951QU94cFeEA9Ce8UOuvYL5N1t85hVp/3wk15c1REb4h/RXct8kGor/vhJry5qgI35D+CubbZAPR33dCTXlzVISKYhkVoaJYRkX4B6c/FzPUlP8/KkJFsYyKUFEsoyJUFMuoCBXFMipCRbGMilBRLKMiVBTLqAgVxTIqQkWxjIpQUSyjIlQUy6gIFcUyKkJFsYyKUFEsoyJUFMuoCBXFMipCRbGMilBRLKMiVBTLqAgVxTIqQkWxjIpQUSyjIlQUy6gIFcUyKkJFsYyKUFEsoyJUFMuoCBXFMipCRbGMilBRLKMiVBTLqAgVxTIqQkWxjIpQUSyjIlQUy6gIFcUyKkJFsYyKUFEsoyJUFMuoCBXFMipCRbGMilBRLKMiVBTLqAgVxTIqQkWxjIpQUSyjIlQUy6gIFcUyKkJFsYyKUFEsoyJUFMuoCBXFMipCRbGMilBRLKMiVBTLqAgVxTIqQkWxCvAfzMqFi+l+yIkAAAAASUVORK5CYII="&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Diaper&lt;/span&gt; (***)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Double the amount you will usually need for the duration of the travel just to be on the safe side (e.g. in case of flight delay). We stuck in the Los Angels airport for an extra 4 hours on our way back and used up all the diapers that we thought we would not need.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Baby wipe (**)&lt;/li&gt;
&lt;/ul&gt;</content><category term="experience"></category><category term="Travel"></category><category term="Childcare"></category></entry><entry><title>Tips for Traveling with a Baby in Japan - Travel Gears</title><link href="https://yyhh.org/blog/2017/01/tips-for-traveling-with-a-baby-in-japan-travel-gears" rel="alternate"></link><published>2017-01-09T06:50:00-08:00</published><updated>2017-01-09T06:50:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2017-01-09:/blog/2017/01/tips-for-traveling-with-a-baby-in-japan-travel-gears</id><summary type="html">&lt;p&gt;What worked on a ten-day trip to Japan with a thirteen-month-old, with travel gear rated by usefulness and detailed notes on a compact stroller.&lt;/p&gt;</summary><content type="html">&lt;p&gt;We traveled with Boyan, our 13-month son last month to Japan (for those who are wondering, yep, he is the main reason why this blog has been so quiet in the past couple of years. :-)) and spent a unforgettable 10 days there. Before I went there, I searched over the web for tips, but they seemed to scattered around. I therefore decided to share our experience and hope it will be useful for others.&lt;/p&gt;
&lt;p&gt;To make the information most useful, I will just list items we brought with us for the trip and comment on how essential each item was based on our experience denoted in the following way:&lt;/p&gt;
&lt;p&gt;*** Must have&lt;/p&gt;
&lt;p&gt;**   Nice to have&lt;/p&gt;
&lt;p&gt;*     Not needed&lt;/p&gt;
&lt;p&gt;**1. Travel Gears  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mountain Buggy Nano  (***)&lt;/p&gt;
&lt;p&gt;It's definitely a life saver to travel with a small child. The major cities in Japan are very stroller friendly, even though it seems that locals prefer baby carriers over strollers.  We did bring a baby carrier with us but ended up using the stroller most of the time. &lt;/p&gt;
&lt;p&gt;Pro:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is lightweight and can be folded into carry-on size. &lt;/li&gt;
&lt;li&gt;It's back can be adjusted into different positions, including a lie flat position for sleeping &lt;/li&gt;
&lt;li&gt;It has up to 44lb weight and children up to 4 years&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Con: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The sun shade is on the small side. But this issue has already been fixed for newer model of Nano.  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Photo of Mountain Buggy Nono" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT0AAACfCAYAAACLOA7MAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAPYRSURBVHhe7P0FgF5Ftu4Pz73f/e4595yZMwcGSIi2u2s67kkn3UnHvePuTnB3CBA0kECEGERwdxvcLYS4u3t4/utXb1dnp6cDzBmIzDkFK3u/e+/37b1r1XrqWatW1f6D/qFyxGS/yZ6S7cHQsZ9scywkPx0KiZDDodPu3NHA1u+XI8cOHrXv284Ru+goB+zH+f2fuOCwjh3bY4d26ujR43LkyA6TXU5C9xQUbiIo3FBQSv5wqfxPKVuOHTumQ4cO6cCBA1bfR93nkxV//qeffnLCPscOHz7sfsMf/29ZeGzf/kuqwGrLWqHVkYnVlh3x7dK314N27qCZE3I49DVnD2WkpLDr/0TIDI/ZN4/pgAm/WvongiaBeJv1ZnOgRDBzL5y3L//kvmA/8lOJ2D7/7TMxa9S2EjGLtJ8KnTfjDMlpMLF/EPS447KAYseoaU4FhVp3z2sfEAdgdqlV3OEDP+nIflPlfqsq2x45ZD9w2IyB7/Bdr0gv7ouc4AeDmgqK+2MB4fqTyc9d99+7HDx40AEUQFVeAcTKyt8DYh70/lsCH4/sm1nJ4wN2xwEPsTZZCiahtg3IHHEC4Fjhn7JSUlzncuSwDh41wEF+OmzYdcQJv3TsiF3Mz3qQ8+JN2puFN6vgNXw+xr3ZTgDwzJrtdOhv7DXZXbIF8Nxzcd1h2yKBez1V5R8EPSvBii5XeLASOWo1dcRqki0PbgbirqHYlo+OyZV8Pr51J8oR63D2mRL3/6RD/Cx1zvV/j7hS/m//TzmxAGgYEUAIy9u/n+6+/OKv9eWI9eowO4R9D3JB0PtvC3wlj+13Qx+tDWIzGAUEASkDLCGADHwn9MVQ8QdLT9r3TQCdEKwaubBPoV87Lg7X7Hov/P7JxP0kXtgh+yZExu6XX4ZNwiRhlHx2F/rncH+kZIu4ezu15R8HvZJnKq1c9xB2wAGdr0YEVNpnAkcuOWbnfzI6hypo8GwpoV6u5KfKbLnuqP32Methjhy1I/zPCf5ceVt/vpytE1f4e2XlfwoFgApKecAEwAGC+/btc4D4S8Xp2r7jXV+EY17+O5VgU/TiShDwPECANDTNkov46ElX8BJ3OviDzhZLxH7gJ7OdY0eNKR6Bjx3/DQTtBb1Y/7k84buh+7M9B8olv28SsuqSYxz2N4jp+32OlzzLqSz/GOhxw9y4V0bpQ7BTAnSu6vZYY95rOiT2R3WVgJ49eaiCQl8ruzUPt9zj5W5thy1EEcbutsHzpdvjCnFK+Z/ymxTAChDz4oFs7969Dgj5XF7xoPffEfh4SuJ3XmiXpSfYLQsUroGblFQPh4xGmPsocx9DloXF+XbvCjsAD+GJY/ZDCJ6WE7uy5MLQnwwxv8N2fQgEQ9sg8PH3vPA3zarteMm9o2PuNfTl0H6J8fH77CKu8ByBZzmV5R8HPf8kSOlDUHVU1V6r653GzHZZQ95rp3z/wIWhwtc4EtwetNP77Ou7D1iFWsXtNzlo4sYzEK6zv1P2eyffhpRCDARSTzTjqBNA93/Kz5Wy7iiFfY5x7mTFnw/GBMv+BkAXBMmywBe8/p+x8HR+YKEU9DiI+AbsGzGC2di54GkPRh7sOO4udAwLY7EjgJsTMyLEgx/xOB9j93F2hO+VsDbEEwXu0d8vss9kp8muks/uer4fBD0OW+GjB8/gvfIsp7r8dqDHw5U+AU8LwzPQM8CjejgWYlf20ADa7p+0dbsBkB0wbNMO667Wbj6sVWv3afnavVq97qDWbDyizVulTdulbTuk7UYU99rP7rMaJIxAzIHvU6FUot9SqdyBr9zQcRQG4IWCrCcEgil+p/TA/xQKQFS2AEa4sjt27NDatWv1ww8/6NNPP9X777+vTz75RMuXL9euXXR0xysTECQGiBvMvi8e9E4GfP/MhacLgp7zPDhIlXu78shgwq5vzwif3TkPVgCXGyCwq5yBmBWUin3jkBnPIbPFg2ZIh0z2m9Ft2yltse124227DZL22bUH/PdN0BXiBixKxN1FiEBgSwxQBIVnAiRLbrtU+BagB0MkrwKGyrFTXX7bmJ4rfAhBzk+lEgIXpzQ7vdPqe9066cflhzV/4QeaNuNV3TL5cV1y+TSNm3ivLrpkqq68ZqZuuPkx239Iky59WJddOUtXXTtX19+4SDff+qRum/yMJt/1lB5b/IGeePYjvfLmd/ro83VatmqftliN7rc/5hvHyYQKd7fttVJW/qeUAtzKlSv1+uuv695779WgQYNUv359xcfHKy8vT7m5ucrOzlZGRobS0tKcpKamOsnPz1eLFi3UqlUrde/eXePHj3e/8eyzzzqQLA/0gsD3z1x4upALWcLyEA6W7Dqxz9gN7ZVO3AufQ6BnF8HijpSAG67RXpPddtVOk00Gamu3Scs3SN+ulD79Rnr/Ux1+630dfvVd6e0vTL6W3vtO+niZ9IVd881a6Qe7fvkmYyMlv7PLhN/cWyK4YvtN3Aiiidk83tMBk70mpKsA5k6DwWey4sEPcc9wiosDPRoXvS8N72SFhu8bpy80ztBT2c2bv8ngQgjgYHVsQw8NG8Md3WVg9+57a3TjLYs0eNBd6j8gJAMG362hIx7Q6HEzNGHSHE28eK6B32yNGjNTEy6ap4sufkyXXr5YV13ztIHeS7rlttd1+x1v6Y673tLd97yl2ye/pOtveErXXr/Yzj2rB6e9pccXfaXnXvxBH326U19+u1fLV0ubjTHusZrGffYs0dlVGTlsJw8esOfk80lLQIunsTgdlBRYFAUGRvEAgnvJufLc0ZMBC9du2rRJs2fP1qRJk9S0aVMlJycrPT1dderUUd26dR3g+X2kXr16DgwbNGhQKnyvSZMmTho3bqxGjRqpYcOGTjjftWtXjRo1SnfccYcWLVqkt99+W99++602btzo4oHB4oGQNojbXPZ8cLR4505zvAJ1cyYWan73QZI5jmnPPnsWDvhmZW4pzwhAACn4SrCjnfbse+06jmOJeCx4UkcOWOPeZ1fstSs32P7HBmJPv6Ot103V1ol3an3/a7S8/XgtzR+iH5oM0sqmQ7Qif5i+bj5EXxYM07dFo7S00wStKL5Uq/pfpdVDrtPq4TdoxxX3acc1U3Xgjkel2c9Lr3xqwGiguMLAdL0Z9AZra7hp++3+D+8xO99j97vPhHtHHwCyCUYHgG60e9xuWxxBTv+sjf0+5Q++IZUtNCzfiLZu3XpCegKffVm+fJl+/PEHffPNV/roow/03vvvOnn9jbf09HMv68WX/6oXXv5Ys+e8ZkzuYRX3ukldu9+q3n3uV7/+0zR02Gwnw4Y/qhEj52rkqHkaNXq+E/avvOpFXX7F87r0smd10aQnNW78Io0e85hdO08jhs/RuHELNGbMHI0ZOVsjR87QmFEmY2do4vjZmniRHRtxv4YMm6KhQ+/UqLH36tpr52jaI2/oxReX6cOPNrqOcpf1ZPv2WmPaY0BNg6M6TEpTYMotvnWeGeX77793W6/L7du3O/0FgYGODUAEzJYtW+Zc0Q8++ECff/653n33XT399NN6/vnn9dxzz1k9XetAKS4uzklSUpJjcx7kYHcwuiDAAXjlCWCI8D2+j9SuXdtJSkqK+91atWo5ycnJUWZmpjsGqHbq1EkTJ07UvHnzHBiWHR0u+9m3UwAv6EafiQVN7TOm5MCLe+WAuUL7dhgw2D4fPeCF5JgOeCBnY2zryEYDoF3G5PYYAK1Yo4NLXtIXE6/XM0266fHYhvogs72+Te+kdWndtDO9hw6m9dSR5GIdS+ihA4ndpYajdbSJSbMxOtJ8jA7mj9G+lmO0u2CMdhSO0a52E7S53TitaT1SS1sO1vethmpjz0uki++R7pwvTV0oLTAwfO2v0mffmvu2woBto6E57pbpYothxXpjjHutw91nz7jfbpx4Fv0vwfpQcz2l5Q/lNQwAj57ex188g9i2bZtjfLg5/fv3V0FBCzVp2kAtWjZRYWFLNWvWTDm5eYpPSFVsfLYSU+qpqO1Q9el/rfoPvF1tO1ytgsJr1K3HvRowcK769J2lgbYdMewxjR29RKNGLNSQQXM1aMCjGjn8cU0Y95SGDZ2roUPmGDOcrYEDZqpf34fVp/c09er5gHoW36d2ba5R68JL1aLZBDU2BTasN0wN6g9Ro/pD1biRScPBxjaGqKDFSLVrN17du11mf/dq+70bNWzYjbrqyjv04AOztW6N9Y6mAHL+DphvfIyWiEL+Rim0tqCc/oJeKOiJWFqwbNiwQXPmzNGAAQNUVFTk3EzvcrZr1859BlxwRWvWrOkYGOAD6ABA7GdlZTlwAuS41gMY54KszR8HzIIg5oXf5LcANQR3GObotwBrbGysoqOjnevM36xRo4b7HtfwezDDKVOm6OuvzSULFN9B025ps2XB8EwtMDzXxOyfvduNPeGeHsajOqwdxtx+3LxGX61Zpve++livvvWa3nj5Bf31mef07tyF+uuUaVp67Z3afMVkbRp/o5Z2H6MP63XVh2lFWpHZRfvrDNDm6LbaF9tBSu4hZfSTsgaGtim9pCQ7ltlfyjbJsmPZJjkmuX11rEZfHarZVzuyu2trTndtyeuhTbWKtb5OsVbV7q7leV20NLuD1tW3Y416aW2TvlrTYoDWth+pbQOv1IEr79WxKXPNTd4irS4JzAOEP4Uif7jAcFxY7qkufyjPBQgeC+6//PLLroHT8yckJJihJCszK1VJyXFKTExUakqmNdZMxcbVVP2GXRy4dOx8ubp0v8kY3hT16jtVPXo+pG49p6t3v7kaPGyxBg2cb0A3X8OGGHsbttCBHSDowW7Y0EcN7B42sLpbrVtfZ8Y10QxmsP2dHoqJ6qCMtM5KS2mnlITWio8tUGJsCyUmFCgtqVBpqa2UnlKolGT7nNzC3LN8+2yS3lI5ma1UI6dAbVv3UovmHdS/7yhNe3COPv7wG3Nv7WGtEe7eZWB/hoOeBzkYjmd5GD5M7uKLLy5laIAOOgsLC1NkZKTTF6ACyABkMDKAiM/+O/44Ww9MHggBSADJszeOcR3nATZ/PS4xwm8i/F3uA1BD+HtITEyMAzuEfc5xfaVKldw9czwqKsqd4/cLCwvVp08f/fWvfy1ldHTIvpQF/zO17NhJON+a2aFjOrh7r9YtW6GnFhsBGDNSbTq3UVaDGorLSlBMYpRqpCeqICNT7WOT1OnCKA38typ6Ia2FPk1qqaXpbbUhu4t2ZxubS++qQ7HtdSisUDJmJ2N2DuASuph0luI7hSSRbTsdjW+rw7bdH1+k3QlttC2+UFviW2lDYoHWJBZqaWwTfRZeXx9H1tWncY31aWJjfRjXSB9E1NYX1WtraURdLYtupO9jGuvb6Cb6OqGFvs1qp6/rdddbNdtLd8yW3vlSWrXBQN0YqcHdhoMbtdu5wKfehk4YyCjPzfUuUs+ePV0jpMFiLDTof/mXf9G//uv/1fnnn6+42GTlZjdU3dpt1axpf3U2sBs04B5zKx9Wr95TDfSmqf/geeozYI4695imHn1masSYJzV69GING/SoBvSZpiEDZmj0iLkaPmSGune5XQX5lysuprOBWWclxHdQkikpJbmTgWtnpRvYpae3U0RYDcVE5yolsa4y0hspK72xgV0DJcXXtnvKVY3spsrOaqzMtAZ2vJ6BXj27roGBXmMDvcZKjM9VsyZtjRG2Vod2xQa+4zVv7mLn2h46aPVxUtDD0E4/6AUN3RdiY4AVAIMbCqgAHhdeeKET9IWwzzl0CWBxLaAFmHmGRQfnWRYMzrMuzsPsPHPjN2CLvo3wPQ9oQVADuBCAF/Hg56/nuoiICFWrVs3dc9WqVd0xgJPrqlevrsqVK7tr+FuA7rRp09xzB+N85bXlM7Fwl8j2rTu0cN7jSo6NV3R4hOISYnVOxXNUObqSIkyyDPQax0Wr6Z/PU5v/8x+6KSpHX7QaoN3NBmpfZkdtjcrX9rBmOhTdSoppK4W10k8VmkiwPD7HtJHikCIDvlY6lthKB9Jaa31avn5Mb6Zvkhvrs/g6ei8qT69WT9cLVVL1VJVEPVEtRYvCkjS3aoKmVwzXfX+ppqkVw/RoTKqeTamhJZWi9XyVeD1r1zxZLUGLKsVpSYV4vVQhVe9emK0fjIR8F1egv8bn6+OWxiBnLSbobMZFp4Su/tbT/L1LKegBbsFBCl/Wr1/vAI+GTGOjMdJ4Bw4cqIULF+qtt97RakPwjev36PVXv9Idkxdr0oQZGjr4QfXofq+B3/3q2m26invPVr+BCzRg6EL1GTLfZJ76G4sbPGiGRgydaUD3sPr1uVvt216jJo3GqHatgcqr0cfAro397VZmwIVKtB4tMamFMct8J8nJTYzB1VV6am1lptdVVkY9t+VzSlKekhNrKDY6w/ZrGiA3Uu2azZWX28R9Dq+erIoXRBlLrK06tfLdtmV+R3Xt3F/Dh07Qm2+8r1079/8C6J16hZUtZQcnFixY4AAEVzQ8PNwBG2A2dOhQPfLII3rzzTddLI8UE6S4uNgBB4Dl42yACSCDywrY+TicZ3MI34H1e9bmQcsDG4AGMJUFOo5xXwgMLvgZcAOoEX6L6wE5jnsw5fc4zt+j8+V73DPPRdmzZ0+pd1Jeez6TCk2LO1yzYbNGjxyn8CphigoLV42sTFWo+BelZyUrI9ueOfwCpVQ4R23sWSfGpmmKdebPpjTVsrzO2p1mTM28nCOxxupiDfCMtSnBgC6xo4mxrGg7bvYjIwjK6aCjue20M6tA61Ia6/ukeno3OkuvxmTo5ag0PRuZrCfDEvR49VjNrRat2dWj9Ej1SM2IjtWsxCTNtvp+ODlJDybG677YaE2NCNcLKel6OTFFTyUma0F0jGbad+ZUjdJz1VP017BcfVE5T2/9W4K+j83Xd7U66qX67bXh1nuktWutxzZ3vpzw2u9dHOj50bBg7wiDWLdunYYPH+56cXp3et1bbrnFuVIEyrkcRrTHQPvjD1fqrsmL1LfXLerS/mb1KX5Qg/ovMNf1CQ0Z8rT6DVii7j1nq1uvR9Rz0Cz1HjJLxf0fUJeuN6t38W3q0fUGtWw+1oCrqwGVuanmomZltjMD62Csoq1ycu1zdr4yMg3oMhooJa2ekg3cauY2V05GI3Nn65hrW0PxUTWUGFNTaYkGgCkNSz7XVmpCfWUkN7Jjjd02LbGhO1a3VisDxzz7m5mqlddU+c3aG/Mr0pVX3KBNG0NxvhPLmQV6FAwdHTIoAWCgK4ACUHrxxRfdSGiwcO38+fPdaCq69cyO78HkYHAAHi4s4AkAAoqAp4/bca0HOS8e3IISPAdYlQU+7pfzAKAHPg+k7HOt/x22we+yD+Cxbd++vWuT/vnOhkLT2rnvoFq372ReTJp1xqmO5dWukasbb7pGS56Yr08/fkM71yyVNq2R3n5HW66+Q0uLBmpd3e46WLunjmaZu5ph4JbSRkfiWupgRFMdjjSGZyRBZj8HEpprd3JzbUptquWp9fVpck29GZehpyMTtKR6jBYbe1tyYYSeqBSpJVWj9URYrJ6IMLYWnaCFMSYGZrMMzKaGVdcD4WF60NjmgwkxujfaWF/lCzXfOtXn7J5fSk3RizkZWpSeqpkxUXqocnU9eF5lLYlI0YIKsXorrZHer9daC9Pq68225m7PXSKtNneXWQenuDjQO3To+GCFN2oADyPKzqlhrCrdJEPPPPuS9u47rD17WRIodL87DawXL/pYI0feqe7drlGv4skq7nGvevV4RAP6LbRjc43xLVDP3o8b03tcA4c/poEjHlWvIQ+q54A71K3bVWrZbIiy0tooPrqpEuOaufhbalIzcz3NJTWQwl1NTalrrm0t691rmhHmWs+f4yQhLsfAzosBHGKg5wVgS0u03zGQS08C9JooyxpATloL5Wbk29+DEeapZo2m5ipbz5pW17m77doUa8miF0It00tp8cCHnDmlW7duDogAjF69epWO6AYHqz7+GF2NdOAGUwLYPMjA4AARgA7x4McWlofrC0gCVACSB7EgwHGce/DCZ8SDFuKBD+HvcM673bi0AFrwGgARDwPWFzzHfoUKFRwA/+d//qdeffXVkqc8Por7u5eSdnFCE/EfTNiUQjAfaDJsSzaTLrrMxcIjo+JULSJSD8+aqdVrlttJ0jrMDdxHUquBw5Ln9OOQSfqqYRetq9VZO9Laal2V+tplNrM3trkOmft4JLGljiYV6EhKoQ6lt9L+rNbak9taazOb6fOEWno1KkWLDdDmmT7mJZkrmpLsQO6ZqvFaUi1OC8Ni9Hh4jBZExGi+ybzIGD1SLUwzIqP0cGyMphm7uzcyTPeYHu6rHqaHTaafe47mVLpQCwzo5hoDnGHCddMMKGGIDxj4PZ6SoVlRiZoTa4wwp64WJOboh84DpM+X2fOd+gGnP6AEpuGhASYh79lLjlcox65hoyZGsfP073+6UHPmP+/ScfzqCyRvrzCGOn7SPA0fM18DBuPC3quuPe5S1+73qEfxdDO8ORrQ/wl16RzaDh68WEOGzVWvfndrxNgH1LHbJFWvasaXWF/h1TLdNio8R3HRNVyMLiG2pmIisxybwyXFPQXkcFlTrcfChU2ITy+VxPisEjFATDBgNOF6B4wGbknx9h373VSj9WnJDU3ql1yXbcBnBm3MEQCsnddCLZp11g3XTdEhxjJotbRQV0ehTuKQnWDC9uku3r0l1QQg824go7YwHp+zx/6SJUscMPr4GyCWmpquzMxsY3qAX5IdI1bXwH4nxQCQkdi6ysrKcdu0tAxVqVJN//7vfzJwqmJgBPBEGiCFmRcAIEUawOHmxhu4xbjz0dbw2eccxytXrmoAm+h+h7/hgfNk4oHyZMLzAoYALCEXvJVTFs9zbSLU+fkkY3eM9kI/Yx/Rzh5rNO6OuBQbL8nUeOrp59W8VmMlVI1RRk6u5j61WFu0175jFxzaa4zCAO/7dWZkt5or2kI7cVMzOmpfRBPtCm/g3NU9cU2lrLYO/A4l2/mcjtphwLcrp52WxjV08bq/mj09XzVRCypGaH5UrBakJGlaUozuN/b2WKVYPV4xTovMxX0qq5YWpGbowbBIPVQtXPNiEzU7MlYPm/6mxsSaSxuj++z7D4XFaVaVBM2qHK0HzPu7O7ya7ogK1x0GpnfHJujBmCTNiUjWYxFJetTc5Dn2/VnxMZpSpaKmhVXT82lZesdsVGZf2smc/FObkO5Az80sKdHKgYOMJh3Wx59+pMjYOIVFJSuvdkv9uPqgm/tKjuG6zcZOH39fA4beqf5D5xpjW6DufR5R5+Kp6tzzXvXoO019B87VwCGLNXDAk06GDn1GgwYvcPl3w0c9qM49LlF6ZgtziR/RzOmP6/abH9CtN96rMSMuU9+ew9W5fV+1aNpeF54fpeT4XKP9acbishUbmaG4qAwlxeWqehVjNXEpJskGeqklYuCXkFEKgPGxWQZ62bYPuNVQsvV4KYnm7jrgI/5XU3k1zPVNq+VigqnGJnOzmqhB3TYaNfxKHbC2x3RF12CtjmjjR46EcsBYIeZ0FxoJ8dgrr7zSAQDCjAfCFZ7twNhHjx7tBjf8yCqDD4AeYAbo1apVx9xXko3rqWnT5m4/L6+WmjRp5kAQwGP/qquu0aRJl2jYsBEaNGiIOnbs7K5PT8809hVlAITbySgr+X3Egas6wAPgADt/3oNgeUAXlPKALigwVH8t8cndu0OjocGsg9+tYDMloOeXUnLHsKeSNoP/xHilayn8Q+x++yGzs6MaNGy48pIydcG//FFTJt+uQwdpbPaNnduktZtMcd9pU7fx2pzdWfvCW0hx7aSENlLVhtoP6KW10qGkQh1LbadjiUX2uZN2xhVoQ0orbW/WVx/mFGh+WJoeMQ/m3oqRuuW8SrrNOps7zUW9OSlKtxpQPZFSW49FZRtzi9dtYdG6xRje5AhjdCYPRcbpwYhY3W9Ad6d1KpMND+6Mite94Ql6uFKiHq5sn63DuTkqTNcbu7sxLt6uSdED0WmaZ/b6uP3dx4xJzjOmOD02XPdHVtIj4ZX1YnySPjXicnTMVW762ykHvQN7j2n3Dh+wtz/uljk+opmzZyk7z8Ahs676D7pE260tbTZdLHzyC42Z8IC69b5GfQZPUXG/R9Sl90x1LJ6mDsUPqEvPB92x/oMe0+BhT6lvn0UaPux5jRn1ghke8b2H1L7jpUpIaab4pDr64rPl2mWNYNO6PW67duV2/bh0nb7+fIU+eO8LvfLCe3rw/lkq7jpIGQZQEdWSdO6fKymyerIBWLYbNY6LTXLAF5KUEPOLy3QC6IWAz9gewOfYXgj0Uu3vw/Lq12umzPTays40UMio70Z869QsVHG3Edq7y9ovvTNt2zVyDMq2rpTunLZC7JU8PVgOsTeMn4EKRjFpSLfeeqs6dOjgwAFAZEACdxW3FpcVFpeRkaW6des7oMvOzlUjY/hI/foNzQVOc8AIYPXt218bN262v7dDq1evNRa5S1999Y0+/fRzvf32u1q8+AnddNMt9vc6OXD7wx/+t9tecEFFuy9ie7GO/cES2QcYPWCdTMoDuqB49xkXmDxEGK6vl9+90B5cYwgBXnmgt8c+gHPuowGd9pjsPKgff1yhhLQUJaUkKiMhTntXrrJz1tC2mC0uM0N74Em9lVaoL2LztTmpSIfTOkrJbXU4toUOxTTV0UQDwbQiHYk3iTLAS+wqZfbVrsg2WpveWe/V6aSbq6dqzW33asfsedr6iLnNd9+tTy6/Qk8O7Ke7WjfTtXk5Gm+2dPUFkbqsWpQujorW1UnJusHa0W0x8QZ0BmIGfrfa8esM1K6Ji7VtrG429ndXtXhNqRarWwz0ro8I0zXRXBOnW4zl3Wtu9IzwFM0LS9Lj0YnOnX4wopJmxofp0fCqet6+/4WRl43dhp4e0EMxrOsZMuYjOnrsoPYZvbn6+hvUorC9GjRup4suvlPzHvtI/Qffrpatx6tnn1s0ZOR96jf0AfUaMFPd+z1qwPeIOvWcpq69pqt77xnq3e8x9e2/WL16LtTw4c9p9KinNXzEXA0YOEWt247WuRUSDPjy9OLzb2nd6i1as3KLdmw1A968z0D4oAPArZt2a8PaHXbMmo7d48Z127Vk4fOqX6epqlWOMdAy5heTWCqAXwgEAb80AztjhTGZTuKNJQJ8gF6I7dV14BdePUn16jRXWgpMr75zpevWKrC/UaQeXYfavRi7hTDRttHHCTrh4OkvX3zxhVq2bOmmevXo0cMNXpA8TnwM4MCdBewYgPCpKAxKhOJ5Sc61BdhwbWF8ACD7COcAxf/8z3NVUNDKGSuAt2bNOgOWA9q0aYsBzSatX79Rmzdv1fbtO50AjlwzdOhwB24AH8AJ2OHawvRggmVBrqyUB3RBIR6IEONjYIZsA0pwJsrvVmgL5YEejK7Ee9p5lERcux9jhEzVdOhn8spLryolLVlZmSma2L+3XWiN7O2v9NP1D+urOsX6OrpAP9UbosM5xfopt1j7za3dHpevHXHNXLxO6cb4EtvoSGRbKba7AWJfA8G+WhXXXu+kttVVlVJV+O/na9nTz+in1SuMOa6WNpirvHy59OMPtv1OWvqt9NKbOvr4M/rkplv1QPduGpuZrs7n/Fm9//2PuiI8QleGhevyyAhNjInQ+NhITYiL0iXRUbrGgOvGcAM6c4OvseuuMDZ3VXScro9O0mQDvQcN9GYaMC40IjLfgHJq1Qp6LClaCyPD9UK1CH0RkarvCrqcPtBz7psV3DVk9949uuzK69S6TQ81b9FTLVoONnZ2mdq0v0K9+05Rt56T1b3XZA0d/ahjdd36zlTXPrOc9OgzWz37LjDAW6L+A5/W0CHPa/DAJzV86OMaP36+pkx5Tjfd8oiqGkW+oFJVvf7aO8bm9zpA27R+m9av2Wpgt1NbNu4y2eFWwFm1fJ3JBveZ81dceo0SYtP0l/+soGij2xhVTHSCk1jraUKSEhKj2sQA42JgfObmlsT2AD6EwYu6tfPNva3jQK9WjXwHenVqttSg/hO0e+dPLq7n8A19/P46+bsKI5aka8DeENxWANAnCTNQANh515bPnuWFRmtz1aBBIwduMLuiorZuH4YHyC1atMSAtKcDqsLC1mYzKx3TQwA6AA8B/Di2a9ceB3qc49rvvluq/PyWqlDhQucCJyYmG1jFOLeX/fKALijlAV1QYHkMaLBlpglJycQv/QyN37XQFkraBf5RKLpqhWMloLfXEBDQ22ZuK4f8ual336s2+c1ULylGcy6eqE33PqKXa7fTl1EttTuqvRRF8nAPKaaj9sUUaZMxvI2JLbUzvUiHsozxJRToQLV8u84YXsZwk0HaZEzvy4aD9Xjjnmry7xcqp2q45jw6S8tWL9fyFUu1cc1Krf/mW+1cukwHV66UrFPS9waCy5lLu1JHvvtK3yycr5s6tlWPChU04IIKGlW9mkYaOxscU03948M1ICFCw+IjNc7q+5KIKF1eLcwkQpeGx+iyqARdFZWkmyJTdHdYoh6qbq4to8DxsXqkSgUtse89Y4D5avUofWpk45vTBXp7dx/Qvj2h2A8aYQBjr/XgU+6dpoZNOioyqr66dr9aI8c8rJ6971aPXvepT/+HNHDIDHXrdb86Fz9kDG96CPD6zVPfgYs0cOgzGjr8RY0c8aoB1Ifq0nm6Lr/sBT395Cqr26NasOhFVbbKPL/SBVqy5Elt3rjNAdvyZXZ+2Rpt2rBVmzds17YtO53rvXvnPh3ab/dl97ph7RbdM+V+1c6rb0CWaA0/JiSRcQ4Ao63iY4xSx0QnhyQq1QnA59geo7slwIcQw6tbu4XL38tKb+hcW9ge+5ddcpMbPHPjFeiiRE6BXv6usmLFCsfyADtADWbnR18BQc/s/OgsIMgW1gezA/RwbRs3bqpmzfIdwxs4cLAxxpcde+vdu69zSRs2bKyvv/7WWNR+7d9/0J3DxWW7bt0GJ4Df1q3btWXLNrdP/LNly0IXx8PF9QyPgY/fYiCDfD1GdrkWdovx+NFq9n/XQjsoAT3+YinocRy2Z1ucKEBv67EDOmAHDx+0q44c1R3X3qi++QXqYO7hnbUb6LXGHbW6XrH2xLXTkfOaS2EkFXezbZH2RxZoR2Jr7c7uoH2ZHbQ70QAvsqVkrqzijOGlD9OmvEFaX3y1tt+9UK/cdK/i/lJJVQ2QHlm0SButAa/Zs1s7rF42b9mh7Ru3aveazdq3coN2/7BKO5ct1w5rQ9q9TQdX/aC5V1+q3rEx6m7sfECVqupbtbKKI6uqW2wVdTMXtVd8hAbGRWqU1f/EKuGaVNWYYFiMLopM0CUGeteY3Boer3urR+vh8CgtTozXnOqkr1TTK+YCv2M2+mGVRK3rYe7tjtMAesfbBTuAnrRn70E998I7qlGztVq1GqXinreoW487NGjwTA0YZK5s16nqM+BR9R0818DOwM/cWwYz+gxe7ABviAHecAM8B3qX/dXcxGl6cvFaMwKnb818dIHOr3iOqoVXdPli27Zs18b1W4yBr9O6NRu1dfM293nThs1auXyNsXJznQwYyVrfsmm7nnnqWXXu2E3NmjS3xk6yakjKgl+0VX609Toe9IJurge+7IxGbnYGDC8j1dw62wf0MtPrafpDC/5m9Bahzn53g/o7CmyPBHJcWJ+nB9ABfoAd4AbIcd6nqsD6YH81a3KclBQSkOu5AYtOnbro9dffdOC+e/deFRf3cqCFC/zRR5841xUXF7AD2PgM2wPoYHkwPj6vXLnaXQNj5DcBThgfzBw3NwSE5YOdl/KALijEKhm9xZW/7bbbSmokVMombv/mhfZQ0jYCHm3oH9c+QiO6Ztbabnt7TPYf3Kef9u/VC7Pnq196Dd0ama53cprrx7y22phUqD1hsDdzWdN6SRca+KUYk0vp5GJ6h9I76mBiWx0iCTm2XWj+bExPbU3spdU9r9KBha/q0Jr1euG1V3RO1ar6t/MraP6SZ7XXbuyH9Vu1YvN2fW32tHbNFu1evUMH1+7Uvi17zKa2aqW5wDt3bNGBTev1zH33aFz9xhqdmqniCgZ4lSqrU1hltY82iauuLsb2ehroDTbWNsYAb3xl2xqrGxsRrwmRibosMknXh8fqjuqRus8Y/ZNJiXrC3NpFlSrqrfhEfZSYqTcrxWvf+KtPz+jt8UTOEOAhHGG0vHPXsSpsPV5Dhj2knr0eUNduD6p9h/tdkvHocc+puO+jGjBiofqPMLAb8bTJsxo09HljgS9o0MDn3KjtyGFP6aKJT1hFS+uNTa9etUMzZs1UWGRF/fmc/6OZMx52IAfwbd5oLMH2d+3Y7YBu/doNDgg3rt9kYLjebb//dqmeXPKUJoybaIzv3lIGUQp8BnohKQt86cfZXgnoIekpDRQfU8sYXnM3uAEI4t6St/fKS3/9G5ZHITZDvZ0JwOcD9g8++KBjcgxmAGgs/gD4wfjY4u4Cej7vjmtDwNfQgR0jtD5+d+uttzs3FdcUQAOw6FAYzf3yy68dk/v22+9LWR4AB8vzwMd5vrd27Xq3T1xv5szZpSkr/BaxxHPPPa8U3E4m5QFdUAA94nnnnnuuHnvsMVcXvvzuiw54Y7FmwG4p6FFoGz+FFgfFseX1h7wV7BD5dwf3a+fn36pfpVi9k9lCWzJba19GW+2LL5Cyu2lf1abaX5kE4/Y6Ft9GB2MKtdeY3YGoQjdX1gFhqrm+6b21O7yzlmb30s4p8yTAa9cmTXnhcf3vqhV1XkSkHrj3Ye3dfljLV23W1n1HtXbbXuuYDmrP6t3a9sMmbd5kOty9Tz8aI1mzyZj6qhV65sGHdG2bjrqpeZG6n19ZXStWUodqlVVkbK8oLkztjel1i4tS35hoDa9mgFcl2tzgOI0OT9BYs7lJUYm6KiJGt1aP0J3GFp9OStJz0dF6/C/n652EFH2aUctNXTt2wxRp12kAvQOH9puijoV6IDvg9chac2PG3qmiNpepbbub1KXLA9bjzzZGMVfFvRao/6DFGj7mWQ0cuUTFAxcY4zOx45PMne0/6Dn17rVIw4Y9raGD5+ntN/caqMlA7Sft3HlQixYvUNXq56pS5T9p8aIFxuDMFdqw0UBtg4HeFu3Ytt3Abo1Wr1zljm9Yt95c3F1atvQH7dy+Qy8897yBV5xW/LjcMZsLLrjA5Z0xYwSXCdBjFLe6KQTQ825uXEy6fe94CkuI7dVVrjW8vJyWLj8Qpoe7273rQAPfw6EK8XIGFh+7YvXi8847zwEcgrvLltgdLM8LwOclFOszl97ADteWAQxGaAE2mJwHr169+jhmhnv7ySeflTI74nbs/5zA+gDR6667wVj9Y/q///dfXXyQzgrWVx7QBSUIcH7QAvGjtri2MFdyE32C/SkZxKDQJkKErtRuENdUSGUxYV3JXUf3aoexPONW9sn0RUrArsP6etwNWpbcQsdiW+qoAd6B6ObaH99CR9Pa6Vh6ex1Mai1ldtFPye21FwaY3t3Arlg/VWcgo7dUZ7jWZXTX6t5XyCicdm9arS93r9HMj1/Wv1a/UBWrVNe8Bx/VwfV7tXEljHyn1m/ZZeRjm/as261da3aanrdqvbmYP5quflyzRuuW/aj3Fz+pKwraaeu8p9TzguoaGBGrFn8+R0VhVQzwItUyrJJ6JSdoaHKKBlcLAd4oY3gjIxI0whjeOCMcV8claEpikh4Kj9SjlSvrndR0Tf///Ys+yqipV43pza8aJ338tdXF79wxlVP+EFro03qkY6x8GuqtyMf7bukOtWk/Xq3bXmHs7nZ16z5NPfvMV+++i5z0H/ykhox+Tv2GL1HvIYvVvd9C9R36rIaNfFV9+z+pESOeV//+j2ry5Hf0xedHtGWjjK2FmMGcRx8xd+Q/DKTO0cLH550Aels2bXafAT2EYwf3HzDWt04/fL/UASKgV7d2He3bs1c33HCDGVEVZxS4OT5QDvAlJqT9IuhlpDRRZmpz1a7R2kCvpmrnFbiFCG675X63vp5rwWco4PkC27vnnntcgi5AB4vDjQ3F7H4e9HBvYXB+pHbq1Icca4PF+bicBz1ifx9//KkDM0APKQtyZYXfmDNnnv29eu53AU7cXFgf8b3ygC4ovwR6PDOdHbNMfCyPjuBUMAbXLkpAj+Lth20I9PgUejXBLpONBnsHWD2THKhtB7V2zE1aZyCnKAO0uBY6GG0Mzz4fTm+jIxnttT+5tYFfR2N2HbQ/oqUBXgnDCy9yK6ew/NN3+QO17775ZrA/aPOqpVqxZ4Mefe1JnR9eVZUqVtb8B2bp8Prd2rJik7Zu2K5Nm3cY6G3Rrg07tG09ndpurbDtsnXGBM2927RyjT5a/LQmNjTW+cUKXZ5dX63/9T/V/sKq6hwTq4Kw6so3EOtonVbfmEQNqB6tYeFxGhmZrBGRCRpuADk2KrYU9B427+vJmHi9aNct+UslvZGYpSfiM/VGvrnwy1bLrb58iksp6LFcNco6aHoCfOcteEO16/VRUdur1bnz3erd51E3f7bfgCfUb9CTGjg05M72HfaE+g5/Wr0GPaXh4183YHxCffot1rjxBnoDpuu117dqlT3b+nUHtHLFBgdej0y7Xxde8CdFVK+oBfPnlrq2uK9s+Yxbi3tLXI+BlhU/riyJ7W3RO2+9qxHDRuqjDz50K4pUqVLJuTjkavnYXlj1KKUkZzgXt3zQC7m42ektlJLQRPVqtVdCTB3VqtFSTRq10acff6f9+2i4VilnOOgxZZBBDFgvbqyfM/trQI88Pdgebm2rVkVuoAKGRywPwKOTYiAD0OM6H9P7NYCH8BtPPfWM0wuDGhdffKkx0gucm/v3pqyUB3oIoMciqEGgO3UpKyViBfshGlIKerxX4gDhh8Pm2h7WZoO+AwxrkAP12sd6pUEXrU7MN5ZnbC+h0ECvuQ7FGgimtJHSOuhoQhsdNvdWqZ10MNa2Kcyz7akjcR3M7bXvZnXR0rHXS+Yq69ul2v3VVzq6eaOenDdXMWERqnJBJc2aNkM7N+3UhpXmRW3Y5uwHhr5pi+nH6Xe3Y3trNm63Tv6gNi9frW9eeFVXtugkrdquL2+5T+3+VEHdIuLUNjxKzatUVRvTZXsDsa5VDfjCozXYXNmhZmfDSkBvTGSMA727EhI1w/ZfTEzV85Wj9FylaD0Tl64ZJtsn3yOZnbsl7k9xcaB31HokD3qhvkm654EnVa/RILVpd626Fz/g5s0OMLDrP/gpDRr2rAYPf1b9zX3ta+DXd9hztv+iho97U8W9jQUOWqjBQ+fpiiuXiJHxjZuOadWKzeaurtHm9SHQq3zBX0wxYZr/6BwXSEUZABzCZ2J47HMcwOPzwf2HHBh+9MHHuvuue9SruLcGDx5sBnRh6SgeU6IwsIjwGEWaAoKjueWBXnpyUyXGNFajel2VltTIxfXGjLrcpfGwmOiZDniUpUuXuucH+AE82J7Px/sl0APsmFEB27v55lsd4BGL86OxMDVAj44E9/fDDz8uBTwAsSzIlRVA77nnXnBxwXvvvV/duvVQxYqVnIv7987IKA/0mLNLqgrsLhhjPZ2g59aIA/RYjWPXTjsSWkB9pwHeEdZA3r9XW+6bqzlhtbQqqaUOJhboSGKhDkW3NFe30FgcCwiw1l3b0FJRqZ11KKG9DiQb2GUVa7993pHQQV/X7qrtjz0tbd0sLV+lY18tte16vfTQTKVWi1K1ilU0/eEZ2oJOzW62btiirRuJv5oXtW2jVpv7tdGAcNP6Hdq6bbeztXXf/6hV736oaUMnaOOC57Ri2nx1rBCmztEJamLMsXn1SLWOjleHiER1qBKpYmN8/aKiNSQ6TkMiY431RWssOXvGwKfEJ2qmfX7ebO+d6HQtPKeaHo/O1JzaTaWPPmPE1CoLtDm15Q/A3d5D+5zCSkHPlDl1+gtqkj9S7TrcqF59HnZTykg27t1/kYHeMxo08hn1G/qUc2n7DnvBPr+mAcNfcgxwyIhF6lY8RQse/9J6FGMiG3dpxYpV2rB+tXZt26y5M2Yo4sIqBnpRmv3wo1bZ29yoLKkqjNryOTSKu8N9/vGHlW7fpawYDX/qiWd1yaTLVeH8io7dRUWxEkeEGUAFZyjEixjBrVI57ETQi0010Msw0MssBb3E2IYGek3VvHFP5WS0VEZqQ/v911yDdqB3QjluVGdKwdCJ5wEABPUZrYXx+RHbXwI93FrADNf1/fc/dCAHqKEv4nrE5Pr06Wf1Gm3fr+uucUzBFMu15QFdULiGWN7gwUMd2JGqwqyM5ORUA6/Q8lE/J78EeozaMu2O4gcuGGQ6JQNNvwR6GDQx12MHjeEd1B636LuxPGbLTF2st1JbG+gVal9SKx1OKjKAM8CLbi23LFRSFzdCeywKhtdVR1K6aE9SBx3ILdZ2Y3gb0jvpx06jpB+WaTsrsBhRMB9V+nq1XntwrhIrRaha1Qjd/8hMrd2+w7yttdqy3lxY0916A70129YZ6K3Xjs3btXVdaBR+5fIV2mjy3ZvvaMFVN+nGdj10tbmhTc+5UAUGaLUurKRmsQmqVyVMrcMTDQiT1NX00js6SgOjYzTEOkYHeuGRutpc4butI37EbPC58AR9klRLC/5cXY9EpuuzCVcYy9uGgdGAqbpTWv5w6KfD2n/EVGK9EoDHTBmWsF/41McO9Dp0vsVc2lkaMHiRMb556lo8VwOGPKHBo2B4T6jX4GfVb/jLDvR6DnhaI8e+aCxwgYHfVH3+1R6t33RQ66yyV63+Uds2r9PeHVu1cO58xVY1JlY5RjMemuXADlBjC6gBdOvXbtIO630Av107rGc0UFy9cp12bt+j22+9UzVr1HExCxp9Sgor7FZ0gsEDhBhUeJgZyC+BnrG8lPh8FbUcrFq5RerZfaTdwx7XoN3LgUoLyjn1Cvo1BfcWEIPlMSJLYB/3lhkKvyamR4IyaSkeqHBtATY/1YzBDUCPtJb33nu/FPQAxCDAlSdcM3HiJAdyf/zjf7jfwbV1CeUm5QFdUH4J9Jo3b+6YLgDn5xr72N7xzITfsQB8iBX+GrB7HPQM8FiK6MBeg7q9BnmwTxMDIU17Wm9HNdcmppGZG3ssoZ0OxxjgsdhnkrmxyYCegV8808+66KfUbtqd0lG7a/TQxpzO2livlw5f84BbkPObVd/r0I6dOrp6iw5+t06vPbpEERXDVNXa/30zZjnQW71qvQHeZm1fZ+xu9Wqt37JOGzat1YHtu7TJ7IpBw1WrVhgIbtBL8+frzhFj1MyYXNvIeLUwclLfvIjUChXUMClFtapFqiAqWZ0S0tUxOlw9YsI1wHQx2PQ1zDq08WGRblraPbFxmlEpTC9Fpuqj+Jp6qkqq5mc2kl56xy0df8y9Re3U29QfePsrru2+I4dcL8UgBgTn6x/2qaj9xerU9TaXm8cCoO07TVebDg+pzwBzX0c/6UCvW78nNGjUG+o75CX1GviMRox5Qb0HTNfku1+V1bHWMZVsk7lL65dr66aVrlIXz3lMSdXTFFEhVtPvn+kSjpmFQULy+jWb3We2u7bv05qVG3T4wE/u88of17pjk2+dovPOqWjuql9wkvXYcJeiS91c2F5igrGJk4JelgO9zJQCZSa3VtcO41Unr60WLnglNEPFGjJt9nhBOUE5cwrr6RHIB/BgeD4RGWD7NaBHrG6GGQfuqmdwuLmA286dux3oUZ9c++67f3VuL9f66WY/J/xW585d9ac//dmt6II7DegxJxcALA/ogvJLoDd16tRScPNMj9je787yfCkH9EKrrZjQgFg6afdOO7Y3FM9DrF40/y29em5N7YssMnbHVLIOOhrNmnjtQgMWad1CS7u75d5tP6Wbc2v35PXS6qxO2lYwVFrylg6sXa8vNxpzM/BbsWa9ubK79PQzL+ovBjYXhsXogemzQ4MXK9Zr+5pN2rnWPKiVq83Vhfmt0R5j9VtX2/fXrNJ6+52txv6m3nmrujdspDqVq6iNdVYtE5OUZ2wu9sILlB0bo9pxCWps9lQUn6J2BnjdY6sb6EUdB73wcAd691mntiA8Xq8Y6H2eWE/PReTo24ETpbXGSs3IWE/mFHRLf1OcewvoHTAFcQPOvTUB/PoNvNm9uYyk5H7956h12/tUUHSfivvPLwW9Tr0Wa8j494zlGeMzd3fwyIXqXHy7nnlxqbbslDZYhW/dvsmMZLU2rV+hDatWaeEsA73wVFW7IFoP3fuIA7ltm3c50Fu3epMDOITZGICeB7/tW3a7qWjz5yxUhfMqK8x6nMT4BHObLjBmw1u1Ml1QG2FqEom2bpqaAz3m5v4t6NWp0VG5GW3Vp8clBnpFBr5WDyWgdzwujgEF5cwqGD2rIrOyNXl4gBkDGyww8Eugx4gtCwSsNUZNLG+jsW1y8DYRcjDA2rVzXwj0wkN5eu++80EI9Ix5wwLLA7qgcO2QIcNCqUTm/pxzzl9cjh4DKMT1ygO6oPwS6PEuEF+C6wae0vX0StoJm5B7ywdrJ9wPgfr9++z4Pu08wguccG9Nvt+qD4yx7Y420CMZOaGj9sW10d7EDjqc2V1HM3voSJKxvJw+IeaX2kUH0szFzeujpTldtLzHJGMm67Tq6++13ED1+02b9Mky86bMVXvylTd0rrmVFapFaeq02c5m1i0H9LZoh9nX1pXG4NfZ57XG9n74Ufu2bNW2rUY2DPTWrV2hW6+7QpnVq6mJgV3mBRWVUfFC1UmMV0aU2VvVKsqxziqncoQK4pLU0Y71MrYH4A03mxsWXkVjwqvqKgPD+0xPL5mdvV4pRSszCvVklWwdm7HEOgF7/p+OaNex0wR6XmehtJWjpiMSBI2Bm35eevF7tW1ziXr3vkf9+s1UfsFktWg9xbm2g0Y/rT6sojLidXUb8LwGjHhOA0YucIsQXHHdo/p66TZ9v8xos9FqYgXbt23Rzq1btNuo9oyHHlGc0ea0xHTdfMPt2r/nsPbsPOBAb/kPqx3AoSimpnHswN4jbl7uauutAEiYXqUK1ZScmKaoiGgTMw4vkeFOIp2E3sFAwDwqGkmwfQO+eF5glK34OHMH01oa6BWpSYOumj3j6RCm2fMz0hj6QBMGBdkGAM9X3BlSmGh/zjnnOIYH0yO4zxQ03Fxy9rzryz7nqRdy89JSMjV75lzt2LpH240l7N11UMuWrtDGdQwubXMdT/euPZWZlmsdRYpeePYVF4ZgAYgD+w6LZPKfEwaf6tWprwhzecKrRyg2Ok7Vq4ZZ52O6sP2fW2wUgbWTgwmj968r4HrSk2666aaSpz9zSmmzcDtmUySP2zZkXwd1+JB9BgxXb9SGO2ZoWQKjte21Pa2tvotqpk8r1DEXtqe2JrXT3gRSU5iHW+Dy9XbbdXsy++jDrB7aPe81YxR7tdHY2+Yde7Rl+x4tN1tjkd+Fi55ybb2qkYLJt9/t7Geb2dNOIw0rv1/pYng7Nu9009H2bd6ug2aTB8093r9tu3Zv3KAXFi5UerUwpVSspDwDOKSGMf3c8EgnNUyPtapFqEGl6hpoLu6IyDiNtb81tnpVDY+trLGJVXRFfBVNMR29UiVFH/0lU1uSOunLOr3M9TPXHpbHcuunqZSCHgbNopgu2dUOHDTdfP7JJvXreYNbDblf/+lq2/Fetes8VQNHPWUA96T6jXhWvYe9qhET3lOvwYvUc/B0dep5rV5643tza/c5Wk1Q/Mcflrkg6s4txvo2bNHdk6eoWpWqruFfd82NjuV5kGPuLQbIXFsADuNjizHCAgG/gvwi/ce/n2uGZO5sZKyT6EhjAkhUhBM/uIEhAXoxscb2YpPMqFLts4FeIitC13MubZ289urQZpC++nx1Keixc/QYya4AHk5LAPR8pYUq7rQW78axjhxvCAPkYHSAG64uKSwsG8+UM4771zUCgrirjRs205effetCB/t2H3IMe+2qjfrhuxWukwH0OnforpTEDGVn5OmNV99xekAnDDARa2W0/WTCDJrM9CwHeNGRMU7nVStXU0yUAZ1JEODKE4COPEzCFnymI4PF8ywfffSRe/YzuQTdbJiosy8ruOI7X3pL39Uo0v7kQm3Kaa8v45rry/Am2pXX00Cwo/awRl7Dgeb+tnTr5R2z4+tTe2h516u1/a1vtXP7IdPRRqcz9IG+sJOFC55w+ko2QLr8kqtd6Ag7Qq9ffPqNux6SsWf7Xu2zjm7nOgPOlau0a8NGc3/X67oJk5RaPcwxulxj5zWiQsBXywhGbSMWXppUC1e/6BSNCovXhOrRGmcMb1hsBY1OuEBXJlR279D4KKyGfqzaUJ9Vbird9ri01f7mYXPxzXZ+Omp1cxps6A+HjxJ25S+fCHrY9+aN0uUXP6we3W5V/wEPq2ffmerVf64DvD5Dl2jAqOfVa9ALGnvphw4IB46YqdETH9Sq9Ue1bOVWrWDgYedurVphxmGgt2vrTq0zan3rDbcYYIUbc0jS9IdmOIUBdt9/86OTH5euckaIggBDzqE0zn328VdKS85SWNUoc1OTFR8Vp/hoAzaTGFOOB73jLlK0A70EY4WwvMjIVGOC5t4m1XXv3Ghcv4tq12ijuybP1uHgaiq2czaAXtCNe+ihhxyDw20F3HBt2QfwAMHQXFtWUwm9hBv3f+L4ix3YffjXTx3Lpt5Z9QaGTTgBQykqbK/IsFjVyK6tt15/z+mEjmqNMQtYn081Kk8enTXHgVtkOPpKdALohRj68XdjIKTceL150CNUQVoKx2B7uOx//OMfddVVV5U89dlTCEMEXXBZ57G2oK82xzbR1rxO+i6+hVYlmoub21MHMruFmF4GycltpOxiyVzbj5LMFX7oZfvuPq36YYN1SgdLw0LYCfq6d8pURYUbi45K1Pgxk9w5Oi90hg1hSwDh2hXrtM1IyIblq7T2h+U6YPaJq9ulsLWyjIXXTkpWttmVB76atq0VHau6dg5pZmSjiwHeoPB4jTZPalR0mIZHV9DYmPN0Y0I1zYuLd6s3f1Gprj5u2FP6wdzHvebo7yWNxzyF0ldUnNriQC9ku2bkRjuDoEds6+EHX1fXzje4ROMhIxZq6Kgn1X/EE+o5aKEGjn5eg8e8puIBT7hFRHsPnqrHnvjSray8cvV2fW9uEkzvi88+14fvfqBXnn9Z82fP05D+g13PHxcT7xYOGDNygvr3Gaxhg0dp+JDR6tS+m9oVdVKHtl1U2KKNGjdo7qRju67uWEJsiuvFsjJylWCVDeg5wDOm51zbiJAhkRqBsNRUUlKWsYUsRYSn2zXZSktvojp126lerbZq2azYGsa+0lgeEloKngbKQeTMBD3PHChfffWVG7kF7AA9XF0PgB4Eyd3D7eUcAxjvvfOBc1WXmdvz9RffOwDEQAA+DGTJwqcd6GWlM0Wvpm649hZNvW+6pj84U9OmztCVl19jctVJZejgYc61pYNLSrBOypieZ3y4ubipiAc/D3we9HB3AXIPeuzjxn/55ZclT312lRPml+7cr72DL9WP0Q20vVYXrUgo1E4Du4PZPfVTVnf3HlrldNH2ag2178Im2pfRXd+1GyO9vVRHftisLz742ojEHuf9AGjojP0pd9ynuOgkB3yEgnyYCHLx7Vc/OBb/1effOd1/+ckX+uDtd/Xu62/q03ff13uvvqG6WdlKMrtJNcKQbh1ThrG6bHNvc0wfjvWZvQF+DQ0EC6tEqDg8RkPjEzQyLkIjIy/QxREX6N74KD2XlKnvohvqxfMzDagXSdauXIwTzLE6OErc8zSUE9xbFhHF2J1O7H5YXeSNV1aqS6frNWDgwxoxZrFGjiNFhfm2jxvTe84Ab7GGjX/RgHC+Mb2H9Ma76/XBp6u1+IlXNHDQMDVv3kL16tRV7dxaykwxFymzhkmOa/RsiROlWuXERCY4BgebgFUggFtGao4iqsc4AejCq0U7A+T6eHNXk8xtTYy1Xq0E+IjrwSIZHXRSLcqtq5eYmGtb+63wTLsW4y9U48bdlZ3eXDff8JApwmDNcA49uMUeXTnzQY/iXajNmzc7Rgeoka4CwBG/a9SokWN47AOCuMB8Zsl30oIAOxgc6xQO6DtEDeo2cSEEOpo6NRs4PRDTg10nxqU6XXgmEcNA0c9Ig3qN3Sh7bjbvNCE5PMnFETPSsh3oBVlekOl54CN+B5D7uB+ubt++fd3znrIR2t+44Nq6kebdJrdP1+dx9bSjZhdtSmztFg09ltFDyuyhQ4lttT2mhQ6ltZfSi7Uzt5e2XjdV2rBH2rRP3332g7413RFyoHOaM2uB7r/nIfXo2tvZCbrCttBl/TqNVbeWdYQ5zDqq5+wMW6xZw2whLcvZZ4NadVTYLF9J1imlGiGpnZGpFAO7VNNFuokHPy81jb3Xq1xd7QwY+1tnNDwuUmMjK+mG8Cqabzp/L6m23q6UrQ/qd5LWbTHAA/Tsmc3IDh4ODWKcDhMKgB6NKGTYtCUHAHZXy5ceUbeugN40Y3qPadjop9R32GLH9PoOf1KjJr3qVk5u1/UOXX/bc3pg+ktq3KyzNdgUNyMC14bFAdISU0tib3FuAAI3xzEAU0x6Ci8HynBGBMgBfsSPOO5BD4WhOBSGUaK0hvXNwA1IM1JSzaCSDUABwjj7m6GpaPz9CKPebpWV6Exze3MMFGsY42hoRt9RzZr1VuuWfaznM4VgPyYHDxxzKwKHCgc98AVAj3IGgR4GBOMjrscMFVZagdl5VocryyAG7K6goMABHkB47bXX6+FpM51ReFCLjoh3nQrGwmAR4JYUn+aMBV2xDwginEtPzfpFyUzPsY6voWPmqckZqpFTywltg6lowcEMgM6DngdChAUFYIQAtmd5wWlnZ2op7x5Z8srNGGEU87m39FFaEwO0Ttqb1E7HjOnJGJ3Su+gIgxj1++lYbjdjfe21unYv7Xn0KW3++AvNf+hRDbIOCr3A6iqeX0Xnn3uhqlWOUNVK5u0YacBevD1hQ9gXxAHdskWXkA6Yd2pymmLCoxUbYe5seqbSEpKUacw8wxh6ptlVZmy8Mkw/mca8M0xHgGCmscHsqlXVzEhGt+hIDTO5xDytewwEX47K1CeJ9fWiEYyf7pltvuweM5eD2rOb13SGAmqnDfSOGKtxN3CULHZv3KWArD3mfhf3uMFY23T1HThb/Yc8rj5DF7lFBpAOPaZr/CXPqN+QqUrL6arzL8xQ1bBUa8ApbmI5Lmx6Upoa1G6opg2aqXbNeqpTK7SOG8uHA16+94mPsUo2JWF0MAzXGxn4caxZ45Zq0jBfjeo3cwZaM7euGjVoqrp5dVSnhv1GrrlfRssJmqelpCvZWAXvEmXBgaiIVIWHpRnIZhvLq2O/V6C6dbobC+2nB+9f6KZI+vdgWAdkbNeDmwc9D3j+uBUq7XRorJwC4BErgvmwphygR0oK7ixbQI6paQT/GdVlC+NjIYGKF1R2OY8YAXXKlg4oN6uW0wm6QDgO0PkBDTokAJIk8Z+TnKw8p3MYH8AXPJeVke3iijA5YnUAG+AH8AF0MECAzjM+XhF53XXXuWc+JYnHv0HxoMfW5xFS3P0z2f6H1XqnVkvtJHaX2Ek/MRsjo6uOpXbUUROWmtoS30o78npqXfeLdE+Xvgo791z98V/+3dq2dfJmM+gEYEMnbNEVArghvqNiiy7RLVv3HWPczFFvaLaEXcLIG9drZPZqNpqVo1rZuaptHllNs6tcIxfZiUnKiItXWkysUqOjlBwRplrhYepQLVwjqke5dfTmRqbp4/Ba+iKhsT7rOkT6/kfrmVlc67C27tpiVsTb4UIj2qej/GH/gUMC+Pbv32tbGE7IwDF+QI+FInr1NNAbbLS5z0Pq2W+2G8ToO/QpY3uPadzFz6r3wAfVZ+CdSslsp4ioPIVHGuhFW6+SmKJ6NesqL6uGbetbZTZxRpCXy+hiMzM8O2YuFKBXr3YjZ0xsMT5ArlXLtmpYr6laF7Rzx727RWyJ800btVCzhs0NTJsY62ukurXrqVZebWMRecq2v5OZUcPl5kWGp6ha1WRzp1hPr559v0gN6vc00OvjYnm7d9qD8n+g6wm9VQulIB70AuUMAbyyxj9r1iyX4sHILaO0gBwjuB70EFgfwAjLcqzbDAKWB3ODHVC/sGkMBgPhGJ+pc/QAGKIz9ASQ/ZwAdh7wmjdt6Toq9A/Tq1/XdG5G5VNrAD4/ShuKyYZiftwvnxnAWL58uUvGPtsKemIp+xMKszW2bNNrTdprV6qxukQDuxgGL7rocEo7HUk3tzCtq/ZmF+u9lELdEW92YSwuwYAmy+rt3AqVDLAy3SrieEKQBMCMLXpiyzn05Ts0dMpndMo1tWs1MDvJVeNGzR3w0UHBzPMbtwjZVZ0GalDH9JxnnaD9TVhgprWdDGN/qebSxkWFK8vup1WV6hpROVJTqifpmfBcfRXeQB8kNtOWu6fJvd3t6H4zmcPatX+3QV4I8E4b6B0nLN64SwzcDgJ6vKPi6qvnacCgBwzYZqjf4PnqUDxLnXvNc4xvwPDZGjl2pprkj9CFVWsoMiZXVarHKcMqDlcTFobUzatnUr+U6TGPE6Hig4IyvJH9GmnRpKWaN8pX08b5biVlBADMNaOiQcD0WGAA0IuPrW10voG5c/3UrGl/3XLLo6HH9pVwvDJKCie9nB3l6aefdgCCS4s7i/iVVwBBmB/nARfnWkYnONDzIQXADEPxgjF5vVDfdEKwbT+45PV1MgleC1N3HZWBJwIIwvi5RxY2DeVUxjrwY9SWnDxSVvzUwquvvroU5GG2J4yEno2FQahdO7Rq/NXaGmdgF2nAx3LxCW10MK29tse0dDMx9tTsq2cbdlHBv/5FuedVcu5mTFKColPTlGf2BIh5fUEKgvJL9lXfiMjfSqijQggh1a9rwGfMr2Hdek7q5NU04EtVbEyU8urWVJKBXsOKldTnjxU0u0qWPk5opveq1dErua2l7Qb0R8yVZ7SMBRjMljzgnUGgd9zFhZkT17v55iUO9HoPeOQE0Os95DFzax9S/8GTlZXbWWERsLw0xcZZT5BGsDq9BPDqOMBDHOCVgJ5bsbcchQSV8kvS3IwIt5l8M4APaVCvoXKMpicnZbhBjLzchjr/vAg3iJGRBivs7Fje8hWmDB7bV0KoIsqUMxv0ysaM3njjDceUiOn56WiAngcWmB5MMAh6xOo86MEIgqAHCHpW543LA2FZnZUnweu8zjxwwvpg/NwnbA9Gx2gtri1MFHbHFpbK9uuvv3bPSKqDd+fP6kI4af8uLb/qFm1jCalwQK+NjiS21oH0tgaEBcb0emhj7T66tYZ5RpWrK/28C5Ubl6jIpHhFZ6Urt9ZxvSA/B3pBvXhd8PrT43Ic+Nx5Az3sCdtCV40bNnHsD+aXk5HpOqPw2GilJcapdqXKuiQ+W09H1te3Ge31bHhdHblrhtxLZlgtmg7qsOnL9Vk4uIjPHDm15VeB3tSpr5p7+4B69Z9WCnpdes9Xz4Fz1G/QferQeZLCo+srKtaYXmSyixGkmf9PjxACvBDo1StRBKAH4AVBrzyFIBjIz0lTWETJPsppYjQdtykEeulKS81WakqOsQe7t4g09e41Si2a99A11z7gVrY5LbX+GxZv+J4BffPNN24laQYqGMgA7Pworo/v+dFQQM/NXy4BPdxaD3pOT7b9JdAL6qo88QwvyPKaNylwkt+swL00iHvCgLhHABvhnnkO7pUt7+6l8LxnPcPzxQWT92j15Pu0PbFdCPTMvT0SX6A9aUXaktRKyumrr/K6qXtsqjG8WKVWrKacmHgHenG5Gb8a9E5mXw3qNjMxouCE/aAYqTA9eTIBMw+FKBobkajp5lJXjYw0+0pSnahYDYtK07s5nfR5Znu91rKX9N3K0IgtmEKcnCww5GgI9A6dGaAH4BFsZXsc9BYt+kyDht6vnv0ecqDXsedstzx8936z7PMUNW7SV5WrZigqJlMJ8akulpeamKDaNXJVt2YtAzwDt6AyaptB1UFCsYXyFOJBzTGCn5HGdc2drd3UKYnPgB49FKAH+IZeDZmoWrUaGWOoba6dSWodvff+d3KZKaej1n/D4kHP5+uRtgJIwPT8iC0AggAuAAvuIyOlDCR50CMIXhb0kF9yb72eTia/BHqkNIUSpdMcwMH0eKGRZ6MMxgDQH374oXs+/7wAX9l45llXCJgf3autM+ZpW1pnKQLQa+UWFd2bWqhtqW20v3Z/PWv7tSpXU1xqnDINXFKqRykuxRh6bqa5tz8Pej9vX+ivhZPGdUPbkHA8JE0bFZTqr1mTFk5nkAsGonilZ2R8vAtLNDQAbPD//7PmJTXX9AtztG7Kw9JWYnngCc9pm1J4CbE8Fs8H/E51OQnoIfjcds4Ov/X2Gg0e9oB69HmgFPRYHr5zr+nq3f8WZWYXKDwiy7E8RoNioiOVGBujrLRU1a9ZW/VNGYBe3VqhXCFAr05d29at/zfKOK6Q40ZzcmmhRnXyDfQM6Az0OIZiXLA8r5ZTCmyGEcKIyFjdeNPt6ty5l6644ibtPRDSQ6jw7F7OrlIW9BghxBVkdNbH8gA/3EcAj31GST3ouVzH+DQHen7ENmg0vwx6Py81c3mBOsF0mKPpvGYjJ74tAHq8xAgW6pOQAUDu8YorrnD3CWtlSfydO3e6QYxgQvZZXQC9Y/t14OmXtCm7q8T7bg30WDp+f0JL7TDGtKpOT02OyHPzYKsnRatGRpaiDABT01OUkpmqmnm/DvTKty/ToYFd47oGbHUMzNx+UDjfXI1KvuOAzzotPxiVlpqlqhHMeIpVXdNZb2s/N6TU163pDc3l+F7uXSA/oasSu2JztoDet9/t15Dh96tbr/vUd9A8B3o9+i9Shx4Pqqj9RMXE1lJ8XI710snKTIddhSshJlIpCfGloFffGrhv6HXrAHgh0Asq40SFhIzL9zLlS0s1qdfSFFNg1xIcL1SLZq0c8IXe0p/j3CYMqHLVKnrzrXfcggoHD1Hp0i6W/XHPjbvE9tQr4B8tPqbnWQ8g2LFjRwdwAB4C4MGeADy2MKjQTIfjoEdaUBD0nJ5Mfsm9bVSfNKKTS0jnIalXu4kZYIiVI+iY10MywkwyNUyPAQuAD719/vnnevnll92IbbB40DtlK6n8bsXaG/Gudz7Qxpo9Qq91jC0w4Guug7HNtCOng97NbacRFeKUVKWqqifGKsu8p7Bq1Q1wEk2SVesXQO/n7KtJPWPfdVuaFAYkZFNeGtUxPTlPKhSqAPTY8ncZrKxQpbqSU9KUbS736zNn6+VbJmvp44sNQvZK+xitBthCFuYABff2tIOe3ciJoEdDQkL+NqC3foMc6HXteW8p6DETo23X+1WjVrGqVGXlkmx7+EyXJJwK9Y6NcgFOQK+BVb4HPQzFg17deicqJagQAO/XgF6zBq3VtH4ro+GtDPCKXJpLQYvW5t6FFtBkFJDl5BOS4jVx0kXumUjRcWybh3Pq4LnZevA7u0pwMAPwu+aaaxy4MXDhQQ/2xIAAbiPsKQh6pDIAej7FwQPerwE92PbPSfMmrZzkN23t9IO0bN5GBfmmp/wiFRa2dqAH08MF97l53N9TTz1V8lShNQMBOc9sKWUHcc6+Ys8C6H32rdbW6xl6vSOgF91cR6KaamdeJ81PaaSO51ZVWtXqiktPU1xWhqIT45UcF+1y5urU+PWgV9a+POg1r1PopCz4hQDQOiRje03rt1CLxq1Md61daALd5xjbqxodpxRzbdOrRejtJU9o704DC/DjqMm+PQ7USISDXjhtYXhHj5mlnXFMjy0Ksf9ts2OHNGzE3epefLsGDH5E3Xo+pN4D5qh919sVG9dYFStGuWRkcuMwqLwaWUqOj1FGSrKBXT0TA72aoZ6+bh3EgK+efa57PBBeViFeiAOdXAqU38iU0LDIFGEG1KKdmyfaqqBNSR5gXefqefYQGx+nl156KQTmJrv2kIvnwc4D3qlXwj9agrEtWBBr6xG389PPPNgBhNQHgMJgAaDHog0/B3oe4E7m3pYHdEGBfSNlwQ/gcwbUzHSY39KAmcGWPLu30OwMFhrt1q2btm7dWsrs2P7TDGK4UmJz3y3Xj4376hjr58UWuVVVdsTla0XDHrox2UjDBVXdOy+wr+j4JGVYXSWEhSsnIUl1A53Rz4FeefZ1nOmdKDC80DbfbKvASX6jQrVq3tblzPopirVq1leU3U9sXIKSqoZpoOmLNaL3mRyD6TGt1Z4RRHHjFzyyM74Q0+O/05G28ofjhh40fCvcnO2Sp8dgxpxZr6tP72vUo9s16tLxKl1y8Rw9seQLpaeF3qjFSI5/GQ1S+cJKLlmYPJ9QxTdTfUaICJSaK9q4YaGaNC5wdBnxQFaWzeU3Dbms9C58ZgubQzjeplUnM552do7fKHCGhFIYbWIUNz01y83xZGYIq620aN4y9HxWjrMGU8zB/Y5JnG3BcQ8CwQD/ihUr1Lp1awdyuPboA5e3d+/ejvEBiAxwEPckEdWDHuCGUWAsbGng3kCOg1xz9xmdAoRBXZW9BkFHLuRQomP2veHwnYKWxvpamr6atHC5lQw8sUgE2xRzmx55ZKYbUPOFuB7lrB/ECJadZv7j7tGyik2lpB46GF2k5bW66qWiPqp/zoXKi0tRYvVEJVZNUrPsRsrPtc4sNVPZZnOka1HP6MvH74IdVFA3/jrEgyGA1qxByI2FmLClYwLg0BX2xPe5lt/gGIuAYIcNzLarVQ830lNR6ckpig4P0wuvvuheP/GTAR5CkAxo80TD75zWPL0Qq0PKAB5iH4lFAtFbNvyk/r0vVd/iS3XL9XP0+ovLtOKHvRo96iI1btzQsQoMitgML5th5LRRQ6tkU0pI8h3YIY0aGIA1skZvLmlwdKisUMlBUOQY+0FDwk2CSRA/gll4kOR6FBUVwdzfJIVXj3IAyDzDv777vo4csodyWjixnG1Mouz9Mq8TduTjeriNxMrefvttPfvss27CPu+VgJHDrpgh46cxAXbUOfWGgdDg+YwEdeIBLWhU/lx54s9xPd/zuuTvtMhvrZYtAL2WBnq1FRuT6F7f6UDP2hCMfdWqNaVvN/NTuRjY+GcoB4gr7zJDm/6qvkxop0M5fbQypa1eadpV6x9dqN6tilTTvKXMuBw1SGmgFqkNVT8hV1HG9FLN3WUmBXUbBLSglNVPUHcI9uIJBZ+5BvuhU0LooPjMed9p0S6wPQgNg4TEiCtXruzCKKzpiI5ohxRCEF7OlPKLoOcE0Nt4RIP7X+oW3exTPEl7tktLv9mmV195xxkY70ylh2a5Iua8MopL2kijhqaURlbhJjA7LzC9xo0MAEuU4IVKL0+CivMKQ2B4jEIRIGeLYlAiW36PlAwWOWCFj6QE3n0br769+2nVitXlgh6Jr55FeLfqTC7BGBeFxsZ9jx492rm0xDVJ6v3xxx8dUBQVFbkYGm4vuiL1AMAD+Ijb+cbt6zu4X1YnJxN/PYIufEfEFmPhuNdT82Z2zoAP0KuRW0dxdFBh0aWgd+GFlXX33X/7trN/ikL7O2B2t8vkozX6sMUAfVyvi74vHiW98Iq0Ya0m336T6jU326jdWPVSa6tFdmPVSM5WdHqyUurlqUGTE+sb8Xqg/Zc9FxSuAdiCuvHCZ87hUXmQ88cR9Afo4S3QgQJ8hCV4Udfjjz/uHg89BUHvTAE+Az3AzgNewIDKAN+uHcd00/X3qcJ58TrvnBg9uegdrVkZemvYVVdep969+rvRnDwzIubyAXqpKZklYGeuqzXqZk0NjGzLZ8CwQf3jlJxeHwHIguDnwY19V9G2j3ESXA/Fm5qUik9b4TovrOwRGR7jljJiv3bNOm51j5mPzCoFPYLkHjwAhmAM6Wwowfv0gDBr1iydd955Ovfcc3X77bc79rdy5UrH+HB9AT5e0uPmWqblli4ygDFgBNQdeqGhsx/UhdcH1/rPXmcc83Uf/C5bbyz8Lt/hM20B4GNbM6+eEuJDq/PA+FySuzEJwJn79zoqC/RnbaH9YXp77Z9v1uuVrsN0pzG6aeb96LOPtOPHL/X9si/Vd9hA87D6KSvOvKec+spITldCrWxVSo5V/cYhYKOu6UTK6outF67zwjUIunadT0nnxDnCHNgiv8X30G15+iUnlvedMIOG0BaDUIRUWrRo4WwKAoGukDMJ+AIxPS8lhXsrkYMMv9ipObOfUERYsjGmGvbw7fTWG5/qhedfV5fOxcpv3kqtCtupTu2GrhEz7zUyIs5NYoaCE7MhaM0Wt5dBDDcdrST46gPmZYGPfYyEykZBnMdIySsD/Mj58oAH0/PfQykoDYbHcka4tyQtswoLC1q2LixyLx+nEMvzq7gCGh44zhZGUXYFWlxe3oX7b//2b24k9A9/+INL/QA4Xn31VbVp08bF9xg0cCtrGNgR0yM5mfqjh6fu0Av1SH2iA3TEMfTkDcp3WF5n6MkbIELnhL6YCO91zd8pXcjAOj4ADyEwHloZJ94xPkAPJsGb2C699FL3bKGFIKRNmzadMczhHyqMFLKw5vK1+uTqWzW8Qpj6X1hVs8eO1KGV3+vIge26/MpL1LtnHzels0ZGjurWNnZuoBeZEqf6DY6nkvg6RwfebryU1VEQvDjGFtDjOnTFlES+x+AWAyXozf+Ov57ZGaxZCctjgIxwCi4uHsY999zjHs+D3pkEfCcHPUoJ6O3dc9Dp5pOPvzTXI06JCebHx6aqTVFnzZ65UEMGjzYQ6ay2bbpYT53uRmfzatR1PTfgBvA1YSpLU+spmjRzGfhMNCf2R5IjhuEr1gMfFYsy2fIZZfrAOqyE3DK+h1tLPI/YIMJ5lItS+Q6uLWuGsaAl7i2ghxDbu3PyXaHnLKegmLMF9LzbR8Oi4OKyTzyPUVom7tP7Pvnkkxo0aJBbeIB19xo1alKa50Xj9kBE5+JBDx1Q/wAW13gj8MDHNmgMHvQwIH6Ha9EVsz7Y5/c8eLp9ayuwfkCPFT8AOlxbD3q8RY0kcwZfgu/E2L6dddnO7kIg/+hPh0yB5jHt3atDr76pDv/2Z42OStCYjEz9uHChVr75uq4aOVJtGzVVrw5dVCM1Q0UFLZWdm6G6jeo54kD9+3pH0AN6ob69UN/UO9d68KP+vX75Pm4s30NfDG6hc5+76e3S65rrWzQvdEyPNkZeJXmxLnsjL8/N8aaT9SSiPOA7XeBXDuiFDMeX4wtqhkqnTl3MZTrPHjJZF1asqkoVWQo8y0Cvq3oVD3bgx+RlgtOAHkoB+DAwBjmYHlW7dk03osjAB4F0KtYDH4rxBoRCfE+EQtq36ewqGwNiHTG+Exq8YMSW0abQUDrfZ4vhsXQSLxDCta1eNUKsFMuCiYBey/wCffHFFyVPFmJIvngFneklCMx+39/3jBkz3NLqBJnpjRnJZWVl6p6Ac48ePd36adQ5Qn3S0KlzjMfrAoNBRzA2BKbmDSFoTOjJMQDrbAA8PxBCJ4W++K22rTuWjrzTiQF0DHQBengJZPnj2sbHheZwM4JL58hsDeKUFA/yZ3sB9Fhj7vCBnUbX90rLVmiC1dW4KnEaXSFSlyfkavHgcbqxqIuGNmyhS3v2UxPrAFrUraus1CQ1qMM6krWdDnxHj1DP6AedeVZNZxXyjELEwoMXeua72ArpXhxj1R2EtsA5dIq+0Cufva5heiwNhlsLw/NJ5STBs508eXIp6J0M+E5HOQnoBYXi3x5/zKH3oEEDVKFCBUP4GFW6MFy1azbTwP5j1KZ1dwOS9qpeLUatW3V0vTjTZFhYoEEDgM8quz4vmK6hjAzrTYwSs2Q1ivEMwhuQ741QCobDMDnvzuAzCmEVWIyU3K9Qfl5HB3xcy/c96MFkYHnko7Gfbj1lbnYN8fpBwO/ee+8tZQ07duw4a+J4vvhRMkoQtDlOfLJ9+/b6v//3/7oAM6CHu0vj7N69u3r27O3q3zdijAKh7mjoHMdA0ItfdJL12AA+6h4DOhnoAXi4yegRXbF8OUZExwXwcR7ww6X1Li7thVgwLM+DHu/lZSohRgWTYAQ6CPRndzlmnq2BHQnKvCxn+w59/9AsDbggXFdHZWnkH6tpiMklsbm6qVkHXV7QSV2NRDSvkafCJo3UuGEjRxrQj2/zCDpDP+jMhxZwV8sDPsAMoMS+eP8M+x700Cs6Ql/ojU6K83zXgaF5b6SqAXB+PjcxPT6TGA+pKQ/0gsB3OsovgJ4f4AhtWQSQ7foNqzVlyp0u+bfCBdXcenX5zdqrbVEPTRh3hSpXijCXpYXate2sLEDNemqWkgL0GjZknbdcq5DQarnkiXl2gbFgOFRqacXacYAOI6HSUQ69EcYXWka+sQM9AA/Gx3kUg2L5LkwG95aYHukrrKrMChE5WXYP7BsV92wPZXiDYvvPwChYuHLChAn6j//4Dwd+AB4NE10UF/dyvTVGg7FgENQ58VJ6ffapT+/uwNi4FsFYMBp0hv4Q9jEStuiAa/g+ugL0MDwPdgCi+xslKU24uGxJwI2KjHMjuAAfCcvE9AA9pFevXq5jKts58Rl9nS5D+i8VYkYsL8UimzC9w0YsNm3UW3fco6tzGmrA/6usS86J1fScQs0v6qOra+XrpuKByg6PNE/K9FW3jnUUDR1poM49OwfkWNUahkedc4zz6MODYtC+0AnnfUcFUGJb6Jvr0Bd6hESw5TfQNwMZ2DadKWwPN5e2hU0R32Mfdo5dBTtnPlMgGaej/AzoAXRGvo+EpqQhx3465D4DfgiNbMni53TTDXdp7OjLNWrEJOfitirsYA02xfXguLakrtBj496GXlgTWosL0GNUFSPCSFBaEPQAN38chfnK94bJSr8MZISmNIVAj2vKgh6xPFxcQA92B9MD9GB9xB4ABYofbfpnKrA/nuvbb7917gYpLH/5y19cQ+3QoZMGDxzm3qmADqhz6h8DgBWw70IEBnj0/DA9jlO3XIMe0A2fMQL20Q/n0AHfxZAwQv/+E3RC54WgK0b3g6BHWyGmFxEe4xgf7hNtB5eJlAgYxPz588sFN47xrJ7x+g7sjC20NQaheFfBscM6BNs7sE+sebb/rQ/00fV36qr4PI05P1Y3ZDXWXUXddXv/oaoZEycW6K3VwBib2RfAhi4QAA4doS+21L23BfQBYHkGj32hK44HOym+x4u36Oz4PY4h/nwQ9OiUsGVGcAE9BjEYyQX0mAlEOOudd95xj4tezgQiYaAXArSTyf4DuwPLyB+xhnXUUPuA27pibW/vniPavvWAfli6Wv36DtXAAcN0YcVqatumk8u2x8WlByeuh9ADxJjicFtIGIaKe4ALKoUtx7zCfOVzDcrkhSis4AHYMa3Jz731oMeWmAcjuAAewrJXvJshOzPHLXQKCEDDP/nkE/c4/yzxIl+Chg8gkErAyOebb75prv39Gj/2Itd5wMaoZ+qcOqa3p2FjSPT4MAdAi3pHN9QtIIdgGFyLXjAMDInj6MyDos8FZB/Aw2XiWlKYPNtDmJUB2JG2wpZZNPXqNSgdGWTbtm3b0tFbDCn4jCQxex2WHdU+4wpM74gxvZJ30+w9tE+HWJWE4zDZfUY4vvlePz6+WG9MuUdP3XqbhhS1U4cmzZUan6zWhW1dxwSjo/6pW4QOjPqGAaJHPnMd+kVH2Bp6RtABOkLP6A3dcBzAIw7rWT0MkK23L6fvhs1ch0SYCsBDXMgqO9uFItAXwDdgwAD3uITGzoTyi6CH8JY0pmmFXhwUYkK4E/t5sQkdbkCm3HW/hg0d7V5akpqSpcKCNmL5afL3oOL0TOTxEaymN0c59FQoi4pHKWypeIyLz1QyCqHiMUiUB1BiRNkZtewz1D00mR2lcd4boUu+Tcl0cT1Aj7ewwfAAPiclK4+MHDmSxzoB9IKU/GwvAEOQHbHu3scff6r+fQepS8cermen3rzhYAiAHPvoCHcHA2Lfd0gOtEqAkuvY8hmw84IOOIbrzAAUusZwiBGhU9KbfM4mQjtJNGaOi+tmZ4RFOBcKI2LUH4GlLlmypORJTpydgf48CJ75rJ37O6JD5j0Bdt7idu7dp8NGLNyyTEf3hOSQscA9W3TDpIt08Ygxyk3KUkJYolpaHaMPwIk6pt2zxRPy0wsBRa7xtgQAevtChxwDCNE59sMWPUEqAE4+cx3i7csBackSbpAG4nmAHroB6AA+BFIBEL777rsnxJwpdMCnoxjoAWRB8VWPQohxmStrxhKMd51QzI5Y+v7QwWM6eOCoPv/sa3Xp3EMd2nfRBedXcr03QWoaNEFrUlkQlnKvVjXSMQwUA6X2ikG8IaEg30tR6YAexsI5WEd6Sq6dx5UKTWRv06qDUxLK53v+RSdMRQP0SEyG7ZG24uJ6prDQPNQ8t9S6LzzrP4urS2OjgZWdunX48FENHTxCl1x0hevVaeg0fuqWDsbnQgJ27nWP9hl9eQPzoEcnxXeoc/YBOx8nQpfojOOAHh0V53mZO+cZ5Qf03BLlro3UK01bcWIeASkrgB6dE1vcqYEDB2rNmlCeJZ3T2TYARWGFkb1mc3vM3uCkrksKmZ0OH7FzR/bacSbw79VObdXuw1v06OyH1atTV3Vs2k41zfUtbBLKqfRsGwHk0BOvgURn2An6CnpTXs/oADtBP+yjK3TPOVxkbJPrvU6Jw3rQY0ZGrVp1HMiRHQDoEYJg2iNkAlbOFvAbNWqU65DQk2+Pp6v8IuiVx3ZcPqWB3J7dJ7oPhw7xPTlmN37cJMfkYHsAHz16ndowPqPhts1Mr+1y/uiNUBCKQWFUsO95PHChEF/xKAVj4zyKTE7INIBEYaRItHFuE8rzBkjyLSNcDGYAepHhUQaA1huZa0tsDwpOOgSDMoxo4h79MwGeT+b1BX0eZ0LSPVOMmQ8e5YyGwQbqmYZNB0QdUsf09oAiuvJGBEBibN6I+D7sm+/5zonzCL/HFsDDbUIvHMO4SGgnrlevbmMHeiwwywguLI8kZZJfSVuBMcAiYA1MoaOzuvXWW91zlFcwrDMdCLGW3WZjfq0f9w+OhpkcNnbQYNCcdTu/14Bvj/b8tNO9N7ZtQZEGdR+isL9EuQUCqG/sBJtAD+gLPVWvEiIV7HOMc+gL0AraF/voh9/xukOn6AvhvOugDPQ8qQD0SPZngBJQoyPyLi56wq6I7RHjI67H/tSpU3lKB3inGfSoZaR80PPFvcioxIU9QVw55kZiPJNo1ixfw4eNdjlX1atFuTmVLfLNLW3cWnVrw76aKDuzvsvvS4rPKDUmDIzKplI9qGEg7KOcYE+E8lBiQizBVqZL0RP9LejVNSNiMIN8PUAvvHqES1fBxWUUF2VgSAywoLi5c+e6WFC5rPYsLrD1suvRUZ5/9iXnavbq0c8NaMASaNjUN3qgHgEzjAd3B9YHY8PNpX69EXlj43oMBxeW73tDQSf+u+jVs4ai1h0c6JGuAuj58AfxPFzcKlWqudgvDA+BVQCADIIxAv3ZZ5+Vuu3BDrpsrO9MLNzdPrMdRx14BMwPT3brMR3eawfs/wP7WfHDDh4zPrh9Iw+mDlafg4ZMUEwC76zNLu14vN2gQwSmh94Q6h7dcG3QvmB07GNXXmfYFzr0+qIj87rEvtj3oEc6GowOfQB4jOLC9tATnRM683FzkuWxrVD6G53uiW3xVJUA0/Ng97eAt2fPPmMM5BPZB5Pdu4xy77XvoBfX4Pz1IRe4Xbt2Gj58pEaOGKsKF1Qx8Ms2ptfajeqywgpvJ8vK4GXPdVzPDwtDMQw6OOU1CfVExOMc6FnlsiW9woFei9bO0HCBY2OSXIIrLjQT1xk8aWbXoWC+x/tWeceqH8wIqxbuEpN96goKYdURlEOPRV4bvRAGdDp7o9+q+AYWLLgZND6Y+WuvvOkC4hdPvDzk/kcmuDojJ5J6BszQAwbA7BYYHvFRGADG4EGPfe9GYRw+NoQhAWyAXnZWTSUmpLkt87BJaWpT1NFNUyQxmaWK8BJIc/Kgx4wMpssRM2LkFh3BHtAZ+7AHz2bRVzBueaYXQO+Q2QxQzRJurL1Zao5mTkcPHNEx3iZ2xGBx51Y7buTk4BF1bNNBPfoNU4fi/qpWPcrpC7thhgRb9IXeCOmgJzp8RyrsOPrCjjzoIey7DsiE76M/gA/ghOHzW0HQQ5eAHku31atTv5Q4AHqsXenz9Tzo+RQW2N/MmTPt4UKlbLjlVBUDveOAdVz+voIBBQcAunbtqrvuultjxoxzE8irVgl3MZvCAlIUWHDAKq0mgxrGruw8c2HZpiSlGhCGFgVgZCi/mYEfgFe/kQuaNmkUSohs3jTfvaAk35ScnVPTFB+pWrXrq1XrdiooNPe3ZaGbCUIvFFpB2ZhKarozHpgeLi6rrSQlMNKUa3Q8yS0vz3XEkG67bbJ7DmJeFDokZqa4gRsrR90bhf45ypuvv6XLL71CkyZeqvZtO7jFGYh7tmndXu3amJtrBsUrNWngzGYhxQg9MZ+ZfQwCo8FYHLM2xoZeYW/MxwbcmpmecGNZODaSRHEzwkamx3wD1VYGuOgZ/WJA6J5YK7qhc4oIizwhDsuL3LkPx9JtHwNjepoHdx8sPxvCE7QiL66ww22fcMIOHDlsAGikg2eyYz17FOvmWyZr8JARLp+RNk36SGHLVs4uqD/0RvgG4COc44hFcmgGFPUM8LHYLu+/4G2CTWD2JR0YoEY4Cv1BWJhDDyOkA+vcrqvaWIdWw1g9iwOzZiZ/B/2U1ZfLjsir7bwqtvx9/vY3X32r/bykxj3fcZ2V54n8HsVA7x8vPjHUlzFjxujqq6/V9dffKBYXqHBBZefq0qPTu2MUDGrwGQZGBdHIMSYaNhXEa+YANwwuBHpmSLx3s7Epp0lzZyi8VCYnN0/VIiKVU7OW8gtbOcBrnt9SNQ3AeNsaoMc8X0APQEMpQdBjTTnAzq/cC/iRv8YabmWLB8Gy27O5fP3lN+pV3FtXXHalhg4epmpVqpcO8gB6vt7RA2BDA0Zf6IpGDVOA5QF6CJ0b+iWOSzpK8/xWamzMHYCrb8AWY8aH1DYAzG/RyqU0oWd0HAS9skaErnwcFsDzAsuYOHGie5bjscozH/B+bfHP4hksn8eNG6fLLrvM5ZeiD7wX6g27KGhR6OoRMEJf1FuIVBjrM52RqsU5f20Q9NBfEPSQ9LQcl4kBs4P9dWzTWa1sexz0CB/VcL+NnrAtry8PdugN/dJJ8fdvvP4mB3j79pzo5rI9Fa7vPwx65cVTWGGhf/+B5no8pP79BqtK5TBVrlTdjcr16N7HuaGh4HUjM7Ac52pSaTR0KorK4a3qMDv3dvUA8IXYHvP+8l3ssEZeLUUZg8syxtakqbnGBoQNGxl1N6ADwJj+xj5LFJHzhVKieINTNAsRJDmwI3cwtPJzzZI8wkxNnnxnKaPzW/Rw5AhTaNzHUuZ3NhcaHnU/9f4HHehRx6w0zTHq2nUuVtcAH0aErqg3ryvcXoCPGCAGA9j5F0azz8rIbAE+JM30HR2T6N6vAOgRiuC30TPGWqdW3ROMyIMef5O/jdHQPjzokcKC2/Tpp5+658FYvNv0exrOqSrBwRgYEc8Usq/+uummm9z8ceoIFgXwtSpo7Y5Rj9Rn0LYQz76oc3RLiAimDksH9Fy4omQZOEAvKzPPhZBysmu5Yz5sgesL4CHog7+PTWFb6IvUMP4uOkKf2C9gS5thf92a9TrKC4KsowoSJkIUXm+/10DUbwZ6KIR9bvjpp592q6k88MCDGjN6gsuyr3RhNUfFSVEgjoOr6/L3rPHTkFEOSqHy+IzSfO+PYBR8Rlke+OitYGnx5p7ychJeNATgwfAAMJJakVAuEcPqCY49eNCD9gN6gCLXAJIAHp9Zw+2bb75zz3bgQAjQ0UXQtf0nsCnX49IoL5owSfdMudcZDPWDIdGYYQMIdY1OMBp6cQRdES9iAAPDAfR8+ol3cwE9B4LG8nBza+TVtU4qwb1Eyi0zZiCLbjEIz1AwFH7bMwd0hq4wIv4+TJBrAGFiRQTNhwwZEnoca4M+Kdm3zbO5eNeP4p8L+yooKHDgN6DfQKcLdAagoCvCFNQjdkJdwdypO68z9E2dY0O4wejJAZ91TuiP+LgHPgYhicPC+DgPEHK9SzGz73p9Yb/oCF2hNzwpOipyYQFjdEX7YYsOR48c49oeJRg7BwB/b739ZqDH1ru5H3zwgQOTK6+8WpMuukzt23V2gEfeFT0HTA/BtTkeKzpuTCiPivQ9vzeIssCHELfzgObdU+J07ANcnAfQADNid8T1WCghFBwPBcpZTBNGCEByDfscv/XW2x2wIQT9/ylArmwx9bFWG+sLPjprjvr06usaLj01DZd3imBIbKl7z8LQE50UqSWkmBBDZQkxBiPc2+5gAbZtYe6tH6CA1XHMr6LCMfQL88AwvI75jBF55sD9eCMKsj3nOhng+SXxaXeUfwaGV17xAEgMk0GdO+64Q5defJnzhHBxqS9sA9CjM4HJUa/ojHqj/tAbIMhx9ImeeDMhXhdr8zVo2FSNGgN8MD6W+6rvFgNOSEwVcXPO5+TWMjA0TyoAetgvvw/glQU+dOzDVtwfQMh9LFv6o3sevMQg2ztrQI8C6CHLli1z+TtMaL/9trs0aOAw5+ICeuTtwfZCo62t3MAEjZ2KoIJ8j04PhWK8eOArG+PDSAA5jAMXlYolr4tjxPO4D1gfwAaQ4eIGgY/J7AAiYAk4eoDEzcV9/u67pe7Zgm4thXgex876Ys90x+13uoZ584236Nqrr3P1j6FUrVzN1TPuLcDHFj2gKwDPNXLTqVsNxYzAGZAJhoJBAGoYDrFbv5gsA1MsFBpr32NUnb+D0PF5/aJvOj6MBgPyRkTb4O9iQB70GBnEvWWUcNiwYaUex+/lGp2OAogHn4el/0mxGj9+vNNZzx69HCMG+KhLBjTopGDt2Ar1RH3SkVGHsD3qD0JQu47py8QBX31jfAZqDRs1c7oC+HwKUXRMggM7gC8tPdsYu9lkPQNN+w1059uE1xn26Dss7skzPtoTgMc90dZ8CT6fB/dgyOy3LP8w6AXptwdAlmrq0qWbA44777hHl116VUnOXqSLD0ChoclUbEsDPhQDyGFEpbE2a9j0IFQO4hkfIBcEPvap9PAqYU6peVk13BY2ACjyXRQM6CUnp4Zc3BLQQ8LDIx0Y4tIClLA9wBP3nO2NN97snoniQQ/Aw839ZxjFZQo1I7g01kkTL3YDGv369C9tuNQf9UisCDaIS4ReMBzqGdaWnJTu0kyYN4swlcylUTRs5kCOVAo6N/YbmWvkZsgwTdHAEj1jEOgI0HPsw3QNcwiCHuLbBue4HiPyicrE9lg84sUXX3Qg8c8EfGVBjymEnTp1UqtWrTT5tjt0yaRLnS6qVKrqtthF26J2pWEJ6pV6BvCoQ0AH+3BhHTtXE3ZNZ2N179ketuk7K8JT4RExSs/IUZbZWhydoumI6wE92gi/R2fpXVxAmBAJ+57EoFd0hg5hobSl4MKw/hk9jvxe+vuHQa88HxyEHjt2vAORiRMu0ZS77lNxjz7uLVfnnlNBCfGpLqbHvFyGzTEqD3r06CjON2wAjUo9Kduz3qZezboKq1TNDClOuaYYtjnWGwVBD3cb0ONdr7i1AF5kpLncjOga2yM2yBzPIPDBEHGRfUzPg9w/BcPzxR7pg79+6OoWdnD3Xfdo/NgJDvAwEBoz9Q3gMZrrg+S4S4AS+XSAHu9HAfgQWB9hC/ItmRFT2LJILZq0dKN9Des0so6pphKjEpVoHSC/43WNbtEp98Ixb0AI9+PbBqzFgx7uLbNpyAsD+MaOHeuC4xT/usizuXhS4Z+Jz+QlMg2PZ2f179tuud11QpUvrOKAhjbfsX0nB3pusMJAzYMedVhKKvBsrM5rlACfBz2AjqwLx/ZM6Miw3dS0LGVYvccYaOaUA3rcg9cZ90EqDW0EnWHfXOeZPZ/ZEpf0I7b+jXe/d/nNY3oUFHTLLbc59xJge3j6LF008VI3rYglp8LDYlyCKnl25IOhHAwLRWBoVBqKoXETt8MAqFTPAHzMD1aXZLS7pm0zE1KVlpCiBAO8uMhY1TYqjqBwjAMww+2F6QF4EQZ44QZ2AB8uL4DI+3sBOu/msg9Izpkzz+XplcH2v/l8VhbD788++Vzdu/ZwdTvtwem64bobHQBWvODC0tgMOoI9AH7oCr0AWI4xG3MmFkrHQjiBToMGTsOua25QA3OJmpkxsTJIYnS86tao7fQVXrm6Euwzv4MBeBcXAdQ47gHPu0rcC0yFNuBcJmN3GD9uLrE9Zgbg/nmwoE2yT+fsgYPtqTKwf7T4ew7GvACJO+8MrWeJazv9oYc1ZNBQBzSMvFPvnknh6roBP9MH7qfPXmAfm4hhebcaNQzMTFemNzp+Oh6ux24gD9glgMab6RISkxUdn6C0HOsMm/FC/VCaURD0aDNeb2w5hi65L09iEPZJaEZHECUwxD/v71n+YdDzBUVwwz6I/MILLzn2xGAF83BxcYn3kOgYER7rhsAJcBe1CtFwWBkNH7DzDRsjBOh8I6fHABTJJaMicWmTDUgbmDuVbWwDQ4qzHik5NlH1jf3BABsSs/iVoIfRMgAC2HnhGbp3L9amTVu0a1dolMnNTvlnKQbcmzducaOAdBAjho10ycrF3XuW1jM6gVkDeBgR16EX6otOgTfc8/oAYqG+08AIaOiJ1ik5MXCLCYtSbkqmmlg7qJWRqxxzb2HlPobIb8Ly2PLZg17QgLx7xjmMkTw9ZmYws4bgPozv5ptDIQk/2lm20E5Pdu5MKz6uxT17QAAkFixY4J63c8cubjBj4viLXD0CfAAaHZMHPR+LxYaoP0CJa7GJPPuN2g2NcOQa+7K2j6552xr6QngRUT3ruCAYfI8OrnJ1s7vMTLVq3/5Xgx7nuAayAth5YfT9/vvvd8/FgreU33sg6jcDvR07drib9YrZunW7GjcO0WTegjZ61Hg3oME6e7i3vC2NdfZwb33sgcoD6GjUKIV9D4IICoMyA36cdwYTnaD6BqB1MmqoyP4ORhVvTA9ltcov/BvQw0Ajy4AeLi5GyygwbC8IfNB3jPn++6daYws9GyO5fnGFs77AVk1uuelWZyj08sT0iO9R/zRgjMizB9xbWB6gBCsgnpaUkqyEpES35bM7lpCo+Gir5yrVlAIowi7st/JSMpQZZ4ZFx2QGACDy+zA7/j6Ah2Hw9zCUoAEhtAGvf4wYkIPlEduD+XjwY05uMN4cLBw/VaziHy1lGR73zL2z/iMve0IfAN+EcRPNa2rr4nrUEXWDnrCt4Mg7dY1NUbe09czcHKVkZSgqLtYtvBEdHmHek9mD1XWagV6K2RJ6qmX2U9PYIKPkYVGRioyPVb1GDX8V6GG7/F3aE/cQBD501rRpU61atcoBvMeQ31M3vxnokWtT9kZHjhzt4jssIMpSUzfdeJtzbf3UFo4zbQbFoRgMjsaPwqhAenPoOkoC7ABD4hZUHJXMK/Ga1Kyvhtm1lVgtWs1qN1TjvHpqaGAKk8hOzSwFPYzoZKDHwAaMBbbHgAcA6YGP2B4BX5S7YsWqUpeWzuifwr0tAb03XnvT1SkNEYZwzVXXurgQ9Q3I0Ghh4+gJNxf3hHrKqZGrtIx0B3pxCfHOcJDYSKtbYwSVz6/gQC/B3Kp0+53GxhrqWIdU16SwoYGnbQEwDAH9e11xLxwvC3qeOfiOkb8VnOPJih6ALq+49GyOdhlkdj4MczJQPJOKtymAjqRr/3nLFmPnAwa4+gLcSDtiQOPCCpVcneHGwsjRFwKpgO0REvC2RVsHwCpXr6ZKVSrbdyIUG25M0b6fZR1TvbRsRZ1fSbXMjlKNYAB8ecYI82rVVHp2lvLqhOzi14AeNszf5O8Hgc/HZC+66CL3XBSeEfDjmX+P8pvF9LhJ35gosKLFi59w66Mx+oMre+UV17pRWx/XY0SXNblQCMAXVAwNGkNjGJ4Kw/CoQNIoqFgqrmXTFhrQrbcmX32Tbrn8Ol08crya12nkXN3amTVMSWYEJwG9sKgQ6OHqAnq4uMSluAa3DRYD6MEAGcxghPfyy68sebpQ8QMcZ3VBfQbgmzZsdmwAtgWg4eZiRMT1fMNFN7A94n8AI0yhZu1aSsvKdIAXFUMHEpKYiEhFhYUb6452YJcUHq2cxFR1LihSz3adVNSgqXVYdVXYvMAZDJ2dH3hCVwj69+4YBuTjUZ7tAXzEhHCRAD1cXeJ6fGbFHN7160twUMODXdlO+kwu2Ja3L2yNZyCuR32hF0bXicXCpiAK1BN1CCDi3qI36heggVQ4+7JOPjI6SlXCQi+LSozFc7K6rRah3JgkNTUPqn2jfA0v7qvCBtbhWadUJy809S8jJ1sZpvdfAj320ZfvqAA+r2/uHT2FXjyfUZpn6Rnf71X+YdAL9pbB/R07dmndug1q26Zj6I1otRu4EdwJ4y9xLI/5fCxG4FZSMWPzPRJGR6VQQRiarzgqiHgF52j8JGBeOuFiPXj7PZpWIotmzNNDk+9V747dXdwoIylNjX4G9KobG3GB+ADw+dgUoEdsit4QF9fFqayne//9D93zMZJ78ODvM6R+Kotb9d+A79CBwy4uBNtCH8SCmCNJQ4ZlowcMhvMwwKJWbVynUMt6+9TMDMWYexQeGeGMh6WFMCAE1pBhnVYnA7sRfQfq9quv14LpMzXjrvs0/a57NWzAEDdwQSfGb6NnDAIm4EMbQdBDMChvSPw9YnoAHYwP4+Ez7/blJUIbN250zxnskD3YnU2g5wP9wcKit9gMdQaojRw+ysVifeoKNkTdAnye7RE+8GEj2nt0bIzTW3JiktlLirLik5VcLVL5ObU1oF0XXTVsrGZOvkc3X3Klrhw/Sb279TBd5SjddJ6SlvqrQC8IfICti8WWgB6LjBKSYEueJXrCjQ/q67cu/zDoeUQOAh6Nae/e/c79Gzf2IpeoCvAxWnv1VTe4WRkAH+kO5GyhCHoj2B4Nnwp0DdoaOEBHw3dU2JRFRcEABvYfpCULFunaiZfrilETdf9Nd+jZ+Uu08JG56tiyjZqRMmG9068BPVzcoJuLS+uCvAZ0DGSEFkrMdccHDx7qBjQAvX+GuJ4HPeSZp551DA7Qo85IXcGIAD3YA8BE/dMx4eK6ec3G9FLMvYXlVQ8PCzEG670zU9OUnZ6hBqa32qbPayddprtvvFW3XHqV6ep23XLxlbr/1jt00zU3OINF57hj/D66ZksbQPcYDAZEW0BoF96QWLEXtxawg4EQc+Jzs2bN3H1Mnz69tI160PBg93u5T79l8fdenp1t2LDBjd56+3FE4OLLHPhQR9QdnQf6oo4RQNAPaJCjit5YAy8jJVVZZle5xsZzohM1uH03PXDtLbp+5ETNvO1uPWLA98Sj8zX9nvtVVFDowgj1GtT/1aDn9QXY8vd9WwLwGHGnk4KtP/HEEy6O6Qdwfo/ym8X0/JpmKCWoGJ+6Qh4XoDdh/MVuOSEWIHDvNjXkp5F7FxfQw72lgnBtMTgqicrEGFEmPViHdh310jMv6OWFT+v1xc/prSdf1MwpU3WnubqtG+arldFyRgcBPdImPOgxehuM6QVBj33Oc50HveCCBTAbXN833njLPZsfzf37y+9H3f/uUgJ4yPffLnWBb/SBy9StS3eXNQ/QENujYaMbOh2YXn5+Swcw9PiAHe/Uxd1MTWbgI1u1cmuovtUdbO92A7cls+dp1n0P6pk5j2n+1If1hunvoSn3q21hG+WmGzurXd/FaRl1R2gD6J2tBz3emUFepWfngBwDF361XuJ5AB5sk3gf6yN6tucXIgi2zzO9BAcyAOlgbBLwJgzh2TnARywWcDv/Lxc4tke7B+jKgh6gVK1amBKTYXyxptsspSUkOaaXa3Y5ccAwPTNznuaZTc2/9yHNuONevfHkc3px0ZPqYK40ekW//N4vgR77CPvcEy6uBz3aDzpjC0Pv16+fe84zmun9UuHVg6A4LiL5W71799X48RNdhbuVT6xBe9CDZRB3oGdCMcTvSJug8thicFBjzqHM/j37akTPfurarFD1k40FxqWogATYzBpq0yRfTWvVc4Fz2AZBWJhHSpK5zcYOiDthqL4HQlmAKYqDUfK3UCQ0nEbl2SLKAnD9emCsFOFAwza7d+7RkUNHHXs6uP+A7aM4AK6sYHR+//SW4MwSYpR9+vRTx46dHfAz+s4SYQA9AFO1anW3T0fAjBUflshMyXBMkA7KN3ZvcABkrZya6tGpmxbMmKO5D83UncYgrhl3iYZ06+Pie82tY2pZr5GL+TU33eMO18zKcewjIQb9YDTG+iMinCsGO8GdJo5IG0JftAv0xd/07jHtCrbzyPQZTkeHD1q9l2zRlX+hH+CBS/V7sovfq7z95jtOBzwzHdGgAYNL040gCNQN9eBHcgFG6oY2X7lyVUVERbo6pYOAaRGSoO6bGpi99dxLevrRBXrsoRmaPeUBXT16osb2GaROTQtcrK+5dVINTbAN7AIww47onLDdShUruzbBZ9oFuoDpYWPYMPdG58jgSKbZZtPGzMvN1IJ5852esB/siP2fjh7Tnl27deyIKa3kM9v/SvndQY9elhUhWOmWmAujaqy3R69MRQM6NFSABcDzoEcjprJQjlOQMQ0MCDBCwVRYq+YFqpOUoVZ59dW+XlP1KmynwZ2LVdy6vfq27+KAr5ExB4bcUWSWGXJKArl+TJMxA6oe5owVRkkD4e8ElcI9cAwDRqm4Efxtzs14eKYzHrcmGJVvcnD/IVMKGrHPx0q2J4AdAuAF5fSW4OwSYpQs/uqSi82tb9WqSBdddLEKC1s70EMIfuPuN23a3OmshdVxXmauYiOsTquFFmilgfswAXVHnZFAXtSilemjrksxalbDOsG0XDXOrqn8mvXUybyARrm1XEeVa8bT2Oq6kXWUGCH6ioow4zQ3LCwiXNXNSMOj7e/ExjhwRl8YHIJuvEEh6JP7ZKDG68nLgX3HWVSwwDTOBteXAjuHMDCQATvv0a3YhSWod9o1HTn1j11xHeBHO8aWIB7OvbW6BPxg7IQIWua3cINQnQxEm5Drap1WffPUaiWkqbBmfXVs0Fxta5kHFJ8a8qTs7wKsdDrogL+N3dD5AXq0Cc/y0BV25TunjDSSlvEekhzbrJVXU507dtLa1WuO21CJlAKdCYB49PB/zX5+d9CjB7322muNGTRxI2usqjxo0CC3peemQmikKALm4Kk6FUKDpdJQHL0EiuKYH9klabJX6w4a1qlYfYs66qoR4zTt1rtcz3TfjbdpUPdeIaUZja6dU0M5xgpSrXJhDx70UAxGipLopfzve0NCQRxHofSQgB8KxPUra0gMBgQ/OznDQS+4ECr7n376uQM12Fy7dh00dOhwDRkyzAEYgzwAH64/LNCNDDYyxme9PQmtUdXN/TRDc3VpoEf+I/WGPrOMDTYwQGN0vUOLIuuYOqpfh+4a03eQLho8QsN793edVAMMzOq5kbEH2Dn6SozHxSUMEWIljp2UgB73VRbwgkInScfGHFU6pWAnhdA+yxaY3+85evhbFhjrsCHDHaDBuIjrXXbJ5U43vm0DMBAJYqZs0QftGF1WqVbVdSJVq1cLAV9KimNc1StXUS28nYQUtWrYVF1atFaPgrZucOOyIaM0sc9g9Tabq2MdFXbB36CTwXY86PG3g56Uty30gl2FvCk8N7yrdLM5BjbznG0+Mv1hB3rOWwroi2P79uzV3t17Qp//C+V3Bz3iJ998841LpCT2wiTpnj176tJLLzWjiHFsjspACcQHPOj5OAE0mUoE5Kg4FMmWz+ThXT5ynObd86AWm9v01+de0fvPv6r3X3zNxY5G9R+sJtYLYUB1yLvLsAq2ik2Kg2GS9xUaJPHC75YVFMnfZ58tSuMY9/vAfVO1awcKOHDczTXx7q3riZxiTgZ6p9+wvGtLgdwwADVs2AgXv2Rlah+OYJ+UHoLfAI1je42bqWmDJmpuRoELC9sD9KgrYqO8yYzGjcTZudb5hbpszEWacuPtmmIu7ux7HtLrTzyrV554xg1y9DEXmORlN/hR0knh4qYlsfpvgmsvhCW8exsbz0BGSE+0IdpE0HXi78JAMHbu9ZOPPi3VEfoiFBGMmdFW+ewHOs6KYs/y/LMvuOeFzTE/msVgBw8c4uoBwOccpIK6YEtdYGuwdsAO0HMMOty8nrAwq7cMx7DbG9O/YsIk3Xb19brhkivcANSiabP0yUtvaMatU9S/fVc3pdCDHn8PHWBLAB6Epjz7wo68AHbx9rcYEQb0SGpnW9iyQN99822Jro44kPOu7QnyXyi/O+j5cs0117i0AtxcXNzLL7/cBS99xVBhAJ3vkaDMKIhzXAPjQ4H+WhTJNJmeRR105cjxun78JU4h7z7zkr57/xM9//gSXXPRpapnjLGOKQTAw711zMEqGdAjThTqDXGhUIh/VwfMIdMJyx/x7lwmzrcsWQqL+cKsINKhXWft2Lbb3NwTAe8EpXg5AfiCcvpLMPUGEHzxxZdNN6G5x127dncgyErYAAygB/iRygObYMGHFo2bu0GIlPjkUn3C8ogBEqymg0iKSXDXAXqPTn3E2PgsvfX0S3r/lTf0xbsf6LGHZ2nc4OEO9NAX4Yh6dg/oK9kAL87YOYMkTgz0YHmAnhvUiGB+MCkaBpCmM96zwhvwWKC2Vh4zPGo7vQ4fOsrpYs+uENvzMT1fGOg4W+bklhZ7Dthrpw6dnf0AenghrJaDHRHbA4gAJfTANegNckECvus8EhNcfZKzR6figMiYNURheL+BeuD2u7R41ly9sugpvbRgiT588XU9dv90XT32ohL3toEBKi/6YhYNg45JzqZ430p4dTIwIBgwPgCPdRgJSWQ4dg7IwfQAPeJ5SIvm+XZNkm675VYHdGXB7vDBQ9q/13QF2/svlFMGet99950bVWPKCStEkE1eVFTkqC8UGMXQE9EDAXaAHooB3GCDCKDHtRgVx1lgoF5mrkb3GairRk3QFaPGm8vUVV0K22hAt55OoOg1rcfPTc80ZpheyhyobNzm9FSYCAMWoeWvWVUCcOMNYW0NUDu27+Kka+ceGjl8jDWoYvXp1V+9e/azhtbVzR0eNWKse3/s4oVP6svPvypVzt7d+05Q1pkKesFl7wE9FlcYMGCQAz1c3J49e2vUqDEuf9Gn9pCsja5I/napQXUbusnp9N7olNFVANIzdUCPOdHMmJk0YpxuuvgqPWhsYea9UzVv2gxNvvZGx8yJ5RGOyDQWksosGQM8mDmgh4vrR2VJcyCeB6BhcHRKJLrTKbGUFSu7oMOePfq4ffSHoKOPP/zMMXTAgnxSX3Bpz7rBjJK29dQTTzu7IQOC5PGLL7rEDVzQCaEPGDAhI+zKu7mEMAC6xFTzogz4qoVVdyGntJIBpJiwCHVu3VajBwzRtUYgSDFa9PBsvbboaU2/bYrG9B2iWlm1DFDznA0BZIAab8vzgIcAeAAh57nW6wriAAi3LeL1sMQcm5qOuriYHse6d+2mt9540zE+BjFwdQG7E23q7y+nDPQot912m1v+h6TRjh07qnPnzs4tAcjYeqUAfr5HQjke6KDMgB+zBADJLHNvE8Ni1KRGPXVoWqiuhe3Vvlkr1U7PVYOc2spJTHdJygg9khMzzqBgILzqEANp37aTunTqrh7dejlQA9yKu/d24NeuTUcHeFwH2Hkj4n2xHdt1db/BUkp8Z9HjT5hR7T5ROaVKOrNAD5fWh6+CYaznnnvBDWCQlsLaiIAgI7YwKwLguEaEH2B4xPTYkhoEC3cBbAM8kl/pqAA9ZsfkpFnnk5ThZtGM6j1I4wcM18g+gzWoR191bW11bHWYD3DVaehCF4AkE90Rz1RwpXCtmSXDeo3oDMZNx4ReOnfs5vSCroL66mcdY6/ivo6lDxk0XIMGDHUB/4cfnqEvv/yy5KlPLGdFaovpjwEZAHzs6HHOfgA95k/D/qh7bAb78a6+q0OzL3QbQ0K+dWC8ciHMdIZusTNYe3piqpKMsbU0cBrSs7+GFvfXoG59XCx2QKdi9WzbRTXSmRIaEpge4OeFt+V5tu3XV2TaKfPtsSl0xz0y2sw9d+nUVX1793NMlVVjOMdLq5hih7sOkM+ZPVdbNm11z0144r9SfnfQC/ac33//vRsdIncK0GNLjIyeCOUAevRWbHGLiD1QEcQBcG8RrmV+oYvjGHsA2OpaxTfOreuC5G2aFqhuZp7aNitU66Yt1cEq2EnrdupY1F6d2nZUl/ad1bWDsTcTjAWj8YIiEEAOAfRQEsfYegNCaVzfrqiTe19o9649nbHBKsYY43z/vY+OA11ZOYNAz4/ekq7ik639ft++/R0bAPQ6dTJQMSFPrmLFSi5VBN253LpcY+g167pOBCCEXXAdbJDODH3Fhkc7thddKczNkW6eV19NTeigWCQCYepgXXNL65uhwB55kz+jwwipFqRmMEqJC8cke1xv6pyOCrBDl153gFvoNZYdnb5CS5i1dsDHFr0iLVsWugTm4DQ1P3p7toDejm1277Z94bkXDWyyrA462PO2dWCCC0nHQ0cE0BEvR0cAH50aHQigFx1jbNA8IRih86hMX+lJaaGl2wzAipq0VNNaxuprGmgmZTrdoccm9Zs674gO3zNsvB9PFLCXnxP0gV4BNkCOuCQzftAvI9Ho2gMiJIh0sflzFxjz21tiS39/+d1BL5hRzkjZY4895tzcUaNGudVf6X1QAMrC3QTMUJQPuKIo3FyOA3hcwzkU16R+Y3VoaWBWIuy3b2GMrYy0K2jnpD1M0BhFh6KOTjq2MYBrY0BXIh2s5/ICe0N46fUvCW+I6tm9r7p36aWu1gNiiLhVRwmVlQBdcKCDmARbRqHOlOIBD9fWl1dffd0ZBakrPXr0VOvWbUpHcdmiE8COFW1qGpNjUANdwfZgei4lomTgidHb2jk13QIR+bwwqE5jtTBp17xI7fLbOGnbsoyuTLyuvL6czgzYfCfl9XQy8TrqbOwE6dLRDMiLgSXASZx5zpw5pSDHZP6zppS0KR9LZqYSbA/AY9YM+whMLxTOCcXSsCHisry3JM90mJiQqsiS2ChuaHZajpNm9ZupeYPmKmjYQq2bFKq96alTQXt1aWXkoXUn8Q5c/6LwNq06uJeBQwQQbMrvB4+V2hr6KwkfnUywJbwudI4H5o8vWfRU6NmtlB1pZzDq5zqsU+Le+rcdwfroUXl1Xffu3dWuXTvrGULrs8HuEIax/bA2gAjyk0nOMeIVACFKpMcnk78swAF8QQkaUQdTige9UgM6Cdh5g/HGcjLhGpTZo2tv97lb557O5UVZr73yZkgxphOfGBvMPQolL5/e4tPRGLX1rI/UFQ+CvLuYd50Q2ysqauuYH8ZCEBxWEB0W5eY4A3htjJkBehgVTJCEdHSIvmBu5FUyRbBLK+u9TR+EIwC7Ni1CgOdBrxTwTF9lAQ/p1LazE4zGg9rJpKy+POD5zgnQKy4udjFm3u3iR27LS2U5I0tJW4LtwX5w/Vj3kBc8wYr8jAmfbE9YiHARRAN7atigaSno8a4TXFRc1aYNmqmleU35DY1hN2qhgiYFKmraSm2tk8KuAL5OhQZypqcg4HnQ8+BWLtgFpDz2FxSnIxNAD2+qb+8BjkVedsmVoZQxKyfT1cmA75TF9Py0EkbH3nvvPefmkrvHJGmoK+4L8TsGKGAHGA60F0D0oIiS2KeX4npWWcFgyhpN0HCCBtTRFIJ0MiV0NgVgOGVBrqyxnMAMypHOHYpta65tp172vR4O9Pr3Gex+b9yYiaWjuz6Hz8UhbOvZ3ukugB5gR2cZHNDwYLhhwyZNnDjJAR4zNbp16+HmWxJPI85WvVI1t1o1cTfcWwDOjRIaQyTNBZ0ChC3NRSVlhRy9TgVt1dV01Rl9AXr2GWlbaLozQKRj8oKuvL6QLmYoXjq3MwkA2s+J15cDOy9mTLjuZBO0bt1at956a+ihrcAW/LS1M7oE2pSfJUTiPO4thIIYGQMauIYAIPaFx0TYAQIB6PECJ17+w34jEwb1cFNhVIXNWzlpld9aRfnmuppgbxAMZ29mV+UxvLLghpRna4Qlfk64B7boChAkFovbTKx2yaInXBX4KbBly8lSj04Z6AUp6KOPPuoGNHijE758187Glsx3J8ESZfzlnPPcFBaAz8f2uIYtgs9P74VBeWV44AuyOgCuPLALGk3XX2McPyPdOvc2ltfX9nFteznQ613c3/0Wb4R//tmXHNPDvS2drWHiXFv2T3MB8IKzMoLA51eInjDhIgdggN7w4SOdmwtYoC8SkgE9BpXq16rnjMvNqjFGyGADnRR6alq/scvnK2zY3M2LbmMMgjnSrrMysCsLeJ7hBUEO6WoGg3Qzg+naoZu6lejrl+REnfUMSZdix2BheuSOtmnTRmvWrHHxPMpZsbqy3aoHu1C72q9vvvrW1TuMj/fLEh8jXobtwPZwc4m7wsJZ8o031vHWM17VSjwO0GPAAWApMmYeFE8yED6XB3ZBcAsCXJBMBG2NMMPJBFaHW4vA9noV93VASFx20sRLTV/rHKMLzqABa35Od6ckpudvALa3du1aXXfddWrZsqUbyPA9EsYCm2NAg9EjtvRKbGF8gCIsgi3MEDDkswueNm+t1k4JoZ6nPSBnCuiEAmyLdG5jIGfSpS1GY8bSvrsDvO4dQ2B1HLR6l0r3Ln1O+FyeFHfrVyo9u/d33+F3irv1cbG+CeMmWU9sCrH//RYpTWc5zaW8RRNwbT0QwvRGjx7rAv6AHYMbjOK2aFHg4rBuyf7YRBfTI8aKrmAWvD4T4PMT3QuMlSMExBls6tislTqY3uik2lon5fXWwYwH8XpDV15fXrp36OEEwCurv5NJUGfoKCS91LZtezfJHdCjPd59993uuWEJZ8NUNGaZeLDzcePHFyx0AxaAHfYF+DEiCuPGnnBvPejx0p8GDEY0bqFOHbs78Kpby9h5/WZqQsdk+gkKMbygtG/T1UmHtt2cdGxHyCfkAXnBE/Jyok74fCKJKCuAI6EjAJMtx7hHQkgMRM2bt8DVQ3CBAkDw51j6KR3IeP75582ARmvSpEkuX48BDZQB6KEA4nbEHIgVEXglsRIgxGgAQM7h4sIkiOlhXPlNC9XCDKgV1LsE9DAaAK8zvYxtkSDYecPBaHp0OtEQYG1/j3iw69d7SCn4oXTYngM+6y2//XqpY3se9EIzNs4M99YnJqMmbLxEXa4AeI8+OtctQgDTA+xgRszLZQFRRtNZsp/ZFsy7ZUYGri364nrm8KIvB4QB0Gtn7lIX66Rwb9sXdjgB8DzYeb0FQQ7p0bH4BCnu7AGsfPlboAvq2Fh6j572fHashxlq584OAP2rD34uGH6mlODUR6akvfPWu+4dJ7BrX/foA1ZOJwXY+bxXGB+rmNfIrVPyHmqzKbOjltYZNW3UQo0bNFeh6amV6QkB9IIdlNPZScCuLMh5PZTVBR3Pz0nfXgPtd3o4F3pQ/2HOptgfPGC4i/GRP+o7JzoqD34/N6vmlLi3jIbxPtIuXbq4VVJJSmbkljW56I1QDMwNpeDeohC/wgorRwCGnCfWByA2b5rvmCEG1rxJgQM+FIViqBBoNoDXBTptW8QDXtB4uluv0bPLiQDmBSBDgsfKk66d+hjADdaQgaOcsvv0HFRqUH16DnBB3vvvecjF9YKjuS5bJaSr0178oAVb795+9tkXuummWxyzY/TW58V16NDJ5Xe59wSbq5SWaB2VMT0GNEhz4BgGxvWM8LKPrhjIQAoaNHPA18n0Beh1aHU8+I14wPN6Kwt0vcyQvPTs3OsE/ZUnQQMLHg/pr497vm7dujngY2CNHNKFCxe6OjgbQI82BPDRiT6x+Em3vh5zcd0ghbE9PkMqIA3YFiPpeFLYEcfq1W2sOrUbOsDjDYU1c+s6+wH0YHrYFQL4OdAD7Oz8cTe2+wmAVxbsgvUf1IG3H9fx/IzA6Nh6AMSm+OyyJQz0iDEzRkCB3QVT5E7G1E8J6H388cduscDBgwe7+AnzcOlVhw8f7pIPATFmRvj5egAciyG+9MLLmvnILBfDIweJY6wfRvb5qBGjHXUnP6h505Z/A3oAHu4rW7/v3FlAz8CuuFNPx/KCCkA82CG9egw44Vx5grL79hqsEUPH2d/upP59hjrWBy1HUTA+Bjb27TnoQC84Ze1MAT1fvEu7dOkyl5MH2A0cONhNQcMNbNOmnWtkuLYkJ9MZAXbE8jq362TM2Vydth2cwbHyNLl6jvWZflmYIN+klemLJGSSkbu362xs4XgQHL15hlcKeqYrxLE60xniwM7LrwS94LHj+rNz3a2jMsCjXSIshMG88LMinkexNsSoLeseQh6wJ1JV+vdllLOdi5nj3gJykAri5HhRxOyIk/Humhb5rdSmqIN7cTvT9YiZMaDBy9m5LpjAT4yNUXMGF2BgtP+yDC/I7E4Gdl6CAFee0CYG9B1i9jXGAS32xL5rKx26WifVR3fccYeriqDOALzfdSADdA0iLH+MYWSOgb7ESehNCRTfddddTphK5Eb4DLCY/pWdkecq9cIKVdwIzbKlK4yu79PG9Ztc7pFfbWHn9h1avuxHvf/eX52SGXrHzUVBVAIKYaQHwMHt9cFS3/MAdCjBG0tIKXY8UNEYgxd6lF8SeiOUwdbvA3QD+w11AiAv/XZ5iN2BeaaLQ/tLwO80F+qVJXtKB1aO/aQxo0arXZu26taFtIGOatyQ1z+2sg5nuIFaO+ugWIEmVZUqXmgdFOvW5enuu6Zo6Xff69FZszVp4kX64fulevCBqXr+2ees45qh0SNHqVO79mrWqLEK81uoi/1u+9btnL48a/CB7pC+QgMO6AYpPokEO6nyhI4rKMFz6JeUFdKnSFkhpoeby+fVq1eHKugMLRi1YzL2/+uvvmZg1EYjh49wemL6FiPr5OphE0z9glQwJYz5r9jb5ZdcbaTiVbcIA94W6R8vPv+Snn7yGb32yuu6Z8q9zrb4HeyLODpbEoUZFIGYMPsoNCjx84AXBL2/Bb7jtlae9Os9yNkT+9imtzn2sXNCL3379nVpcUEMovyuoIcbEHQFgr71tm3bXE/K6irjxo1zaDx37ly3Jj65XEwMp5FTeZdcdIVR7mzdevNko+v2e6bQ7Vt3uFUjdmzb7j4z+Zh0j107dmrKnXc514mRXNgEqSwoAvYHHadiPOgFFRJSBL1MKKHYiwc9xFd6ENzKkyEDRzigw2AxXH6H42z5DPhh1C8+96oDvL27zH0sAb/9e09U0ukofjK3337z1dfGEvo5I7r+2uu0asVKc5d4kXS4GQEr4dRV/br1nHHlNzM31vbnzZlrHdQu9/3PPvnUGPklbt9NCDcQ/fLzLxwI1qlV21ggq/fWtU6qvv1GkYHrie7SyUDvZBIEsfKkPMALGhzuLWEXOmVCLrRVBjUIx5ypxQMeQqd1w3XXm9dTpFYFhfrw/Q+0ZNFi57oSs4MMAHIQCkY+a2TX1m0336n1a0LLogF26ItVgQ4doG2GfvOrL77UkEGDjVjwzlzmNtc2EO3h2gU6B1jJA/y1oHdy4PtboAsK9oN48MM20Ts2R84eg2voi1F3Cvjiwa4sCPrym4Ce63ECJYiwn376qWtQuLfz5893x8aOHWvuESsYJxjlztHFEy/XReMv1bVX3eiGzAf2H+JcQceIDhw25jFWP/6wzCkpKByjN2MoHsDDiKDlzIZgnh9bb0QnV8iJRlQe8P2cBL/rR6PYd0rpNdAJIDhn1gIHdMfoC0pAzz3H6S7WyIN1+vC06Y7dIW+89rpj1jR2VqVheacaObmaOH6CA0KMhWWB/vrue+67MMbvv/3OjKvnCb/pOyzYHoAH8MEOGYxieph3bwE+Oo+/B/SOG0/5EgTAIOCFjK+3c9kJtXj3lsUwWO/xnnvu0fbtdt9nWAkCHkJnAgDBzAE/6vnmG29yNkH8Dpbnk3qvv/YmZaTmaPyYSaVtENeY7/E7pTqzNnH08BHNnzvPyAQvDC8wYlHLASDASmfHwgDY298DesjfAl/5duWFmDhtAhvCpoKg17/vIJc6RUjiww9DL+wiZ8+D3e/K9MqWIAjOnDnTITGrJy9dutS5u4zgsm4XI4D0QoDdvVOmugcZO3qCwqpFau3qDaVK4MXTn3z0sVNE0EjpmRbMe8wZj0uAzQ/lFjFHlpgDBhVSCsB3PMAaVAiGVda4gsD3SwI7QTn0RvREfEZRsBcMl8ArbNAzPS8/2aO4gY3TXUrqEqF+x44e43rzgf0HaNuWrfr4w48cKwOsGtZnsnoNTXvwIfXu2UvXXn2NWAQSxg072LJps1avXGV138kxB1bE8GEJ5NOPP3HucRNzcRs1COXwoSuXCtGqQ2ggo4Tt/VrQCxpReXIis/NgFxK+j3tE+/Sgh9BJMx83uNbemVCCYMfoMvL5p585MKIzwkaoZ8ITxO+Y1cQMC/LZmMFw5eXXuPrNyazp2uCBfSHd3HrzLU43PszhQx3bt27T8KHDHOgBfjC8ghYt1bF9BxfycHNkfwH0ygPA4zr4W3sqK9gU4r0n2kXInq1jNPeWdCrCEm+//baro1+js999IOOSSy5xOXnMtYV6clM//PCDy4B3mf3GzAhMvvvWB24g4sbrbxFL0ZTOrTMB9IjhoRQPfBgVbi5CT0Xsgbw9AumkvxB4Bfh8nKi0ogJKCUkoSdULvSLiEyJ/SXAZcKnpdQb0MxpespoHv8XfZ6mjwQOHWU+6vPR5ALtDB6wXAgBPd+GeSjqSrZu3GDtmkjd6uMEdX7dmrWN6sDzid6x7NnvmLMfyYHz0+PT8foYJhsL1wc7JCyGJRY8vdAYEY2BUsWV+K6erskFyGnRQHyeT8gwlKHRIwc9BwOT3WRka9xa2N2TIEJeyQuz5lVdesZs+c0p5gIcsfOxxV5eA0aYNG109P/3kUy77ITSnPcflij71xLOuXq++4nqFV4vWl5+FFuhErrz8Cn39ZcmSaGX09sVnn5tuWjlQZcvyTwh/j/gev3mifYU6K99h+f3gMSSok/LsysuwISOdTXl7Yot9MR8XT45lz1i8ZOXKlXbDdstWPxTq5mTlNwW94B9in3m29KKkqFx99dWlN0R56aWX3HsWWHIGZrRp/TaNGj7OMT0ysUk8BBhwcVkyB8YRVEZwcUGUTa/D/EICrFB7Fv6kkgA9D3x/6+bavhmXNzAv5RnXyYRAMd/hfvkdDBcXHePlOIA49f5p7j55lmOEPgPPcdqLNXL37gHbEscBxDCiZ5562t0fnQuBctgEi0sCelPvf0DvvPW2PWdr57JWOP8CxxS4fsO69dZYu7vf89/3+zA/PsMQiROFGATvOw6NDlJvZN1Tp9RlefX9N1JiRCeTsmB3ghGafsg7JJbXtm1bB3bs8/5VYkRnwvzbINghHuxw3ZArLrvc6YwOyA9K0VFdd831jkkzuwI7WLNqvetgrrj0GuXl1HFbz/QYAPH684KuXIzP9hmc8rFcOiwYP4NcDG78EujxOXjMHy+V8nQaEEaSfXsABL2dEQt2nWbLQkesfPEu7SkBPf5YcDCDBvPjjz+6RlRYWOhyn/x5vwABL51hva06NRvo80++1tNPPO8ecPTIcS4WATsipkfeEcHwoFIQD3oIcSVcJ1xdEjPJ7yNHjN9zEgC+oCKoQC8e9BBf6cFj5QnumZ8fyD6xRAyYEehrrrpeH77/iXZut+ctuc9grh7JpKe7+DrEWF58/gV7jk6uceOmuvssAawnlzzhXBrc23Fjxmrj+g2O4V00YaJjgXfcPtldx8CHj+k5MOU3ygiDHaERxmzHhF3KUcnCrX45IvQRbPwnk6AxlSdBA/PHvP75G8T0mHtLx0wIZsSIEe7dq8EO+nSWnwM8BLBjEIOOxNc3OmV2BgMNhI/q122k5ctW6c7Jd2vY4FEuBQSiwWsOuH782HGO0QXtyesdwbtiFWPCHIQm6ADxBrCxXwt6weP+nJNydBoUQlRs8aRgd5AJ7MyFrjp20Q033KT333+fqnLFD6D6Oiuv/Gagxx8LTgXZtWuXPv/8c8f0eB8qCw1wPrhu2Ztvvu1iDjmZNTVj+qPaummna/CsUIwBrFy+xpjBIfdaO0YVUQCK8cpxLMK2B/aFlv8G+BhOJ7aHMKLre4ryQM9JAPQQD2a+0oMAV57w2zBTeiEGYIibPDZ/kX78weg2dU6HY9tNG7a6fdieO+7lNJfSmJs1cgLXxGt4R8IJgGXnYHAwQACxQ7v2YiXbe6bcbbphrboi9e3dx/0WxsPnoJ5gDN799ccYZWRAg9F3v9oxjfn3AL3g57K6Z0053CPSHlheyrtJvmM+3aUs4JUFvX59+jqdPL7gsVDop0Rn2M1999xv9dtcrCz9zFPPuzYJ2AF68THJ5tJ+p62btzm2jt68jrAnryfXPkz/dIITxo13bi7ARwdIytjfA3plz5Wnz7JCu8CGsS+8ABZCAPzuuH2Ky91dt26dqyefo0edEEKjnk5WfjPQg8UF3QH+KAsL4DbwbgxfUCCACABu3rzVxcHI/CaIDSj89d0P3UgTcbAH7ntImzdusQpu4oysVAklikUxP5m/eOQwwUseMhTYJfhKNjqgB/PzqREoqBSsDAQZbMD9ZCocAl0noZPFC4kPsiW5lmP8BnQ6NOJI/Kmd/WZ79xmXmpcsMxJWFtSCiwywvJSbNsStlhw77cXuwb9ZavJttztgGzxwUGl9+w4Fuf3W2xwgMpKHO/TRBx86ZnjTDTe6Oidmx9LeACexPb4TBE9+yxsWQIghUZfoiYEomDn1DENhgQlmE9CbswowW4TkdEbs0Q0dHACJQcCs3aCIdZYcc6PCRR1c3AcWieEgHOfYRRMucfHjZ5993r24igE22iZGc6YVbAXb4v6CxOKdd96xNlkgltKHebul1A2gqGNWXiHHFdAj1ENnzLtBmMo1dtREN3D06cdfuDnghCmI53rQ9ICH7oL647WMV11xpdM/gj1gV3g2gBH2BVBR/9Q1dkb8jbAFOoAcYNsc89eSXoYevQ1iV6Hfbe/0DHkhdIXemXHCNLtVK1aX2pnvFP6e8pu6t8EGw9Dx9ddf73pRBi08IDIlLag43i1BYLVZ45YurkdvRFzvqiuudY34maeedTSaByR9wueDHX8F3DHt37dHx8xvBPxQ2MrlK+z7V4uldDAokiqpeBREb4EwioVyBvQb6CqZXgsDZCkegA6j4jhKAAAZKCGTnZxAjJJrCRTz9i+/3D3vIA2Cml9UAOALgt8JcrpLiRtD3RKLw4V5bP4Cd6xso1+29AcXxPYjtpy79+57dN0117pBDmJJr778iktn4XqMz8eFvAR/D3n/vQ/MIK9yoOeXDEOoewLlAB/1jQ4BPY7xmQErDIPO0Rsd+vXAhmGx5TjncfN4NwOu3gXnXegC5A4YNobWZKPQRums2QY9ktNdsKvy0jAWLVrkOilYV7BOvbAIwc033uaeHbbHMbwpEuavv+ZmXXHZ1dbxrLGOopXTv/uetQcPfsG4nhc6LpLN+Q4ME5ZO/fpBKOrfsT8T7AtSQafEeTokQhl8BzAGCJk5QgweYkMbYItdEZ9HiEvyzutxY8afcB/OnmhKJaD39wDfPwx6Xgll6SS0k1hJhw4d3Np506ZN04MPPqiJEyfqyiuvdDG+Dz/82Cj4VCUnpLukyQljL9bVV17nKm7ybXc50MMQWC/fgx3i91HO4UPQ2mPatnWz9u7hJS/cxzHXczEUz4IFgBYVitDoSdiENqMIKpwUDSg7I1IYNfEKejJAgHgVQDDj4UecQROPIqcJlsL26iuvcrEpkndx6zwzWr/WaHfJ/XpgQXDJgy7l6S7UIfeM+wpDQ958/Q33mXsE6EhFYZ8OBZeU9wXzrByD8Q3o19+lSRDrwwUivuQZnRe+60HQnQvUCbl9fIcgOQFzmAc6wZh5YQzH+Ywrh2742xyno6KNYHQIQW6mTREnJun9f/3h/4i3ozH6B6vgWJVKvB0sTX/69//U66++QRW4EoxHU3CXfs5FOpUFg/b3EjTym2++2dgTy0G1LmXWK35cXuKqhoALN5CX9RAjf/P1d7R6xXqXO3rd1Tc5O7jtltsNrNq7doB4nSCO8ZWAYPAcbZgEaOyD34Wt0cGgA+rfD+TRCcH2OI9LCuj5c3RKgCHkgZk92A/CbzK7Bxk6eIjO/8t5LheUGUC8JAhw9kyU/M9gfSC/pvzDoOdZW7AHopCTR3CYQQy2jIiREsALmwHBunVDL5Sm0TJNKyu9hovtAUq8SISXt9ATwaSguN5IeGB6oOPr0YVADtm+bYs++vB9LXx8gfUyHcUbz5jLCwsjZ4m5ov41dBgAvcrihUs0/aFprlJ5JeRfzjnXBe3/449/0l133OnADvcN98Ernb9NhQOsNAAoPwqreEEFBwDeNWTL/QYbDEpzbojtO4A83aXkvhbMm++MBwAH1Eg7AVwYrWV0kCllc2Y/6oCH0bvqVas5Y6GzAAhhfNTf//rDH44HxU1nmzduOiEkwT715+vEx2UZOSa2hPtM3AjAgz0yygvokdcH4BE7pI75TECdjgyXyTM9ljoH5Hg505ZNoaTodWs2urefkQ3w+qtvOVAklQNPgCC4z+06WQb/mVawNWKOJFLTSV1w3vmuraOHhLh4V194MMjE8Rc7YCJLApbFAh14VcOHjDaXcbRbt5IOhXoKdlSEKoIdE4Lu8LDQHTq+7JJLSxYDIYeziXOj+VtsAT+AkL/PIATszl93yaTLzTuK1/ChI5yeyQnFdcaesCt/H+SJEkKhvYVVq+7aBu3E3w/X0Rkgfw/w/cOg53ugsqBHhjSrVjRo0MC9EIiYyYYNG9x7S5mClp2d7Sax0wDJz0tPyXajuIAgdBwm9tDUhw1MInXuf/7FPTwP6plUqRjYrVm9XHfdeZsGDeyrOrVrqmKF85WWmqyU5ESjxpUcIOGaskqLX72FidWwQJbXhq5XqVTZ9SoYLXNI/+1f/5+eWLzE/Y0P/vq+UzQsBcXDNFE+ggGTvgFI8opC3tfJHFWADYPmfj0IlhXnOpzm4p+LtASYLgyK2B4uKyOsPA/AQ+NkKhJMuH3bdqWsGANjH5eW56YeLr5oUsho7BmDgHeCmEGRavTUE0+6PDFcJXRQrUpVZ7j07gArHQkGnZKU7OKGtIP77rnXnT/v3L+4To2XXf+vP/xv66yecuEQXCEfTiD240IOtk9wH5eWyfkYK+2BROSvv/7abig0+ObLmZaYHCwQDTIjSLEB/KmPl198yc1zpl54ib2foYQtAUCAPLbVsF5Tt5IKgwlkF0Aq0B9snvbs27gHHs+qOMZgIp0jiel4QOiJemTJN4S1+qhTFg7Btoh3L1v6o9MPdscLonBVn3vmeacvmDaeE22PztHHJLEpbAwQ5D5IkYoMj3DtID01zXkfrg1xfyWg9/cA328S0/N/JOgiPP744256CJO3WTjUlwkTJjimh7A8EdS3Qd0mqlWjnhMUBNuj5yb4yhQ0mBpGRe4YtBcjuXPyHerdq9iBW5XKFZScFKeE+GilpiQpJztTVatUUmxMlOshYCD+xUJ+LTHew8mKE4z4kpALu0GJ5/z5P92MA77HMD3KpsfxlYwxowy/hQGyAAL5UrhmTK/CcMljKmWjJg6sgz2n3z/NxXciuOncMzMy+IwBkMJCneDew/gAOFJWcP0BQT4DfBgegx+krVDX9Mg8HwYD8LOlLggJMNC0eOEiN6+TADzXV61cxXUYgCrgR+MG8NAJ1yAAHIyEeO0lky52ho2Bo1NvRM8+/Zy7d+aTkrLBazhx8/yWVyVynpWFuR5g4OXWZPS/+uqrJTViz753769iDKejYNyA3muvveZSbAAs2h/1TB3Dhml/eDbEPUn+J4yDm086FXPSsTOm/D34wHQRN4MpohM6QICHNoEwKPXu2++45H86PvQB2KUmp7j65++4lXYM5FhbEQAF1GCPACCpYx++/5G1jSHWoVV1xIPrXnnpVf37//ujkZpQ/io65W+XMs2StuPbJlkF//7//s2RF/4+bdFPfTxqZAspD/hOpsPfBPT4oxTvHrC95pprXI4eU86CK1Y8++yzSk01SlyrlnuLPgsMpCZluhFceiCXt1cScEZZd06+yzVskB4ggklQ2SgqPKyawqpXVUx0uCpdeL7bJsTHKioy3IEhoIdRYVCAngc+lOR7JIb6MVwqE1aDsQGqGC4T71GEByxcUw9kKAmmwjlAkR4SxsgcVdwuGgXG6eNhiHd32S9lQKe5MLCA0dCpUA8MUHBfgDrPDsjRu1KPuE+AHYIRcA6QgoURUGcABHcXxkxHQpyOlBbifcRn+H4o5BDhAIv6xoDY9/pFMC4v6IM6hQUCtqS68Df8XOA//tufHMPDGyA+BcD5d0Yg27Zst3oP6Yy8SF6gs3zZCs2aMdvN3ElJSdGf/vQnx/gYxfVGRDkT3F1vuH4LsQD0mN5JZgQdlWdEPOPcR+c4UAD0GA3H3cSmADxieIAeLi6hJNxb7Iv6R/cwe8/eGRWmA6cdo5OsjEw3gEUHRd3zGd34lZghEoAeXhSvkMS2WPDgg79+6OqZBRBg5X/+039a53inO3brzbe5e+beaYfYETbGPuLnbHOMWSa0JdoB7RFw//br4/pCfi3j+03cWx/X840EN4HpPIza3njjje7Y5s2b3XkGMnJychzoMYiAQggsp8SnWaXWUGaKub62TYxJcsHPCaPHu54iwioeI8lISXW9fqrtE4cD3OJioxUfF2OgF+kALyK8uqsclIUxoTiUAOCFABR2get0oTMcrqGhoFRiesToAEpiTFQ6AvMBCAA5AIstFNy7rrjEND6mBXl2xD1g+J4p8p3g6KXbP82FBkc8hUYOkDEwwbP6e/TJypzDCAA4gIp9Gj4xQPYBImIzuMYekAC4CytUdIFqOirqmXMAqAc0fs8zPs5R7+gLYZ/jvjNi5ofvWHzs8S/nnOcYA1tmIfj7xpUldOHfCbtuzXqXwkH4l1FN5P9r786j7qyqNIHb3f/06lpVraUoCGGQeTCEhAiEkIQMZABCBMIYCEPCPIQhIQwJyDzPiiCCMQwqWg6AQcUuBRS11XYubBwatZTSQmvoXqvKhfX2+e179+Xk8g0XvsCHJGets947vsPZZz/72fvsc87f/fCpSKeyAhBDLNOA26i8VhYboF/1kQ7RN2vImTq36LTTO8+sP5rmZ+aMxVylUol5trZheGfomlFcszTEPnlTDAXZkYH21bZeIxX6rzYmN+1PHs7tPZmSL/IA+FR65X0uVIr12aPDYr9AkQv81re8rbny8qvCSC05+5wgE/SAHqlIhf6XMXM6pyIZX3/ya2FojRwLewB8JCJrgmW0lfO+XNAbCDGjtBtcdXMuJnWB+yIgjUkFqymfG1lKS+/mVXsrzJ65bzNl/JRm7pwDm1lTZ8QS5BN3K0xi512bE489vjnu6IXNuPLa53bJH/3OnWL3dZvSsFLbbVcUbIcdonq9zTbbNNtuWwSx3Q7FfSkKVeoWWxRlKnXzzbdcraLb3GcTtAmH8HQYApMUnawhh8gzDYWrhEH8+le/ic9SqRwvv/SKoP3SXNZ781tjbbK6nSSEOkasabhLuQ+xIEwNk6qZqBHBN/7Vfw/31ewL8mqx5m3CFSVL7pE2Y7mllxhpF8sROsAAfMetYWwctTUGQDF8b13FrbYil8IUNt00qtdbb936brPNihF7xzvCDSXX7bffPtjZTjvt1IwePTrYxeKzlhRDuF5j20P3Lo5HbmQU8oIX5fP/87NnAgwBnlwv6Rqm2GXMErhSpGTwOchCkfJ1p5b+HMehlvqc/dX2tSi+o/vDzA00CcHk56owA9DC1sgtZZYLEKj6OSCU+mMwQZ5cbhjkO30XSJEVIPPakfz8RiU7bU8uqlh9VvLLSrb0UjiL/MjXhAX/saiwe6ZbZEI2+Rzey9HF3PM1mX3rf367kcLmfrHKWeU5/7nNCNXn24z339qDhZ1alZ5Br1/gKx9TkEDYNtoK/BtKR0NR03TlACDXx+eEQSijthvZnHbCKc1lF17SXHPZVc38Q49oRm6zQ4Ceesj+B8VO94fPPbQZu+OY2GPV55uP2KzZZXTrwbfeughjh+ImFaCzXBWw85mVe7tBrxv4MD5CBFAaknC9F4OgwO4740KYAwHkBiwU68t/+1gI659+/88RsEXZ5ZPlctw6l86z4u4Px3/S1erk7Q13KfdgKSKj3UZv61Fqo9fYMuaKzQE6AEFu2IF4EtADcJQF2OXudvKrKIl0IRae4rD+2kIFegARuFEMSpCKQnG89znQ85n3NeiNGjUqgE/8SMCecbGdqPu2OxiZkZX32F5WRsn33F7urhjW+993WzAYrNOzcscBDeADKEIXaQxUfTxeA6OhlvY5B6quV18TeTDVj5H63KpHOvol/oaRYeAYmtFvrxk0o+5GvYVePCcdJE+AR2YyJMiFTPRbMiO/+jX5qV77nd+Ti9of6JGvZeQmTpwYRuztb3977ILoaOFW902fVDJBBOgI/SBDpILuyYH12x9+/0fBEOXL6nfvGjW6OePkU5v/+/tCuP74gowa7K/dLlGr8pJAr0/gy5NWVeBR0NlQM9cpPzciiDlwS1lVTAFzA3rLzjm/WXrmkmbOrNkd0MPu9thl9+a4oxY0c/c7oDlw9v7N1AmTm6032zJ2y9+pACCAspu+Cuzsvg/MgJslzRP0+gM+8QeNh6kAPe+xEgzQ4qXuO4EqK4DLoPgTj32luXflfZFkqYPoCM5HqZ0DmHKjJVze8+F7O+dI4Bzuwr0Ve+TCLmq7SlgNV4kM090EClxWQGcFFikqK1d8OEAP4Gk7bSiZ2wwKicPaA/jn9xlaIDNtpK0Am0o5gFqCIOXB8NQEPd8lqwd8XFLulHNhHTbEcf/kxRABtdgQus30sL5HP//FAiCtwQ7LkgFwys+tE+LAYrl5QhwJdI4x0k5eBXQy5QggDrk45yA1yYTX7uPJr3w1ZAOguYPA2Xdc2//yn/5zEAqy4mmRm7m1YrVm1AhXkKnvGDAzlywxbzZEGmiskOwAW4IbmXmN4WnzdGUHAz0yJbMpU6aE3DbccMMAQUfznHk9aZzSIOWWlgDwI/d9NGRJz6y2xAPTj/QnjHQUnS+6fdoJJ3XkrCbj69SqDAp6/GO1P+DLAGrUNg2XvyNGJIXBe766HC+BbL64mBAlY4nGF1Dbd/rezeTxk5oJu45vxhTXdfsttw2w27UwuT13nxibRC+cf2xz8LvnxqbR9lDF+IAeRQNuAAzwATdsz6Y09mnYaqttovYFfCohovyUl4JSHsJlzXQG7I6l0fAERHFUoOc9RcNwdAqdQCUMHcg5MRxxFQCI/fhPB/DUYS7iJ1w6cRJMnIIBPQMwcuIwBkCAMWAI3CZJyCpXinIAdODutdxHs1kokXm1FMbnOqmjtlG1V8R+isKkYmR4ArgBO3O2U3kS9LCF/C3loQAMFSU00o8hYODkRXkAHPllbM++Kx+9/2PhipON5xK7Es/lFjLGAJBBlgaScgIuCYL1YNaQS/v8/VX65TpAz2ug96G77g5dokMZUwZ84qkZh8MCPRvZATqyImfALryE6QFEcT/9F+PDmI24kiVdULUvGeZ7r+mGmvIbDPTIUgwfS/d9GjiLCbt3RgrwJZGwWnqmGdnO8ryl5wez03/oFO+OodPv9tx9j2ar4tFtXXT/jltbYaT/qNz9Tq1Kz6DXH/BpdAJBsVMAOTVG0JlVRK0NEHCRWBnBaWyPQMYWpid2J06365hdmjEjRzfbFdDzmQ1n1D0KGIr7qeJ+8w87stlrz2nNu3YaGw2x667jAuQ22mjjcGnHji2uaqmAMEGvBr4a/DrCK7SdEmSMz2dGv6Q3ZMOJK6DbFMk+AmJIOgiAMygj2VXHoOw6kQ7k/H5DaM4rYdR5+hLGcBSuEpeHzMw4oVRmSEhIxiRSOYABZqACBLLj+up8mFwCHyUyjU+6hDZwxByAkqN24C4xLtq7BjwgRjEoBbd24403DsWhKBQrGSHgS/DTvul2casZKRafAmXYAQgCPq4RF5gc3I+pbgwwEOCuM8IAI1mtATPuYxrzZFQqAAwQHGppn6+/Sh4ZPkqwxdyA3vILlsXnRjEtDyWlA2CrdM2z5QAd9gfUydRzkqvX+i6ZmOan/cT5GC4yRQbSmDFSqSv6uO8z5Wcg0COjjTbaaDXAy8/nz5/f/PKZX3WeNeXlNdYn59K19Bv3iVA4ui9Egsy5tzuPHNWMLfo/spCdB4qXmefj4nZeV2VQ0BtoODjAzwlLp9D4LJJRF/lqOtGqhz8bi02yPlIWTCMxwicdhEAwBwMZwC5Bbvfitu643cgAw4njJgQIAj1AaEetw+YeGrtunXbiqfHglG1keWhu7ejROwe7A4AAb8MNR5RGFijvG/iiloajAKyH6nVSeY0taMrNNeeTJeS2mddrRDk7S3YQDEYH8Ru/9zmhuQYw0GkonLhfBNi7hDEcBZvB8rh4UleEJjAIhonhoiiUBtAFMy8MguwcyRHosb6ejxJ4ZpURsIADV9eEcQYgmULGiLQ3oMsK+IAZcMMOBL1TkVK5EviycncS9MzZfexLj4dRwagxBoMXYkM2vAHA7g3jFmskZwAHyOceIFF+1/BEGGRtANjFOcWoySqZXqcCw6GW+nz9VKAX126Dr3QNMrM3iXuTUI5MeAYGDMMDao6ejfyEmrxvLec1rQOEZJdGW1/Xd8mLQaBbGDp5pUuboKe/k/1goAfsyDHl6bOU6x577BGhIaEGgxQ2JhL7/l/f+k5xx28NL85UQy543ksaVfeqv2301vWLR7hzuLnbFRIzpxjvH7aXoftjPfhUlZ5Br988mDyplwX4TOEy0qde8p6Lw/oYyc00CMnFFEqHCuYgdleAD+ipANAABRbnyP21ibTd830HABcUV3fewYcH08Im5PsBPisxT548NV5jcYAQ6A0EfMAtXS41XV0WTvVa42NxGBwrSLkEfjW8mh1HR+EqAEef+73/+p6CUXLvCetrX/16MMbhLhKxGSgDT9JuyAbDkbpi/i2DheVRGIoC+KTjMGyMFpBnHDwXINEOPsvOqS0YCBVzpjC+1yZhWMaMbXbaaUwBvcL8t90+5EN2GXOtZdVd/TZlJkyhko9rkoP7cU0rdFBm71NulNx9AwqhGLNMxLmAAnYkJQOoY01inmYM6L/Pp+vUBqAhF+cYrJZrJeBK5CUvwCdBH4Bh3GY1uDezM8gwY5T1oIVKjuSpel5GAKAwBCoigfFZeEM7+Uw7JctL2TFekY/XlkV6TrXsVLon1k5WmU0h/GTgkTdGZhnr1Wfomfm45ESOapIbRzIEyipABHTbluvsog+Va80o7bHgqKObf/n9H4bO9GrQq4GvI/xSxYEAHFcpLQu2YGHJ/I0pJDnPlQLZLBqwTZ04JQANAAJCnwE57303ZcLkZs/xkyKO57uFR9kNaUFz0kmnxN6XVmHWkFje1Kl7xXusL0GvP+AjRA1JCSgMRqLhvQdalCcZCwFQHp9hDcCPkgM0Sp8gCPwITlA/2QXF1Gl0HmCA7aHzw13IC+BJJqb8ZIaRp/tGubAh7I7LR3aUxdEgAAVQPaNOmxZZ9VobaQtuvZibeJ/PgR+mvMsuuwXwAT0ySmWhPLWc+qvJrl2b/FyXDI2gp9HxmhIxkNqeMcNSHDEmrqL0D6+5hcBO30w2hPWZnYJxcTEZ904Ky1BLWy/6q8+3QTavabBCu5tze9SR8+Ne77zjA/Eb7rcUHECX1f0D8iQZDBZZ+hwo6vtkp53IRX/Wx6WyyF6QtqVP+412JjPMS3uHF9OWQ3+gJ9zEA6OXwlDkTOYIirn3ZEU2rqnSGZWuATW6CHSBbwJhxh/d07SJewbLmzRufLNTITnbFLCfd8ihzar2yt+dWpU3mHJTl3pdvGeffbb55je/2VxzzTXNsmXLmiuuuGK16Trm0+ZJNTj3iDvAolAMApFFnTEJvxPj07lyBInC6HwotI7o4TQokEghqF77HEsiKI3htzajXrTozOb0089o9tlndocxYA8TS4No3N133yNez5gxq5k+fWbn82nTpkfDUgTKiRUk2FEgldVTKQ4AA2g+dy/uO+/V/wTvfe++nE9nca8+IziWkWDt4yu2ZFmlNVEYoSySaiWw/uEPxdJ1FUmtmUiumB1DVmQG8MSzrEyTMiU36RwUJg0Y1gAMAEErXlRYeWkHHZCcKI82oRxkpW20F8PhuSkTA6KNWfk9xhcmMbow+HKcMnl6M373Sc2oHXduNt1ki2bERps1m21aAHDzbZpttymMZVRh1LsUNjBhSjNtapHXXi3XBwPQ/mSZhgkToBwUiJEiD7/NfuM/7gGoAz1BfoBgRgJQ0Xc9N7de+5hmWKfzMAgRY+uh5PTMej5vEIZSnMfkfRPpTfuKXNfyVa6aotItssDy3C92ilQwQmKvVvRJF1h4KcMSwE31XECc8SI3TJHukWX2YfIiS3roKGwjlUVbLl1ybgzqZXgmdSZ0ctzEkNnOYwrB2Gr7Zssttg05+VwlU3XqlBkhs72mFR208MH0fZqZM/YNeZERWaWeeQ/gyJTeuEfvxRtdV002OL0A54QCpptssGEz4m0bNBPG7d7MP3xec1nxMgdlepnpncXSUDbplvWtzpo1K1ZMsT2ebPBvfetbMf/PcuHidXKAjOixlEBNw2p4MxRclEByJEqcL4PjHkiDezgKAvl1Tu8JgDJlTfBTKZdquW/bwB1xxPzm3HPPb0499fQANNYFnebuJthNmjQ5qtczZ+4djBAgdVdKktW9UFqASHFUypIKpKa18p17A3R+n8rlNYt5wXnLYrFRo1FcrquuuLrd2mum2MzmhhtuiPnO9m81G8YWnIxTgiDF8956caYKUhCyAGAU3BxMssrO8sUvPBquEmZAnskQpHWIH9WySfkk8GVNRdKxF51mdQ+bvSwMpfrrN721mbDH5AAzigPQ9pw0rdl7Vmn7PQsA9aE0qTgq5azlRokYm2Tavqc8qdSMrPsjP/ICCCr3FvgJy2BGmCxQACpYsNFPc7/lnXYUSX0JJb0khb5ZlEMaCbYNWB2lA1nay7mFhCQi2+oU4JmRwIsCyvQMKGeGhAEPuoUNSlxGKhinjO0BP3L2P5+RJWDXFvqrPqyNkrn7TPuQF5DB+vRd7SaHFeuLdiwy2uVdRd4F4Pbdp3g6+x0Y8svPUnZqN+CpzkefXMt1yIre6EswgOGkY2QK9OiS/9Ar1x9fvLnJ4yc0U/aY2Mw76JDmnLPObs4/Z2lz5mmnr872qvIGbquS7mtaIEtnm55jTbyFCxfG5GaBx+nTp8cE7ZNPPjky4gGXBtSQGlROF/bAsnjNirlobbnESExLYm3E3bih6eIk9UWFfea7rGIAto1Ufaf6HZps02Y7I5122qLmoosububMKW5Zm1Y7H6ADcgmCs2YVK1E+08ganPWiOBoXo6uZgupz3xOMBicMjU44yeycy/eU2fQbHYWFvHDZRc01V10bAyCm4Cw7f3m45ty9NVEsM8QAnXfeebGEl5Vt9tprr9jOELB98pOfbD7zmc/Eoq65zeEFF1wQSaJiQpn+QAnE9VJO2IP3mAWQwy7IGlCS9chwn1pGqL+qnYAiJXFkHDy79rEayplnLGl2HDmmw/YmTZzazN53/3g9brcJHeWYNXN2VGCo7mNx0FLJBLA5r7anFMnUyQlT8R3FSdADxGTlvwDPsxuYabl7LRfQSiJGRMXILMaQCyokE+vUHkuyvGR9P/nJT8J7AqjCC+4By5R/d8xRR8cghUE/bU3HgDBAJqNphVCojJFVT8ipvic5lFYLAo4MGfAjL3FYzwf8nIfsySSBTz8mL3LTVhk20I8NzNELfZcBR1CAEpbHGJFJMO8CgvkeANYyA4pku9/sok/lu6hFr7KSB/m5F9fnPqchJUs6loCX+nb43IObU447oTl/8TnNjVdf21x75VUBeicUEnbrjTf1KacAvZrhAb0f/OAHkS1tjqzRNNnU8+fPjwUEZsyYEfNqAaH3gt6Wb2JNNG4KRYMDPykRz7fjEhJeb7/t/REgxwwpDSAzEAHUAJS4nIEI77EyK7GowA0gJvABPKDmmOkps2fPCaZ34oknFwC4oDzDCeHacnWd23UAJODj2tofgUKoQC9pe1YNS4ESGH2Wv8+KUcj5osBy9nQK4GZOoz0KTK7+4AfuCuDzOwF9nQjb8f2aKI8++miwcQmgDNJRRx0Vy3pNmzYt3nttxyijnW9+85sjTYTBMuqW08soAiUjJ6EIbI8y2ZDJbA2uFPmqUjwSJGqAS7anJgPUebEIHZlrxKXFKBgU4LdwwYnNJRdf0bx7ztwAOqxvh+1HxZHy1CyPUgHAVCA140DkgOVRnJRnyjCNlHt0bYCIFWIOQAdbAmqLCjuwLJY8U4MEVhfhlWTc00yNTBvpS5kGKgl69EtI6e677w4CAeicWwVKkr/F60z+F2fE5oCb9BLtXYOXuHj3hllWspEqhoWbnYG10knycy6vyc7/6SfgUtPjIisGwnvxUkdurfYUnsDQJQmr2pGssHOycQSCGB2DlAYrjRa5haGqwA/IkVPqn/eALUkFIPaZ/uL6iAKPyfJgpntesuzCALubr72+ueW6G5qlZy9uTiz92GDG5Rdf8kLbVCXcWzG83FhDsT0jhZFCIEVg8uTJ4TKZKzdu3Lj4jrt7xBFHRENmxj6LhA1ocMJhMXPU1iAHC5QzNOT06Uxc0E022SyC2HsUigqUAF6yOCzN5+MLhQVggMvnyf5GjRrdrLfe2+I8XnNbDW5gfstKg5x55tnhAqe76zfJJgGfRiVoiqFxNTzFYXkoEhZBQbxn6cSmrN1v5FgHsD2llBbWz2vgxn31GaX2O//D/s5ZvDRiWoL6ABIgroly6aWXFlDfsTxfAaaxYyMMAex22223eK2eeeaZpQ3HRyY8Y0a2EkYpHUVQ63mc4kgy/z/70MPNL5/5RSgJw8ZQYegMW8stfiH8oNbAB2QoFFaQsVuDPtIfvAZWxy08qZl/5ILm6qtuaI4/7pRm1I5ji2s0vtlt1wkF7ABdYeTtOmP6vlFnziiMO2pRprayqGmIyCxrvic/ikN2lIfRoUC8Ds9toVgbHV1z1dVFoZcG+AFDoRur7QBF+XEZm+ZOqoOV9KSU9KJsPmTZNetK0h9tm2kokr+51NxtTNOCDfQLw/ZbjDDdWzITMsrVSMQEjeLSLavR8L6M7AK8BMt03f0XiGJyZIHVOQIbBsproEemYu0G4Xyuz+vDjLf+ftihRxawm9qMfOeYZucxuxXDVdzk3QtjLMcpk2cUV7d4V3tOj0qe06YKTwhNkOneHb0jI/2BjMT2MEuDXvTGtXgGwM6iEipiQdeWLz2vuagQnBOOKQa0eHpHzTsiXFuAd9+HV0a7RK1KgB5hiDFk4dpa2ZgSTZpU/Ok5c0KBrIVHWL7j7lIaDakmDdfQGpZgxCvEQAiB9clRXJ0lg65nnHFWAJpRHq4uUHLE9jA6gJegl8CX7E/deONNAwRzpI+LbKAC6M0t1BfwqTZ1BojOC/ywv2CTBfQyrsDiADxgB6gwAaDFRSUAgEco6fqqlM1vMQ7/xTa89z8BYMLi0povGMzm2OOC6QFG1mqoBYOwWTVZAD6uLSNllWqhCfKz0xe2ZymiN73pTcHeTePyO0rESGF7Vkem1KqFUY1YppEiOwpJxtge5sF1oiyALUEN2LHQlAlzcOxmfpSIQjkeNPfw5oTjT43jWWcubZYvuyQAbczowvytuLNzYfhtEKRIlCjBMFjE9BarA25prCgPeZADuZEfZaU8thMFeAaSVAuTAjeeh1V1JNJbshzQiVGLWVsCH+uLDdDbStQr6NGtdGlTx5588snS/1oLJgAjusKtlWws1ICJAcE0LAlUmB09Y6jomd9kjNGiEUZ202i5N/JzDrIS4wNyzgdAHREUXgxmRzYpP5VMxWIdyUwepIE48gRI2hL4nX/eRc2CY08MY0RWZDZ6p12a3cdNCtCrjdWsmdxcYQksff9gfPbSSJDjCQE5ekJedIUe+YyukWnK02/95pD9D2yWnXNuc/Zpi5rzzl4Sru17li1vrrjk0uYDxatMedWlE9Ory1VXXRUgRzEsD2XJHczO3hamjliOx+dWThCbyxEi1sNrjWsKE4Fwb02bSQtpuRjHDJaL665a9bnifi2LAQlAlqCULq3qtYrp1aAHGDFFQAnw/FcekBFco7kHH3xos7j4+/bHBLA2B/Yf53dM1wibA3rAL90xSss9Yol0Dke/8VsCAH4Uh8AoGzC74bobm6uvvCZYhE5hfqeZAJgdRXd+o7ysZCyiOMTyj//4jwFeZIE5kAsmLhzBSPls772B/cgIUwBG7xku4Af0KJAAuZVxubRy9GIK1p/+o5OaQZnIEjhI4KVE3COKkcmqlCNdSIrEoKR7ok39RhsASEcB8e23K0Zy7O7NUfMXhvIsXHBSKJIjRrDdtjs279xhdLPTqHcF+CWDaClRa5czCmHUr2YIlEJNg6TWYMigkR9WJYbGtQdygAfjwwB9xrVXsT+xvQA6SlTaJmJpPZR0bdObsq8u0JOQDey0PSBzDffDAIkpIhPAjoy4vfQKIGLajl/43OdDj4AdI5XpNHUamc8xRufBFLE+houuMl4MPlkBs6yMFlkyaEIS8kvJ2OdYutk09IIBOWLeMc3is88LmWHsjNKuu+wRFQgyYN1gN3vfA4pr24rpWeI/dRBhoFt1JSuy9T2Z8aDojnr+uRfE1LNVn34wYnpzZu3T7FWMwsEHHBjg9zcfe6DTDnV5Q44mAb+k3+eee25YIdnURmsplUENLq4BDG4SxeJKSXOgAEmXCUNjGsigONyj7CQ5jScBMNaZK6V92eZf//X/NQ8/vKoA6+IYbBDfA04ZuwNS2FmCn7rhhiMC7PwmWSLA81/MT1xQ7G7BgtKpiyXA+CxTL+DqOwqqovWpqBksVTPegEWkpeHKAjVMjuCvv/aGWG1FVrmVVigTdwDAYTPO4agjOY9qFy//G2r52c9+FvIgK0BmIyYV+DFeBivE+rw3lxV7xwaBpNdcK6AnqZxMMHIjtl7nxHqVQgE+Sm+xUBPyGTgJxlxWzwfMgB6DkSED7ZlsD5PwW1P9xPawCOko229X3K3C7A484JBm0emLm7PPWtosWXx+s/ScC0KJjAZyj8T3Wu6RUUAMYp+OnMSXVG3OQGVNF1dNJeLikmHLxT2juEnLI46H1UmetyqvhWQ9H7CRzsPd5QbXgBKhmx6K8BHgA3p07J577gkZCB0BVPE8ri2QBbbirBia69Mt7u3IHVrrDmKGGBqg5NoCPNPQOmCctdxnAqDQkgEpc6ul5uQ5MXUyw/LISP8nNzKjDz5jqMhMArFj5OYV1kd+ZD3/yGObk048rTlnyQXNGYsWFxkeGiPxDBT3FeMT52OsxGm5wgarWm5va8ApZZaEAgjSIZ5Va5+P4gEU0iDb4f3vuz08J0yTHJeV9rr7A3c2hx10cPMuaVWlbTzjeUWWXP1Oe1TlRcnJqLgRP5YIqAmKY3ozZ84M15YrRZG4TWPGjAm2wGJRIEpF+TBB3wuw91p0hqw5tK9ee+21cQ+usf766zemsWAv4lKWF2IVCRD110lypCuZxGabbFEUs7WAov1OVYuTHvjuQ4q12jtGcY1KYz/cPxW4GxjwvEuXFrr8nvdEmo7O+rnPfS7SdYy+xUbD7UZlcQG8a3NBKDQg+Os3rtdsuMHG5X1hKmMl6wpUHxo7zd+78iOthx9C+f73vx+DS9rFvYuzkpVqFQvPlYu2khU5mddK4YBlTgQ//fTTg4EYxKpDHYOVVatWRdtoM9dxfmxSH3Du1rYA40JmBlAMnognYp6ME9BssYjWnNx3bLpluC9WzTY4ZHVfRsLGNpSytbK2IHcrBUXIA4MF7J5ZKEZ/JTttwcXn6hvVvv7665sVK1bEc375y1+OzausuoyJ/rf/+hetaXHlHgTuyY7yA1QKidFTNrKOpPI+lGmwAvS07cc+9rFoEzJwj1ZtJkPGysg6QuF7+qe9zF21FJM244FpW22tX9a6UutQljpWr0hX+t73vtc88MADzS233NLRI/pFn+kC3SU3ciQzfYvMzIXWd8iyJcNRwfyAof03sOxzi6ECXMIOwMxmQNqXPFsGyh4rc+P3gO3oo4+NZ840KyutM9ZWhian73znOxEDtaWssnz58hiQW2+99Zq3vOUtsY4iuQFlOsfjMqDJRf7kJ4sh76OsBnoaC+i9//3vjwfWCOJBboh7qzMZscUoNI6jjg2MKI7XBEVgOttLLbXQUpDKM8880zz44IORJE2R3YdrE1SuGMEFEHMy4mWA5Nab3xt7JvzoBz+OvXQ/ct8DRVkmNRPHT4md1m12bId7jBKT1YG475dddlmA2+OPPx4sCrBJ0n7uueei4V8ECO3OL+Yl0I3tCvizkpTSKrX247AREcXdf7+DmiMPPya2u7T95VCLtpGeQoEoPANh4AIAGGF3JBeGSmclJx3Z78nYdxRLussvf/nL9llfiD8NVtJ14ynICZTAblRSxzTHkoLyGvQlCkvJ3IPrA2GMWGWkuE8AkJJgACw+l0YHZvUpUQ5aACKWXt/0zHYGW7RoUTwHo217RCD3xBNPNN/4xjfi3uzVIj8xn02eHAXE9LEWMsNgbGCDzXDvMETXB3oXX3RJYVQS7THf9uIDPRZ9WZaEdtKX6Qk5uHe6Qk6x/HsBQCAOdLBBgON3fq8t6Z3v/f7b3/72gIDXX/Eb90HX9XEjya6dRpGcVMTH9egZwBsxYkTIke65N1hABhgYwGOMsEYMGviQHXbPWAlB+I0QhLY0+qs9bQtrO9ivfe1rsa2E9CtA7Si31FHCvfslV9iibdwfsJa18Y53bBEAzBs0E2vevCPDq7v//o+2n3j1EqCX4KIzODk244FVKCxFhXsrGJ6jgi6u4XVogtEob3zjG8NKYXiY0MsptfDclweurRVLBfl1WLNDuGLiFobu6/0ouqvt/x7/8lebT33ioeZ9t9wRO7DZe/OUU04L6+LZnbt7hkp2qqzap66ZI3XPh1cG4HHzuSIE3XLzpgbg7Tx6l8bGxxje0UcuDNC758P3t6/y8gsgBnqAxOASWWEMXmMROig5st7kZuK3yd4sNbDXcbBB7MPzv5wC+HIWj2JD90ceeaS57rrr4tyAFcC6R4pFifUbygtQxEHFPs1HFiKwDNQHbr8z9r+gVGI64nMYIHeV4sh7FDulsPfff3/MLgFuP//5z0NRBiuMGWaRYAvcAKkYltVfAB4ZUmQBdQNSkUze7k+WB4vljwYpCUI5mKE89thjYYCACZCTFUG/1ByUAnJkqI0YCG2W4QnyBe6pI7XO9Ff8Lmfk6LfdxWfa7qGHHgrDJWUNudBvGE8hr5tvvjnyPb/yla+EsfUfS3lhvj/43g9DTsI+ZAXkyBbQATnr4dkZze+soJJsmd5pm4HuXR8HijAHzgD/SPcpVUhLTF/Ia7/93l0Y/rzQaWME993XtycVoJcC0ek9CNpPIXRMDa8BoDprYNs5QlFdFMhxH9773vfGxip5rm5a/VLKYEJMAFLECSO20o61iDuJRcVkfn8v9Y//9qfyO9va/al56NOPNJ998PPNicedWizRIRE/jBVcS6k7hGv3wnbEVVxDHEHMJZfC5xpRIvsQbL6ZJay2L53guOaKS69pLrzgkgA9e7AOtbhf8TrARhaYuUEMBqpmDeTmM7/LFS/I8I477gg2lLmaNfDVQNZf6W4j7Ub22Q+8B0L6FJfyS1/6UvQTAzDOb9knK87kGoOWhLI8lM9s4HP3Bz8UswK4TMAH8F1x2ZXxW/8drLgPhiz7S4LEvffeG0A8trBxbhFwwy4xFS6u9xTXtbnZRt+BnhVb1Oxbg5W8Xt1OtpzElOgXD+rUU08N/QJ6jtgVxc4BJ6yZwQKO7rverc0xa19FG6dsu4u+4zttlK/JTh9wdM/JjtO9VPJ87iMX/FQB4P9+6ulYr5BxyiR9y/nnb8JQEEX7fV08g/vofhb3h8kDPQaAsRAOUKW4YXpAb+HC42PQkk6fc865hRh9q32G1csbXCA7qIclJJ3URbgiGp8ScSOwPAoG/VXCAXxcvyzOkS7PUEotSPeUbMJxtUbxsg14AChXw1AtTvjwg480t9z0vuasM5Y0N9/43mbB0Sc0SxdfEC7mgfsfXNzaS2JwhoBTMeqS9+E7AtFWKsGH8Mt1AG8rfaMAyqabhavNRTPCZZMj8afc2d3u8meevqQ5a9E5xdq12n2ohdHRIchDLAvwOZIbFphyVDGJm266Kaas2YdYyedTPGOW7NwDFf/1O7KhKH21YRaKY9Oo1X5T2q9WnO5quaEHP/1QMAYpCpK/YwOgcgoAmfJQ3bvq/FkVfdL3SspTf2YAjERid1id2KFAPtAz8AL05IIBPcF0y1PlIqWdexykuIdsoyzCJVxa8iAbTMr9MExYnPikeCviQc+wZv/RR2sykQCh9leyPQYq2qa7//tfej3uPa/rt0BQ8RttYA08DM6eI++79bbYaQ7oYXwMBfbndwCvXkBXOzrHQPeYn/NIWu5sK6bPQDAcZl4Z3DRBQabG0qXnxcQEU1L//d/71q8Yvc0T54NrRAwg42YsDsAT3BcvIgisgvVhpbpLdrBolFeouEZszlwaD9hhd/Voow1EWJrYWa24lyM23DRiekccdnRz0AGHNXP2PTBietJYWFBMJIs26Bm8y7VMRJcEatTaQIYRbMPvYlD29TV4IaA7coedmvnzjm1W3HVv857llzWPfv5v2ycZWrntttvC+HCJhByEJIAexSInVUzPkRtbK47iOTGvlP9Q5Oa/lIR8vNaXvK4V0zU6StaWl/qrX/x9jM5J6WE0pPxwbzEFgAT4MgHc7/tjeq7l3HH+6r3i3iit+JS+bbCLe0tJVdfF0lWxQ6P1ri+v8ukf/6Rzr2ov7q3r1tdXtL/BH8AmzMCDAnYqNg70AB79wwS1lTas2ZZz+rzXQhauq18neajBLEue1zGL/2SfSPB2NPVRpsNf/sVfxeCPsIB+L/zAtRXTA3hGYKPNNIFatWEWz+e+XMs91X1GOEtYROyZzHgv2kc7mWBgOqkBLdNMLT5yww03RW7u7+2b0UdZLU/PRfJCVlfBEgQuVRfhLlEq7pKjixsFUupGSqufDTSU4ryEoDESiFKhHFdrwHaVmX7R8ve0h8NnBLgdevC8AB07vB+/4ORwbyVGmqsLHHRCgVOl7qCukdfLDrxaKW/FEnM7Q4mkQI8CAT1AC/SAr0GNA+Yc3Nxx213N9dfc3Fx3zY3tkwytiG9yizAXzIESqWJ6rCEjxUCxkOKg2pB8yKmvks//omcdoPiPNsr/eK/dHFPBsnidipUDAjaAlucoxmY0MFf04NIabKgD4dJNYoXk8j/nV/u7V5/nvWXBYJIxGDjJtCQxWOxcEF5owgCH5Fj5lGKIn/zEp4JdRj8rTdSLe919X9FnSyEH+sPFxdIpMBZuMAoY0j2Gyqhz3nse85nXVHGu7ON1qa/he3LMsmLFirhnBoqBwJCFBozIZp6kdpTSBfQs7hrtVmpuuaANnbP7ulmy7SRzi2Wq2LHr6s+MOLADfDlf36SEFStWBuh94QtfjP93lzekELK4kCoYjeERgBgQ4aDghIFmskB8asFPHVhHdq60HGtKKN2dprtkTM2sD/E8rq6FMXVeLIFbaePwk044NWJq43ebFC4u9xboiQF4Liz2qaeeimdwTYDQnzCU7HiSd9WN3r5hJH9Km5FhzwK6h8mTpsWordQZw/V7TZnVXHLRFc3dd65sLr5o6DMyFIM9XFoxKhaRXMjHMwE8wMdIYRHcJM+VcvK8nqNmEQlI+ZuBSvYX53Au/1Wz7QZqwyilm3CNxOwAG+AjN0pk5C8HL3yGuRv1A3w333hLhC/qUt9HAququI9UWn3bwIBUEACb+YTie64L8Fwb6AJEGzqZP20alL72clNWlLyHp59+OuRCv8gMscDOeVLAGHPnwomDppupYKlpQGoQ6qVkn61Ltpljd3Ed7Vb/x2upJIwqQ4sZG61lkIyA6/dYnlCEEXfhCLJjvKxk3Wm3Urm6eU99XV9xD2LAWF6yPX25Fc8rbHzWPgF4Rm7l6HJ3V668N0Dvzjvvap9l9fKiPD1FR8khY8oDVVkhgxqsEtrNCknzGPZSNSLAM+dQdruOKwdsqy22bWwmjvEZPRVTG7fLhGBcRm8lK9uAXIpDuuop5OxcA5b2tbm3pvu4tjw9gXDKKj9v041tXr11+W5Ws8/MOTF6e+N1tzaXXXJloe6/CAabhcIOChRVcY/AiavBvc10EAaL4pAfebGORuV+/etft//56pTs1HVJUFIwNmwAkAE47ZaDFj4DSsBOMirmwNWkVEYKY/+SHoprJXDo2/o15Xnb294WbE6qCvc5U2FcM+eiMlxierffdkdMcLdHymouWo8lwSULOQA0AIehB2sqnpS4HjZjkInR8r/+AOHVKnn9xAWjukAHU5XaYyBI4j6DlYngQhNSjjBl7UdudjbrpPqU2gtTVgymMFJCAenywyIG3ZRTU1jN3TfZAOgtWbK0ufnmWyNe//zzBke0vedo1T5BT6fEdDyg9BUxoozjATtIK2cmrehwlkwZaTXiH5u77vxgMC0dVsIil9ZAgtQRAxcnLDwl0lVm7rVvMD2gB9BZVbE9z66yojUY9Vs05PN/KgozMwYysD3Z8mIbElzFE9++/ogAvqmTpzf77XNAs/CYE5sbrr2lufLya5pf/OJXq7mZrt0NEgOV/K+OyQhh4lzcDIzrmDoLGUrpyNIToK+B0hfoAXXP6WhLRgyv1VatdBFKhGFhCMAN++IuAT6swkwWK0/L0u+lJFvxzNpJm2FW3KVkd8BNbM+1udbcbH3IfRjBlfcpr0yw/qUOZOS16zb3/JT5wgsv7AwOkpcwEgUHLOKvrxXQy3AI44qN8vy0IZeW3Az8ADgMrxXLnhFMT7qKdfhUYYmWvjhpqT10c7Jz3cxrZAzoqjbjcZqlZbVmLI+ba3ERCwrfdNMtzaWXXh6A9yLQI5DuRvUZoQA1Dwv85OZYzQMjMuT+WilGTs2G4OaqJxx3fGn0qWGtjcIBPNnhQE9s7bhjTwrQ2XOCdeRmRxIjt4IFWblyZfusLavWEzCUpnN9q3QYwTV6a50yrMF0K7NBNt5os2B63FtJ0dxrLi739je/+YfV3BRCfrmdnMtkEVGuB6aHMTBQphIarc1Cvq9W8SyeKYv3ru8zRgU7wO4AjSlPAIibBAQxBiyhFRttpZBQKgCIBZoG+FKKfqy4PlChtGJ6rsPF9doMA8aSl+CavnOPQJarJtcst5bsBfSypD51FwptVotVcCgyhTa/HQtUtNfL7Q9rsmDK+inDiuWZmSGcoo3IDGNmOLSVmJ73PB1zZrFoMrQySoy4vwSjkYVB4MEw6DwY1XsMTwV6BjRMMbWa+vXX3xjz7fsEvbS4fYFfXWrFTDB4NZWnvxILF7RTVrzGuMzMoDTcFi7lfvtaWto6a7NjNsbpp5zVTN3TKN2U5uKLL40FNQX9M4VD6bmj+VmpVruVp2f0trUCyTujbrm5rRI3j1kZ4numvwHe5edfXIDy2ua55/6wGrjWANFrqRmpmA9r/MEPfjAM1J133hlT1bL4bV6jJ1AfYtGO+liWvLa+Y8SYC0RO2grTyrQRnwE5TAGDIE+uJ1cYq+B+9rLcft1H69iY2RrhMpXrAjbK6xqYJtAzMwMQcrW501xbMT077YslSl15KUqraIv+dEYmggwCsxLq4j8998VXsKQceUUMqfCAeCQww8YNNpGbtjJii+mJ7xn1NopLdmJ6uQtgbPXYI3xoM4Qrc/SwTGEBTN0qSxYYscqSdTKtrGSe/VVXXdNcfvmVAXh9gt5AwJcjmnXHTYsVKSPDXcrtBvCVo0nX4mkmZJtITSDm/EkQzhHcWdNnh4srZUUayfLlF8X8Xmzot7/9bbSD2mtHS/da2srcAw4M99aghlQIrtImI94RLG/0KMtt7dUcfODhzUnHn9ZctOzS4oqvKOyjlRupOCYoKL3cQ7q33cV/yak+X61wrwbgZamvVb827U2cjhvJnaQ0lMMRS6BMAM/oXyoXN0nOnKTXf/mnwWdedD+/dlG//vWvx8wUAJfMEpCKUdmZC/hRWqCMWVoGDFP56dM/i7hUML0elba7kIvqfgBx6pZ7rfUs71V9LRReH8AT5sLyvCYThsHRyK24rBgs0MP8DABJJgd+Bi4ipqfdPFKP7ee6ZmRg5mZkAFwGy1zkESM2aczhtriIVZfk6llEmGt73XU3lDbtA/Q0aCqbWiuGkp2mpubpJrwmSnmIXP7ISiCYnulgOjFFAXQmNxu0MJAhlidX7/BD5hcKPjGGuE1iNn3ru9/97otczcFKjBiXa3OtLd1tlVurWFAeLpKYHnDlWnOzgR739twly5oHPvo3pV1XZ0H1Nbtl0Vep5VMboVpeitHZWm71c77Spb6X+rqYDRlxawEPlxW7SyUSInDkLvmdz8XV5PJxNX/z98+2z9R/yTZMsE0jjxFzJzE6IJf7HSfgiVNJYXE/YosUl4trICPdswC+QYpruXYNXD7TDu5tMFAb7PtXurh2ykwf4lYazAR6QijiduKe2omcMD6GgtFiNBgn6T5isUbphQaw5F7DA9pO/9HPpZaZimeGiorpmY2Ry8RZa/OQQw6LmB7Qu+ee+8r/+gC99rlDAITh5HUj10qo+M7vlDwOaymubS6r42iZHvNfAQ5FOeLwo2ImBKbn9aEHHRHAM+/Qo8K9NdojnmJWRh33UvpjUauVcl2AZzDDWoGWHzegQZlUAylc7IPnHhbg69piitzbJx57MoSRJds/S3fb91fcJ2uYRUfJjpoK59zdQPhqKVMNdPV9WtGFO8uVxczFf5Ix5OitUUHMQc4l5iwYDvh8HsnCgxTPWPdZ/VybaFtTulpsfNMwUuQF8LBOLEX/kYcG9AAesA12qdlKDRe3h+L567ZPXauLezKzqTZMvYDiK13cg7ZSyU7MkWspfQTTIwfAp3JjMXdyUxkybYclc3uBXrZdJ+1nkFLL7lOf+lQALheXq4vtiedJWRHLM5AB9MTpxfOefPLr5b4HAL08uepB6+KBCS0bPxtiOIXRKW5Bbcf1LHKJ6Vm5A1PgmrBA797vwAA/+XqWdsIAjaYa7QF6qhWjdb5aMQct5ZqYZrrY1jez6ouVOijP+m/dIGJVFkvcZ9Z+zbzD5seUOCusPPe71TPGUxmz1K8HKrWiOEc3E6d0fZ3r1WLsNejVhsSyQVxZymEgQwyN8qSbBHAoFfeW8ojleY91kenf/fCp9pkGLn0BjP4MZIApF5dnAPgMZGB4romxuI4+ZGn/D921ojULQ38rtVfQoyf9gV63IUodzOK/rwU9y/4jN89gAhdT6oj8vDqBnIEiO/IiW/K08KcUlse//ER5+HIStTzSb5/9XZxzsKKNsl8bdOTWGkiRnmXRYCuiy8Kw4ADQk3t79dXXRmbEgKD351w0SBYre0jbQIPFAMQfNJRVmY85ZkFj2RlA53jAAXNLIx1SLMPZsW7eRz/aWopGpxPL7BV0FAMEqv9aLse1CYdl0kkseU8o1g+77LIr+p0MvbYVIMY4YFzc15xjC2ik/QAdAw0AMEcDsT2juqsefqR9lpdfrBoiHcK0NKPd1q2jTKaESfeR6mNBClP9rCyikPFLMox/xqU2WPTMyLI+LXdX+gi2Z4qqHEODHPQpX0uGp3sS5+XCSmqmU0mg6nP3VxiInOurCEGZtWLBDHJS5TlKpXNtK+dYgUaqXbdByfJnD3o14AEdq3hI9ETBdWZ0XCxAioJhbwIyUqsji+n4zBp91mKTF0Uoqo7dzXj7Kik4165HBz/0oQ/F0L7Aq4UA3AdFkiAs5ce51xbFGahgB1xJE/8NYgA7bhIABHSYgqMK8LBAaRFmZlileqgF8zTKzUBRIH2HvAAe5ZUES2ZYaXd/qBnZ67nQsXxWawEyDnI/5ckBN7pFlzC/nP6Yidb0zeIlixcXI7Vq1WpEotf2c/2a7cpOMD3PQJQpsTkDSbVMnI3N6hlG3eXPHvTqhgM8rIKRWIKRe8cqEYpkXQICPCg6C85isEYaintrHUBAlA3cK9Orf+ceFPclZmWdN2u+rVy5MhZ9JAwWaG1RmMGK6WQC4W9ff8MYxeUW5YiguBAAtHsZ0AOQmKCguP0R/seja2bBBuWuu+4Kl2mDDTYI0JOAa5UaeWly5vpiJb0YxddT0WdNOwVsSAUj4TVgc2TY6RNdA3peq1bltl+LJczqft8fE+urAL6a8SEOjJH0FQYKo/Qe6Rksq+R14d7WqA6wcmVajWGEBxWPkaY26LEILBPwIxwC0bl/+tOfds6h9CoUsaHaEtXsUwGKlKb+zbrSKhYNNWDAvZUcLA4L6AAe8BMrEicCdlgfJmilFevbffMbayZEkHIRMwJwmJ/ltyipWRP6F2VlEGt2vjbIs47B8mTkVlpdnG4hFMI4XFx6BOzolMrVRDYcsTy5sLneZupHL55O3cauX+uW75zPPdWAyBgNpLuvC9DrDuRrBFPKsD0WKYe3CYmAWCSgRyAEJKZ36623dlhaMrdemJ7f9Cc8HaYGZPeZeY9KbfXW1iJ3y3Qyrq0BDcDnmKOCQE9sDwPk2jqaiSFRGGCuyaLvyNWswxRZyKqWl99mf3k9FwDiWZPVaoOvfvWrnSmpFiPJWRKIBYaM3QE8DJB+8aJs9WC+MX3pq317La5fA19dEAvndnSd/pj4nz3odSO6BvEZKw3YCAQNN8wtBiFmQxAEg5I72v1fQDsb07EXwFPqhiUQ/3OsP3c/9fmcn3D6E8raVExLstqu1JWcCiZHDvBJcJUC4WhEEBAa2AB4d915dyu7fw0VMquVsS8W57P8PFnG673oo331UwN/gI9Oie9JIZHGIqSUYJdxbJ6UJegQAO3WV6igv+La/pO6mXqUujbQufqTz5896KVAsjEBjOqBV6xYEZbHKJM4DYF4L54H8AjEqsN2XrJnQgKoxszXvRRMr9vqu77P3VNfncb91q7DWltgSKny4AxUSBcZO+ZdkWdphgTA87k8L0eghxlGztcasBnJxNMQpVzSXaqNlZJKuLaU7n6dz25HNSOy2B5i0ZoHa8vVSRFG4u4CPaOp5oOLBWpLetGXPvRX0ovyX//rK80qZZfA6B697k+HXxfurQfMBq2F5PXFF18coztifICPS2vkFuABP1PQjMwptWXo1RolwGbR+Pne9bsF7Lv692t9KTpkhsNzv/t95Hthe5KVgR7WZ507LE8aC9AT07NAbGcq0xooZNQNbnXJ/pWFUpH72gB+njMZcD5vApFVe3IJMzE+gMe7MgCUxEI87+Mf/3j8XqlDQS+FWGRJopB6pA4ku77K6wL0BirAi1W6/fbbY9YFYcg18v7hhx9u/2pdGbZCj9rVZH47nInvSUQ2qCFBWFxPtbSUBT2f/fUL+6CsK8NbLEprYAPgyYaQnoLlqfRMDBs7ezkA90qV1z3oZdHwBCSYarT1tSSEtbpUoKcCtI9/7BMxQmvgQia/ZGRxPMu1G7wwK8IASGwys64MexEikDSMRAgV2ZLThvhYHb3Dzl5L3s3rHvQ0dn8xhLXBPXnNlyICWyqaiA7ETES3dJPFBADcUz/6cUw3+4ffvLCnsd93poOtK6+ZAtzSfaVbwjvIRV866Pv+9PKVLmsN01M0MgGI0bycWMC68gqUNpBFLToA0ILBVZ/Vv/H9UPaoWFfWbAFe/ZGHvj5PsMsY/HCUtSKmlyCnsVNIWdeV4S2dJYa6KuCTzoLR+Y3BDikq9aq73RsDrSvDX+hUf2TCdzXgrQO9V6gMF4VeV3orWBuA62yi3cXsBqqxHeO6MqwFkCEVyEUNYoCtniWhJOCpSUCGo6w17q2GTuFkXTeYMfyls49su3aWYVcBYKkJivk9F7fzm3VlWEsNXEBPXK8vvUoGmB7X8JWm+f9vw9PROFuQ0AAAAABJRU5ErkJggg=="&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mountain Buggy Nano All Weather Cover  (***)&lt;/p&gt;
&lt;p&gt;Unless you plan to stay indoor all the time, the all weather covers are must-have to ensure your child stay comfortable all the time. We used the rain cover for both rainy and windy conditions. We also used the sun shade to create a dark environment to allow Boyan to take a good nap during the day. &lt;/p&gt;
&lt;p&gt;Pro: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Both covers fit into a small bag that can be attached to the stroller.                 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Mountain Buggy Nano Covers" src="data:image/png;base64,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"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Hip Seat Baby Carrier (*)&lt;/p&gt;
&lt;p&gt;We have multiple baby carriers, including Egobaby. But our favorite is Bebamour baby carrier, mostly used as hipseat. During our Japan trip, we used it from time to time, but only for short trips.  However, we did notice that baby carriers are very popular for locals.  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Hip Seat Baby Carrier" src="data:image/png;base64,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"&gt;  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hearing Protection (**)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I love my Bose Noisy Canceling headset for air travels. Even though Boyan was only 13-month, we got the large size Baby Banz earBanZ Hearing Protection and it worked great for him. He seemed to very comfortable in it and wared it all through the flights. He looks super cute in it as well. :-)  &lt;/p&gt;
&lt;p&gt;&lt;img alt="Ear Piece" src="data:image/png;base64,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"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Getting a window seat on the airplane (***)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not really a gear, but it is super important. It helps to keep the kid entertained from time to time, especially at boarding and landing time. More importantly, it allows the kid to sleep with the least amount of interruption.  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Neck wallet and passport holder (***)&lt;/p&gt;
&lt;p&gt;A must-have for traveling with a small child. It makes it so much easier to manage all the important documents and tickets on the go. The last thing you want is to leave any of the important documents behind.  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Passport Holder" src="data:image/png;base64,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"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Diaper bag (***)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is no need to explain why it is critical to have a well-stocked diaper bag for travel, particular on the road in a foreign country.&lt;/p&gt;
&lt;p&gt;I will write a separate post soon on the content of the diaper bag for both &lt;a href="https://yyhh.org/blog/2017/01/tips-traveling-baby-japan-diaper-bag-air-travel"&gt;air travel&lt;/a&gt; as well as for day trips. Stay tuned.&lt;/p&gt;
&lt;p&gt;&lt;/br&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category><category term="Childcare"></category></entry><entry><title>Data-Oriented Programming (DOP)</title><link href="https://yyhh.org/blog/2016/12/data-oriented-programming-dop" rel="alternate"></link><published>2016-12-03T23:33:00-08:00</published><updated>2016-12-03T23:33:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2016-12-03:/blog/2016/12/data-oriented-programming-dop</id><summary type="html">&lt;p&gt;A case for viewing Clojure as a data-oriented programming language, combining familiar JSON-like collections with Lisp's way of defining and calling functions.&lt;/p&gt;</summary><content type="html">&lt;p&gt;JSON is arguably the world's most popular human readable data format today.  It has largely replaced XML as the data exchange format on the Internet. One of the key reasons for the proliferation of JSON is its simplicity.  The data structure are very limited: only arrays, enclosed with []; and objects, enclosed with {}. That's it. It cannot be simpler.&lt;/p&gt;
&lt;p&gt;Apparently, this dead simple data format is enough to represent the vast landscape of data that JSON becomes the de-facto data format for Web services. Most Web APIs we use today speaks JSON. However, JSON is not native for most programming languages. It becomes a pain to convert to and back from JSON in programming languages.&lt;/p&gt;
&lt;p&gt;What if we develop a Data-Oriented Programming (DOP) language, that can speak something similar to JSON natively?&lt;/p&gt;
&lt;p&gt;Luckily, this language already exists. It is called Clojure!&lt;/p&gt;
&lt;p&gt;In Clojure, [] means the same thing as in JSON, {} means essentially the same thing as well: a key value map. The only thing added, which makes it a programming language instead of a purely data format, is a pair of (). What () enables is the abilities to define and call functions. With this additon, we get a fully general purpose programming language.&lt;/p&gt;
&lt;p&gt;As you may have suspected, using () to define and call functions is what Lisp do. So you are right, in this sense, Clojure is a Lisp. But with the ability to handle data like in JSON, it is a Data-Oriented Programming language.&lt;/p&gt;
&lt;p&gt;So, there you have it, Clojure is the first DOP language, a DOP Lisp.&lt;/p&gt;</content><category term="opinion"></category><category term="Programming"></category><category term="Clojure"></category></entry><entry><title>Switching to Spacemacs from Vim for Clojure/ClojureScript Development</title><link href="https://yyhh.org/blog/2015/08/switching-to-spacemacs-from-vim-for-clojureclojurescript-development" rel="alternate"></link><published>2015-08-13T06:00:00-07:00</published><updated>2015-08-13T06:00:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2015-08-13:/blog/2015/08/switching-to-spacemacs-from-vim-for-clojureclojurescript-development</id><summary type="html">&lt;p&gt;Why a longtime Vim user moved to Spacemacs for Clojure and ClojureScript development, seeking more complete debugging and refactoring tools.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Clojure has been my primary programming language for a couple of years now. During this period, I have relied on my trusty Vim text editor as the development environment. Coding Clojure in Vim had been an enjoyable experience with these excellent Vim plugins:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/guns/vim-clojure-static"&gt;vim-clojure-static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tpope/vim-fireplace"&gt;fireplace.vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vim.org/scripts/script.php?script_id=3998"&gt;paredit.vim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/luochen1990/rainbow"&gt;Rainbow Parentheses Improved&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/guns/vim-clojure-highlight"&gt;vim-clojure-highlight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https:://github.com/venantius/vim-cljfmt"&gt;vim-cljfmt&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So, why am I switching? Well, Clojure is, after all, a LISP. The tooling coverage for Clojure in the LISP's natural habitat, Emacs, is simply more complete than in Vim. I did not realize the extent of the discrepancy until last week, when some guys in the Clojure meetup demonstrated impressive refactoring features of their Emacs Clojure development environment.&lt;/p&gt;
&lt;p&gt;To be fair, fireplace is doing an adequate job of supporting the most of dynamic features necessary for Clojure programming: code evaluation, documents lookup, tests and so on. I have been productive with it in the last couple of years. On the other hand, as my projects grow bigger and more complex, better support for debugging and refactoring seems to become desirable. These capabilities exist in Emacs.&lt;/p&gt;
&lt;p&gt;Of course, I am not about to give up the Vim style text editing. As a HCI researcher in my previous life, I know that theoretically, Vim style text editing is simply better than text editing with GUI and a mouse, because Fitts' Law is real and it hurts. In addition, the superiority of modal editor vi over non-modal editor emacs for text editing has been empirically established as far back as 1983&lt;a href="#footnote1_e69wwp8" id="footnoteref1_e69wwp8" class="see-footnote" title="Poller, M.F., Garter, S.K. A Comparative Study of Moded and Modeless Text Editing by Experienced Editor Users. In Proceedings of CHI &amp;#39;83, pp 166-170"&gt;1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For my case, an ideal situation would be to keep the text editing style of Vim, but use it in Emacs to get the benefit of extensive Clojure support. Not surprisingly, plenty of people have worked towards such solutions. The latest effort is in the form of &lt;a href="https://github.com/syl20bnr/spacemacs"&gt;spacemacs&lt;/a&gt;, a fantastic open source project that is enjoying an outpouring enthusiasm from the community, earning more than 3000 github stars in a very short time.&lt;/p&gt;
&lt;p&gt;I had to try it. Try as I did. And I can say that I am not disappointed.&lt;/p&gt;
&lt;p&gt;To be honest, the on-boarding process left a lot to be desired. First, on OSX, there's already a default installation of emacs, which would not work with spacemacs. The recommended homebrew installation of emacs is simple enough, but one needs to rename the default emacs and make the homebrew one the default. This is not mentioned in the guide.&lt;/p&gt;
&lt;p&gt;I found configuring the editor to be surprisingly easy, considering I knew nothing about emacs before (other than the key combination to quit from one). The majority of the Vim key bindings I tried work as desired. The ones that did not work are not hard to change. Within a couple of hours, I have managed to create a configuration that replicates most of the key bindings of paredit.vim, which I need to be productive coding Clojure. Here are my &lt;code&gt;dotspacemacs/config&lt;/code&gt; to achieve these and more.&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;defun&lt;/strong&gt;&lt;/font&gt; remove-background-color &lt;font color="#9a7200"&gt;()&lt;/font&gt;&lt;br&gt;
  &lt;font color="#009799"&gt;"Useful for transparent terminal."&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;unless&lt;/strong&gt;&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;display-graphic-p &lt;font color="#9a7200"&gt;(&lt;/font&gt;selected-frame&lt;font color="#9a7200"&gt;))&lt;/font&gt;&lt;br&gt;
    &lt;font color="#9a7200"&gt;(&lt;/font&gt;set-face-background &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;default&lt;/font&gt; &lt;font color="#009799"&gt;"unspecified-bg"&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;selected-frame&lt;font color="#9a7200"&gt;))))&lt;/font&gt;&lt;br&gt;
&lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;defun&lt;/strong&gt;&lt;/font&gt; dotspacemacs/config &lt;font color="#9a7200"&gt;()&lt;/font&gt;&lt;br&gt;
  &lt;font color="#009799"&gt;"Configuration function.&lt;/font&gt;&lt;br&gt;
&lt;font color="#009799"&gt; This function is called at the very end of Spacemacs initialization after&lt;/font&gt;&lt;br&gt;
&lt;font color="#009799"&gt;layers configuration."&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; Make evil-mode up/down operate in screen lines instead of logical lines&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-motion-state-map &lt;font color="#009799"&gt;"j"&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;evil-next-visual-line&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-motion-state-map &lt;font color="#009799"&gt;"k"&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;evil-previous-visual-line&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; Also in visual mode&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-visual-state-map &lt;font color="#009799"&gt;"j"&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;evil-next-visual-line&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-visual-state-map &lt;font color="#009799"&gt;"k"&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;evil-previous-visual-line&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; clojure mode config&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;require&lt;/strong&gt;&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;clojure-mode-extra-font-locking&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;add-hook &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;clojure-mode-hook&lt;/font&gt; &lt;font color="#9a7200"&gt;&lt;strong&gt;#'smartparens-strict-mode&lt;/strong&gt;&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;add-hook &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;clojure-mode-hook&lt;/font&gt; &lt;font color="#9a7200"&gt;&lt;strong&gt;#'evil-smartparens-mode&lt;/strong&gt;&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;add-hook &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;clojure-mode-hook&lt;/font&gt; &lt;font color="#9a7200"&gt;&lt;strong&gt;#'rainbow-delimiters-mode&lt;/strong&gt;&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; start a light theme when launched as GUI&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;display-graphic-p&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
      &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;progn&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
        &lt;font color="#9a7200"&gt;(&lt;/font&gt;disable-theme &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;darkburn&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
        &lt;font color="#9a7200"&gt;(&lt;/font&gt;load-theme &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;leuven&lt;/font&gt; &lt;font color="#719899"&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
        &lt;font color="#9a7200"&gt;(&lt;/font&gt;enable-theme &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;leuven&lt;/font&gt;&lt;font color="#9a7200"&gt;)))&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; remove background color for both server and client&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;add-hook &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;window-setup-hook&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;remove-background-color&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;add-hook &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;server-visit-hook&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;remove-background-color&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; remove trailing whitespace when saving&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;add-hook &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;before-save-hook&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;delete-trailing-whitespace&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; toggle comments&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",c "&lt;/font&gt; &lt;font color="#009799"&gt;" cl"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; match paredit.vim key-binding&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",W"&lt;/font&gt; &lt;font color="#009799"&gt;" kw"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;  &lt;font color="#719872"&gt;; wrap with ()&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",w["&lt;/font&gt;        &lt;font color="#719872"&gt;; wrap with []&lt;/font&gt;&lt;br&gt;
    &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;lambda&lt;/strong&gt;&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#9a7200"&gt;&lt;strong&gt;&amp;amp;optional&lt;/strong&gt;&lt;/font&gt; arg&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;interactive &lt;font color="#009799"&gt;"P"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;sp-wrap-with-pair &lt;font color="#009799"&gt;"["&lt;/font&gt;&lt;font color="#9a7200"&gt;)))&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",w{"&lt;/font&gt;        &lt;font color="#719872"&gt;; wrap with {}&lt;/font&gt;&lt;br&gt;
    &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#719899"&gt;&lt;strong&gt;lambda&lt;/strong&gt;&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;&lt;font color="#9a7200"&gt;&lt;strong&gt;&amp;amp;optional&lt;/strong&gt;&lt;/font&gt; arg&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;interactive &lt;font color="#009799"&gt;"P"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#9a7200"&gt;(&lt;/font&gt;sp-wrap-with-pair &lt;font color="#009799"&gt;"{"&lt;/font&gt;&lt;font color="#9a7200"&gt;)))&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",S"&lt;/font&gt; &lt;font color="#009799"&gt;" kW"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;  &lt;font color="#719872"&gt;; splice, i.e unwrap an sexp&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",J"&lt;/font&gt; &lt;font color="#009799"&gt;" kJ"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;  &lt;font color="#719872"&gt;; join two sexps&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",O"&lt;/font&gt; &lt;font color="#9a7200"&gt;'&lt;/font&gt;&lt;font color="#9a7599"&gt;sp-split-sexp&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#719872"&gt;; split an sexp&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",I"&lt;/font&gt; &lt;font color="#009799"&gt;" kr"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;  &lt;font color="#719872"&gt;; raise current symbol&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#9a7200"&gt;(&lt;/font&gt;kbd &lt;font color="#009799"&gt;", &amp;lt;up&amp;gt;"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#009799"&gt;" kE"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#719872"&gt;; splice kill backward&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#9a7200"&gt;(&lt;/font&gt;kbd &lt;font color="#009799"&gt;", &amp;lt;down&amp;gt;"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#009799"&gt;" ke"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt; &lt;font color="#719872"&gt;; forward&lt;/font&gt;&lt;br&gt;
  &lt;font color="#719872"&gt;;; These are different from vim, here cursor should NOT be on delimits&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",&amp;gt;"&lt;/font&gt; &lt;font color="#009799"&gt;" ks"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;  &lt;font color="#719872"&gt;; forward slurp&lt;/font&gt;&lt;br&gt;
  &lt;font color="#9a7200"&gt;(&lt;/font&gt;define-key evil-normal-state-map &lt;font color="#009799"&gt;",&amp;lt;"&lt;/font&gt; &lt;font color="#009799"&gt;" kS"&lt;/font&gt;&lt;font color="#9a7200"&gt;)&lt;/font&gt;  &lt;font color="#719872"&gt;; backward slurp&lt;/font&gt;&lt;br&gt;
&lt;font color="#9a7200"&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;As can be seen, all these functionality of Vim have already been coded up by someone and included in spacemacs as functions, all I did was changing their key-bindings. That was easy :-). I am looking forward to the journey ahead with spacemacs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span id="footnote1_e69wwp8"&gt;&lt;a href="#footnoteref1_e69wwp8" class="footnote-label"&gt;1.&lt;/a&gt; Poller, M.F., Garter, S.K. A Comparative Study of Moded and Modeless Text Editing by Experienced Editor Users. In Proceedings of CHI '83, pp 166-170&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="opinion"></category><category term="Editor"></category><category term="Spacemacs"></category><category term="Programming"></category><category term="Clojure"></category></entry><entry><title>Juji Personality Profile for Mayor Stubbs</title><link href="https://yyhh.org/blog/2015/03/juji-personality-profile-for-mayor-stubbs" rel="alternate"></link><published>2015-03-19T04:53:00-07:00</published><updated>2015-03-19T04:53:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2015-03-19:/blog/2015/03/juji-personality-profile-for-mayor-stubbs</id><summary type="html">&lt;p&gt;Juji builds a personality profile from Mayor Stubbs' tweets, giving the feline mayor a fitting description as a curious investigator.&lt;/p&gt;</summary><content type="html">&lt;p&gt;What makes Mayor Stubbs special?&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href="https://juji.io/me/mayorstubbs/basic"&gt;personality (or shall I say, catality) profile for Mayor Stubbs&lt;/a&gt; constructed by &lt;a href="https://juji.io"&gt;Juji&lt;/a&gt; based on Mayor Stubbs' tweets.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://juji.io/me/mayorstubbs/basic"&gt;&lt;img src="https://farm8.staticflickr.com/7284/16834543076_c586586022_c.jpg" width="656" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Have you meet Mayor Stubbs? Does this sound like him?&lt;/p&gt;
&lt;p&gt;What really makes me smile is the summary of the profile. Mayor Stubbs is "curious investigator". This is amazingly accurate: is there a cat that is not curious? I don't think so.&lt;/p&gt;
&lt;p&gt;Does your pet have its own twitter or Facebook account? If so, check out its &lt;a href="https://juji.io"&gt;Juji profile&lt;/a&gt; or check out your own or your friends'. It's super fun.&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category><category term="Juji"></category></entry><entry><title>Museum and Cultural Tour of Bulgaria in 9 Days - Day 2 (Boyana Church)</title><link href="https://yyhh.org/blog/2014/04/museum-and-cultural-tour-of-bulgaria-in-9-days-day-2-boyana-church" rel="alternate"></link><published>2014-04-05T05:05:00-07:00</published><updated>2014-04-05T05:05:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2014-04-05:/blog/2014/04/museum-and-cultural-tour-of-bulgaria-in-9-days-day-2-boyana-church</id><summary type="html">&lt;p&gt;A visit to Boyana Church at the end of the tour's second day, with notes on its medieval frescoes and illustrated references for the interior.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;&lt;/span&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;After a long drive, the last stop of &lt;a href="https://yyhh.org/blog/2013/12/museum-and-cultural-tour-bulgaria-9-days-day-2-rila-monastery"&gt;the second day&lt;/a&gt; of &lt;a href="https://yyhh.org/blog/2013/08/museum-and-cultural-tour-bulgaria-9-days-preface-%E4%BF%9D%E5%8A%A0%E5%88%A9%E4%BA%9A%E6%96%87%E5%8C%96%E5%8E%86%E5%8F%B2%E4%B9%9D%E6%97%A5%E6%B8%B8-%E5%89%8D%E8%A8%80%EF%BC%89"&gt;our trip&lt;/a&gt; is National Museum of Boyana Church, a UNESCO World Heritage Site&lt;/span&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;.&lt;/span&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt; It is a very small church, originally built in the lat 10th or early 11th century, with the addition of the central wing in the 13th century.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;&lt;img src="https://farm8.staticflickr.com/7396/9595200693_d2b2e57783_z.jpg" width="468" height="312" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;&lt;img src="https://farm3.staticflickr.com/2890/9595080927_ccf2cb7d32_z.jpg" width="468" height="312" alt="Buyala Church" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000; font-family: Tahoma; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; display: inline !important; float: none;"&gt;It is famous because of its frescoes from 1259, which demonstrate the exceptional achievements of mediaeval Bulgarian culture. For obvious reason, photography is not permitted in the church. Here are some representative pictures from the Web (credits go to Wikipedia)&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Boyana_Angel.jpg/200px-Boyana_Angel.jpg" width="200" height="261" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Boyana_Church_ship.jpg/200px-Boyana_Church_ship.jpg" width="200" height="185" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/6/65/Desislava.jpg" width="397" height="326" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category></entry><entry><title>Museum and Cultural Tour of Bulgaria in 9 Days - Day 2 (Rila Monastery)</title><link href="https://yyhh.org/blog/2013/12/museum-and-cultural-tour-of-bulgaria-in-9-days-day-2-rila-monastery" rel="alternate"></link><published>2013-12-13T22:39:00-08:00</published><updated>2013-12-13T22:39:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2013-12-13:/blog/2013/12/museum-and-cultural-tour-of-bulgaria-in-9-days-day-2-rila-monastery</id><summary type="html">&lt;p&gt;A photo tour of Rila Monastery, from its murals and bell tower to a nearby lunch stop, during the second day of a Bulgarian cultural trip.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7438/9594386823_96f739dfc8_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;The second day of &lt;a href="https://yyhh.org/blog/2013/08/museum-and-cultural-tour-bulgaria-9-days-preface-%E4%BF%9D%E5%8A%A0%E5%88%A9%E4%BA%9A%E6%96%87%E5%8C%96%E5%8E%86%E5%8F%B2%E4%B9%9D%E6%97%A5%E6%B8%B8-%E5%89%8D%E8%A8%80%EF%BC%89"&gt;our trip&lt;/a&gt; began with a long drive from Sofia to Rila Monastery, the largest and most famous Eastern Orthodox monastery in Bulgaria.  It is the first UNESCO World Heritage Site in Bulgaria we visited in our trip.&lt;/p&gt;
&lt;p&gt;This beautiful monastery is situated in the southwestern Rila Mountains.  Founded in the 10th century, the Rila Monastery is regarded as one of Bulgaria's most important cultural, historical and architectural monuments. The monastery is named after its founder, the hermit Ivan of Rila (876 - 946 AD).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5486/9594409495_459c0bc078_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5513/9597205870_da02accb4c_z.jpg" width="342" height="513" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5333/9594480911_b484488c53_z.jpg" width="339" height="508" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="flower" src="https://farm3.staticflickr.com/2853/9597494852_8e33d0c64d_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Beautiful mural&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm3.staticflickr.com/2892/9597500144_02771eb4cb_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="mural" src="https://farm6.staticflickr.com/5349/9594740437_ff6bcea4a5_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Bell Tower&lt;/p&gt;
&lt;p&gt;&lt;img alt="tower" src="https://farm4.staticflickr.com/3696/9594745493_0c417e3737_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Sneak peek of the Monastery from the window of the tower&lt;/p&gt;
&lt;p&gt;&lt;img alt="window" src="https://farm4.staticflickr.com/3809/9597595554_ffb67aa3b1_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Ancient mural inside the tower&lt;/p&gt;
&lt;p&gt;&lt;img alt="tower mural" src="https://farm8.staticflickr.com/7307/9597698830_bf50b2ed78_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Long line outside of the Monastery&lt;/p&gt;
&lt;p&gt;&lt;img alt="line" src="https://farm3.staticflickr.com/2836/9594636891_514c0ae5fd_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;A cat enjoying an afternoon nap near the Monastery before waked by cat-loving tourists coming to pet it. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7347/9594574875_10e1984604_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;A food stand nearby to grab a quick lunch.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3758/9597386252_3bf5174d9e_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;Tip: Remember to bring your own water bottle. There is a fountain right outside of the Monestery to refill it with real spring water, helping save $$$ and our mother earth.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm3.staticflickr.com/2850/9594643297_19289d96f0_z.jpg" width="427" height="640" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category></entry><entry><title>Museum and Cultural Tour of Bulgaria in 9 Days - Day 1 (More)</title><link href="https://yyhh.org/blog/2013/09/museum-and-cultural-tour-of-bulgaria-in-9-days-day-1-more" rel="alternate"></link><published>2013-09-21T18:22:00-07:00</published><updated>2013-09-21T18:22:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2013-09-21:/blog/2013/09/museum-and-cultural-tour-of-bulgaria-in-9-days-day-1-more</id><summary type="html">&lt;p&gt;Photos from Sofia's National Archaeological Museum, highlighting Thracian gold jewelry, a wreath, and treasures from a royal grave.&lt;/p&gt;</summary><content type="html">&lt;p&gt;We were quite amazed by the National Archaeological Museum, especially the Thracian treasures. &lt;/p&gt;
&lt;p&gt;The museum is located in the largest and oldest former Ottoman Mosque in Sofia.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3767/9593378357_362876e88d_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;Thracian treasures. Can you believe that they were made before the Roman Empire?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7422/9595881850_7f8e541f88_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm3.staticflickr.com/2893/9596021966_1ae6f9c1a8_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3812/9595974478_41156a3280_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5550/9593185523_17c8180736_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;Gold jewery&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7338/9595940004_ff09309a6c_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3682/9595929476_936e2614bc_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3779/9595887346_00f873cda1_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3667/9595898894_bc717441d8_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;Gold wreath&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3804/9595915294_8b2c7985e5_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5331/9593301731_491a8fc48a_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;Gold mask and ring from Thracian king's grave.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5542/9593233895_2a78b125c4_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.staticflickr.com/3758/9593243141_60e94df4e2_z.jpg" width="640" height="427" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category></entry><entry><title>Museum and Cultural Tour of Bulgaria in 9 Days - Day 1</title><link href="https://yyhh.org/blog/2013/09/museum-and-cultural-tour-of-bulgaria-in-9-days-day-1" rel="alternate"></link><published>2013-09-08T04:31:00-07:00</published><updated>2013-09-08T04:31:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2013-09-08:/blog/2013/09/museum-and-cultural-tour-of-bulgaria-in-9-days-day-1</id><summary type="html">&lt;p&gt;The first day of a nine-day cultural tour of Bulgaria begins with photos from Sofia, the city of lions.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;span style="font-family: georgia,palatino; font-size: medium;"&gt;(1) Sign of Sofia --- City of Lion.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino; font-size: medium;"&gt;&lt;img src="https://farm3.staticflickr.com/2830/9592419271_3a67bacd31.jpg" width="500" height="333" /&gt;&lt;/span&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category></entry><entry><title>How to get a kitty manicure</title><link href="https://yyhh.org/blog/2013/09/how-to-get-a-kitty-manicure" rel="alternate"></link><published>2013-09-04T05:34:00-07:00</published><updated>2013-09-04T05:34:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2013-09-04:/blog/2013/09/how-to-get-a-kitty-manicure</id><summary type="html">&lt;p&gt;Tom presents a playful photo guide to his weekly kitty manicure and pedicure, with relaxation, paw massages, and a little help from his mom.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Speaker: Tom&lt;/p&gt;
&lt;p&gt;Dear fellow kitties, I am going to show you how to get a kitty manicure and pedicure.&lt;/p&gt;
&lt;p&gt;First of all, let me show you my beautiful finger nails. My mom polishes each and every one of them on a weekly basis. Such weekly pampering is essential for a purrfect kitty like me.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5155/5899746253_57b0eb9cbc.jpg" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Now, let me show you how to get a kitty manicure.&lt;/p&gt;
&lt;p&gt;First of all, relax and get each of your finger massaged. I like to sit on my mommy's lap to do the massage, but Mayori prefers to get her massage in her favorite bed.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5488/9656330736_40e443d125_o.jpg" width="405" height="543" /&gt;&lt;/p&gt;
&lt;p&gt;After the massage, you may feel a bit sleepy. This is a good time to  get your manicure.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7414/9653082559_2d9b92717f_b.jpg" width="412" height="550" /&gt;&lt;/p&gt;
&lt;p&gt;Continue relaxing and enjoy your pedicure.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5542/9656317344_cfdd59dac0_b.jpg" width="414" height="553" /&gt;&lt;/p&gt;
&lt;p&gt;It is just this simple --- just relax and enjoy!  (^-^)&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Museum and Cultural Tour of Bulgaria in 9 Days --- Preface (保加利亚文化历史九日游 - 前言）</title><link href="https://yyhh.org/blog/2013/08/museum-and-cultural-tour-of-bulgaria-in-9-days-preface-bao-jia-li-ya-wen-hua-li-shi-jiu-ri-you-qian-yan" rel="alternate"></link><published>2013-08-25T18:36:00-07:00</published><updated>2013-08-25T18:36:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2013-08-25:/blog/2013/08/museum-and-cultural-tour-of-bulgaria-in-9-days-preface-bao-jia-li-ya-wen-hua-li-shi-jiu-ri-you-qian-yan</id><summary type="html">&lt;p&gt;Planning a nine-day cultural tour of Bulgaria with a private driver and guide, including the itinerary, hotel arrangements, and useful reading.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="https://farm6.staticflickr.com/5456/9628131706_89d4e51472.jpg" width="500" height="333" alt="IMGP2315" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;&lt;strong&gt;Planning&lt;/strong&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;&lt;span style="font-size: medium;"&gt;Following my usual &lt;a href="https://yyhh.org/blog/2011/10/planning-dream-trip-italy-easy-way"&gt;strategy for travel planning&lt;/a&gt;, I first got some rough ideas on the highlights of the country by &lt;/span&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="font-size: medium;"&gt;referring to the "&lt;span class="pull-left"&gt;Best of Bulgaria in 12 Days Tour" by Steve Rick&lt;/span&gt;. Based on Huahai and my own schedule, I then decided that we could spend at most 9 days for the trip. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;&lt;span class="pull-left"&gt;Usually, we would do self-driving tour for such a trip. However, I found out that it may not be very easy to go to some of the places on our own due to the language barrier.  Given this potential issue plus our busy schedule due to work, I decided to use a tour company to help the planning. Fortunately, custom tours in Bulgaria are quite affordable. We used Traventuria &lt;/span&gt;(&lt;a href="https://traventuria.com/"&gt;https://traventuria.com/&lt;/a&gt;), which have received great reviews on tripadvisor. Communications with the company was very easy. After a few email exchanges, we settled down on the following iternary. Traventuria helped us book all the hotels and also was responsible for providing transportation, including a private car and driver (who also served as our translator and tour guide).&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;&lt;span class="pull-left"&gt;Equipped ourselves &lt;/span&gt;a English guide book: &lt;a href="https://www.amazon.com/gp/product/0756670136/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0756670136&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20" id="static_txt_preview"&gt;Bulgaria (EYEWITNESS TRAVEL GUIDE)&lt;/a&gt;, we were ready for our big trip!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;BTW, I highly recommend this book, which turned out to be extremely helpful during the trip, as not every place we went to provides descriptions in English. In addition, we  also found a couple of new places from the book to add to the original iternary (e.g. Stone Forest).&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;&lt;strong&gt;Iternary&lt;/strong&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 0 Pick-up from Sofia airport and transfer to Hilton Hotel.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 1 &lt;a href="https://yyhh.org/blog/2013/09/museum-and-cultural-tour-bulgaria-9-days-day-1-%E4%BF%9D%E5%8A%A0%E5%88%A9%E4%BA%9A%E6%96%87%E5%8C%96%E5%8E%86%E5%8F%B2%E4%B9%9D%E6%97%A5%E6%B8%B8-%E7%AC%AC%E4%B8%80%E5%A4%A9-%EF%BC%89"&gt;Tour of Sofia&lt;/a&gt; (about 3 hrs) + &lt;a href="https://yyhh.org/blog/2013/09/museum-and-cultural-tour-bulgaria-9-days-day-1-more"&gt;Archaeological Museum&lt;/a&gt;.&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 2 &lt;a href="https://yyhh.org/blog/2013/12/museum-and-cultural-tour-bulgaria-9-days-day-2-rila-monastery"&gt;Rila Monastery&lt;/a&gt; + Buyala Church &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 3 Etara open-air museum + Veliko Tarnovo + Tsarevets Fortress&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 4 Rousse + Roussenski Lom&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 5 Madara Horseman + Stone Forest + Varna&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 6 Nessebar&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 7 Plovdiv&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 8 Bachkovo Monastery + Shiroka Luka  + Devin&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 9 Devils Throat Cave + Yagodina Cave (return to Sofia) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; font-family: georgia,palatino;"&gt;Day 10 Departure from Sofia airport&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;&lt;strong&gt;准备和安排&lt;/strong&gt;：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;这次选在保加利亚度假主要的原因是YY要在这里参加一个为期将近一周的学术会议, 还是安排一个旅游项目才对得起来回在飞机上消耗的差不多两天的时间和我们几个月前得的一年有效期的法国申根签证。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;YY一向擅长懒人旅游攻略，绝不会花超过一两个周末的时间做功课。而这次YY懒人旅游攻略又上了一个新的层次。在参考了Steven Rick的十二天的保加利亚旅游路线之后，YY决定至少得有一周以上的假期，而且主要以看保加利亚的世界文化遗产为主。不过我们工作都挺忙的，所以给自己放一周假加上前后的周末也就差不多是极限了。YY又开始研究给HH定票的事情。八月是欧洲的旅游旺季，飞机票都其贵无比，而里程票根本就没有。幸好可以用积累了多年的信用卡的点数来换票还稍微便宜一些，但也花了快十三万点。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;机票订下了以后，YY先在tripadvisor上找了一个最受好评的旅行社，让他们按以上要求安排一个合适的路线和提供估价。看了路线和估价后YY决定一切让旅行社包办，因为似乎不比自己安排贵多少，可是需要准备需要的事情和路上可能遇到的麻烦却少了很多。 另外旅行社也提供自驾游，但是这里物价便宜而我们又语言不通上包辆车确实是省时省心的好办法，特别是我们要去的一些地方非常偏远，用GPS也不好找，在迷路的时候可能会让两人都很紧张。话说平时辛苦挣钱可不就是为了好好花吗？于是在几个电子邮件往来加上付款加上付款之后，行程就订下来了。YY从网上买了一本保加利亚旅游指南( &lt;a href="https://www.amazon.com/gp/product/0756670136/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0756670136&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20" id="static_txt_preview"&gt;Bulgaria (EYEWITNESS TRAVEL GUIDE)&lt;/a&gt;就算是做完了所有必须的准备工作了。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;&lt;strong&gt;基本行程&lt;/strong&gt;：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第0天：HH被从索非亚机场接到索非亚希尔顿酒店，和在这里已经开了一周会的YY会合&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第1天：&lt;a href="https://yyhh.org/blog/2013/09/museum-and-cultural-tour-bulgaria-9-days-day-1-%E4%BF%9D%E5%8A%A0%E5%88%A9%E4%BA%9A%E6%96%87%E5%8C%96%E5%8E%86%E5%8F%B2%E4%B9%9D%E6%97%A5%E6%B8%B8-%E7%AC%AC%E4%B8%80%E5%A4%A9-%EF%BC%89"&gt;索非亚一日游&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第2天：Rila修道院及Boyala教堂 （住索非亚）&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第3天：Etara民俗村, &lt;span style="color: #000000;"&gt;查雷维茨皇宫&lt;/span&gt;(住大特尔诺沃)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第4天： 鲁塞, Roussenski Lom&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第5天： &lt;span class="short_text"&gt;马达拉骑士(&lt;/span&gt;Madara Horseman)， 石头森林（Stone Forest） 瓦尔纳 （住瓦尔纳）&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第6天： 内塞巴尔(Nessebar)一日游 （住内塞巴尔）&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第7天： 普罗夫迪夫（Plovdiv）一日游 （住普罗夫迪夫）&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第8天： Bachkovo Monastery - Shiroka Luka ,Devin&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第9天：Devils Throat Cave and/or Yagodina (回索非亚)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: georgia,palatino;"&gt;第10天：回家&lt;/span&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category></entry><entry><title>My First Encounter with Dirty Diaper</title><link href="https://yyhh.org/blog/2013/01/my-first-encounter-with-dirty-diaper" rel="alternate"></link><published>2013-01-20T08:02:00-08:00</published><updated>2013-01-20T08:02:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2013-01-20:/blog/2013/01/my-first-encounter-with-dirty-diaper</id><summary type="html">&lt;p&gt;Discovering dirty diapers left in the guest bathroom after a party prompts a reflection on considerate disposal when visiting someone else's home.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today I have encountered dirty diaper for the very first time in my life and it is not pretty.  While doing routine cleaning of our guest bathroom, I was shocked to discover a stack of dirty diaper deposited in the trash can in our guest bathroom.  I am still struggling on how to get rid of the terrible smell of the trash can after dumping the diapers. We do not have anyone in need of diaper in the house.&lt;/p&gt;
&lt;p&gt;The only plausible explanation is that some guests attended our house party a few days ago left them behind.  I thought that all the books on how to raise kids include education on basic etiquettes when visiting other people's house. But obviously I was wrong! &lt;/p&gt;
&lt;p&gt;Out of curiosity, I searched online to see what is the expected diaper etiquette and found one &lt;a href="https://www.nytimes.com/2012/07/29/fashion/the-gravy-train-ends-here-social-qs.html"&gt;here&lt;/a&gt;. In summary, &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;No one leaves dirty diapers in a guest bathroom.   &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When visiting other people's house, one should "place the dirty diaper in a plastic bag (and twist-tie it shut), then place that bag inside your diaper bag, and ask your hosts where they would like you to dispose of it — presumably in a trash bin outdoors or an inside bin that’s emptied frequently. "  Had my guests know and follow this protocol, I would not have to deal with the smelly trash can problem in the guest bathroom!  &lt;/p&gt;</content><category term="experience"></category><category term="House"></category><category term="Etiquette"></category></entry><entry><title>Free Airport Wi-Fi? -- Don't Count on It in Europe (Update on 08/25/2013)</title><link href="https://yyhh.org/blog/2012/10/free-airport-wi-fi-dont-count-on-it-in-europe-update-on-08252013" rel="alternate"></link><published>2012-10-26T18:28:00-07:00</published><updated>2012-10-26T18:28:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-10-26:/blog/2012/10/free-airport-wi-fi-dont-count-on-it-in-europe-update-on-08252013</id><summary type="html">&lt;p&gt;Travel notes on limited or awkward airport Wi-Fi access in Paris, Madrid, and Frankfurt, with an update from August 2013.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I was traveling in Europe last week. While I enjoyed the history, culture and food very much, I was not a big fan of the airports. Like many people, I would like to stay connected most of the time, at least be able to access my emails and the Web from time to time (say every 2-3 hours). Unfortunately, passing through the following three airports in Europe is almost like returning back to stone age, in  terms of connectivities.&lt;/p&gt;
&lt;p&gt;Initially, I thought that CDG was pretty bad --- it does have free Wifi, but only for 15 minutes. Then I have to buy Wifi Access. However, at least I was able to browse the airport website for free. &lt;/p&gt;
&lt;p&gt;Then MAD really made me a bit mad ---- no any sort of Wifi whatsoever available, free or not!&lt;/p&gt;
&lt;p&gt;Now, FRA does provide 30 minutes free Wi-Fi. That's better, right? However, then you need to be able to receive text on your cell phone to get the pin.  Some genius obviously believes that everyone visiting FRA has a cell phone and every cell phone has service in FRA. Unfortunately, my cell phone does not work here; so no luck for me. :(  &lt;/p&gt;
&lt;p&gt;Of course, I can always spend a few Euro to buy Wi-Fi access.  However, free Wi-Fi in airports is almost a norm in today's world, isn't it? Even in developing countries such as El Salvador has free Wi-Fi in its airports.  Unfortunately, I don't really see the situation will likely to improve in the near future. This note is just a reminder to myself to load up my laptop and iPhone with things that I can work/read while in the airports off the grid.&lt;/p&gt;
&lt;p&gt;Update on 08/25/2013:------------------------------------------------&lt;/p&gt;
&lt;p&gt;It turns out that not all European airports are that bad. During my recent trips to Europe, I have discovered that SOF (Sofia airport in Bulgaria) provides unlimited free Wi-Fi. MUC (Munich airport) provides 30 minutes free Wi-Fi and requires only an email address. Even FRA seems to have updated their genious approach of providing free Wi-Fi as well and requires only an email address now. Things are looking up!  &lt;/p&gt;</content><category term="opinion"></category><category term="Travel"></category><category term="Technology"></category></entry><entry><title>Fixing Problems after Upgrading from Snow Leopard to Mountain Lion</title><link href="https://yyhh.org/blog/2012/09/fixing-problems-after-upgrading-from-snow-leopard-to-mountain-lion" rel="alternate"></link><published>2012-09-24T00:28:00-07:00</published><updated>2012-09-24T00:28:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2012-09-24:/blog/2012/09/fixing-problems-after-upgrading-from-snow-leopard-to-mountain-lion</id><summary type="html">&lt;p&gt;Fixes for problems encountered when upgrading a MacBook Pro from Snow Leopard to Mountain Lion, including broken SSH public-key access.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The IT department of my company has been urging us Mac users to upgrade OSX to Lion a long time ago. After getting a few papers submitted last week, I finally got around to upgrade the Snow Leopard for my Macbook Pro work machine. Since I couldn't find Lion on Apple Store any more, I decided to go straight to Mountain Lion. The download and installation went smoothly, and most things seemed to work after the upgrade. Here are a few things that broke and the fixes I found.&lt;/p&gt;
&lt;h3&gt;SSH with public key&lt;/h3&gt;
&lt;p&gt;Mountain Lion changed a few things that broke password-free SSH access to and from OSX using public/private key pairs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SSH from Mountain Lion to older SSH severs:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Mountain Lion upgraded openssh client to version 5.9p1. SSH to some older version of ssh server would not work ("Connection reset by peer") due to ciphers being too long. We can use a shorter one by adding to file "~/.ssh/config".&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="na"&gt;Host address\_of\_your\_ssh\_server  &lt;/span&gt;
&lt;span class="na"&gt;Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This problem is a known issue of openssh. I remember did this fix for my Linux machines.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;SSH to Mountain Lion:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This one took me a lot of googling to find the &lt;a href="https://www.hkwebentrepreneurs.com/2012/08/password-free-ssh-on-os-x-mountain-lion.html"&gt;cause&lt;/a&gt;. Basically, Mountain Lion changed /etc/sshd_config file, so that openssh server only checks "~/.ssh/authorized_keys" now, instead of checking both that and "~/.ssh/authorized_keys2". To fix this, all we need to do is to rename the later to the former.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;mv&lt;span class="w"&gt; &lt;/span&gt;~/.ssh/authorized_keys2&lt;span class="w"&gt; &lt;/span&gt;~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I find this change rather annoying, as it adds little benefit but creates a lot of troubles. For example, it broke my backup solution. I am using &lt;a href="https://backuppc.sourceforge.net/"&gt;backuppc&lt;/a&gt; to backup this Macbook to a central backup server through password-less SSH. It took me a while to debug when backuppc reported the problem.&lt;/p&gt;
&lt;h3&gt;Homebrew&lt;/h3&gt;
&lt;p&gt;Running "brew doctor" would show the information needed to fix homebrew. Basically, one had to install xcode 4.5, install command line tools, install X, and so on. A lot of downloads and wait time.&lt;/p&gt;
&lt;h3&gt;Latex&lt;/h3&gt;
&lt;p&gt;All the latex programs were not in path any more. Since my latex distribution was pretty old anyway. I chose to download the latest version of MacTex to install. It took a long time to download though.&lt;/p&gt;
&lt;h3&gt;Lotus Notes&lt;/h3&gt;
&lt;p&gt;Mountain Lion has its own Notes.app now, which conflicts with Lotus Notes. During upgrading, Lotus Notes will be moved to be under a directory "/Application/Lotus Notes Local" or something similar. All you need to do is to find Notes.app in there, and rename it something else, e.g. "LNotes.app", and move it back to be under "/Application".&lt;/p&gt;
&lt;h3&gt;Java&lt;/h3&gt;
&lt;p&gt;Java is not installed by default. When using applications require it, you will be prompted to install.&lt;/p&gt;
&lt;p&gt;In conclusion, the upgrade from Snow Leopard to Mountain Lion works reasonablly OK, but be prepared to fix some problems. I think the upgrade experience of OSX is not better than Linux, as both require a similar amount of tweakings and searching solutions. However, upgrading in OSX costs money. If this was not on company tab and by their urging, I would not have bothered.&lt;/p&gt;</content><category term="notebook"></category><category term="Software"></category><category term="OSX"></category></entry><entry><title>Pursue of the Perfect Solution for Cat Hair (1) --- Vacuum</title><link href="https://yyhh.org/blog/2012/08/pursue-of-the-perfect-solution-for-cat-hair-1-vacuum" rel="alternate"></link><published>2012-08-27T00:40:00-07:00</published><updated>2012-08-27T00:40:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-08-27:/blog/2012/08/pursue-of-the-perfect-solution-for-cat-hair-1-vacuum</id><summary type="html">&lt;p&gt;Experiences with several vacuum cleaners in a home with two long-haired cats, comparing cleanup on carpet, hardwood, and other surfaces.&lt;/p&gt;</summary><content type="html">&lt;p&gt;If you have one or more long hair cats at home, like our Mayori and Tom, you probably share the same dream as us --- a house without cat hair, at least a house without having cat hair everywhere.&lt;/p&gt;
&lt;p&gt;Towards this dream, we have tried out various products. Here is a list of the various vacuums we have used.&lt;/p&gt;
&lt;p&gt;1. &lt;a href="https://www.amazon.com/gp/product/B002HFDLCK/ref=as_li_qf_sp_asin_il?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B002HFDLCK&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20"&gt;Hoover WindTunnel T-Series Rewind Upright Vacuum&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.com/gp/product/B002HFDLCK/ref=as_li_qf_sp_asin_il?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B002HFDLCK&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20"&gt;&lt;img src="https://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B002HFDLCK&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=yunyaoshome-20" class="xygptcvqdiihxtebyxzn" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It work pretty well on carpet, but it is not good for hard surface like hardwood floor --- the air blowing out of it makes the cat hair flying everywhere. It's bagless, so cleaning it is not a very pleasant task. Fortunately, Huahai is usually the one doing the cleaning work. 😛&lt;/p&gt;
&lt;p&gt;Overall, this is a cheap and durable vacuum. Ours lasted for over 4 years with at least weekly usage. I would recommend getting it if you live in an all-carpet place or plan to use it in combination of another vacuum for hardwood/tile floor.&lt;/p&gt;
&lt;p&gt;2. &lt;a href="https://www.amazon.com/gp/product/B0006HUYGM/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B0006HUYGM&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20"&gt;Eureka Hand-Held Vacuum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.com/gp/product/B0006HUYGM/ref=as_li_qf_sp_asin_il?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B0006HUYGM&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20"&gt;&lt;img src="https://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B0006HUYGM&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=yunyaoshome-20" class="xygptcvqdiihxtebyxzn" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As indicated by many online reviews, this is a surprisingly powerful vacuum given it's size. I brought it to do some quick cleaning job. However, I don't really like it that much --- it's not cordless, so using it for quick cleaning is not particularly convenient. It is too heavy and too noisy for me to do any thorough cleaning job.  We have already got rid of it after having it sitting in our garage for over a year.&lt;/p&gt;
&lt;p&gt;3. &lt;a href="https://www.amazon.com/gp/product/B002IAY3N0/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B002IAY3N0&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20"&gt;Electrolux Ergorapido Bagless Cordless Handheld/Stick Vacuum Cleaner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.com/gp/product/B002IAY3N0/ref=as_li_qf_sp_asin_il?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B002IAY3N0&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20"&gt;&lt;img src="https://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B002IAY3N0&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=yunyaoshome-20" class="xygptcvqdiihxtebyxzn" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I like this vacuum a lot --- it is lightweighted and dual-usage. This is the one we have been using for nearly 5 years for quick cleaning job. (BTW, if you are Costco member, you can get it for lower price from Costoc than from Amazon.com, especially when it is on sale with coupon).&lt;/p&gt;
&lt;p&gt;4. &lt;a href="https://www.amazon.com/gp/product/B002TW208M/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=B002TW208M&amp;amp;link_code=as3&amp;amp;tag=yunyaoshome-20" id="static_txt_preview"&gt;Miele Olympus S2120 Canister Vacuum Cleaner&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This one is expensive but works like a dream, especially for cat hair as the air is blowing from the top. It is very powerful yet very quite. Great for both hardwood floor and carpet (with the &lt;a href="https://www.amazon.com/gp/product/B000HVHY10/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=B000HVHY10&amp;amp;link_code=as3&amp;amp;tag=yunyaoshome-20" id="static_txt_preview"&gt;Miele Floor Brush&lt;/a&gt;). This will be the vacuum that we are going to use for many year to come.&lt;/p&gt;
&lt;p&gt;5. &lt;a href="https://www.amazon.com/gp/product/B005GK3IVW/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;camp=211189&amp;amp;creative=373489&amp;amp;creativeASIN=B005GK3IVW&amp;amp;link_code=as3&amp;amp;tag=yunyaoshome-20" id="static_txt_preview"&gt;iRobot Roomba 770&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.com/gp/product/B005GK3IVW/ref=as_li_qf_sp_asin_il?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B005GK3IVW&amp;amp;linkCode=as2&amp;amp;tag=yunyaoshome-20"&gt;&lt;img src="https://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B005GK3IVW&amp;amp;Format=_SL160_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=yunyaoshome-20" class="xygptcvqdiihxtebyxzn" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even with Miele, we still need additional help --- Roomba is the perfect solution for busy people like us. If you had an old Roomba before and found cleaning it a pain, please take another look at it --- the cleaning tools coming with the newer generations of Roomba makes the cleaning much easier than before. This one is also a keeper.&lt;/p&gt;</content><category term="notebook"></category><category term="House"></category><category term="Pets"></category><category term="Appliance"></category></entry><entry><title>High Resolution Image for Pdflatex</title><link href="https://yyhh.org/blog/2012/08/high-resolution-image-for-pdflatex" rel="alternate"></link><published>2012-08-09T20:31:00-07:00</published><updated>2012-08-09T20:31:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-08-09:/blog/2012/08/high-resolution-image-for-pdflatex</id><summary type="html">&lt;p&gt;Notes on a pdfLaTeX pixel-dimension setting used while troubleshooting a blurry screenshot in a camera-ready conference paper.&lt;/p&gt;</summary><content type="html">&lt;p&gt;While preparing the camera-ready version for our CIKM demo, my colleagues and I found that the screenshot included in our paper appeared to be fairly blurry in the pdf version, even though the original .jpg file looks fine.&lt;/p&gt;
&lt;p&gt;I searched online to try to find the solutions. After a few trials and errors, adding the following two lines into the beginning of the latex files (before &lt;span style="font-family: courier new,courier;"&gt;\begin{document}&lt;/span&gt;) did the trick.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;\pdfpxdimen=1in&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new,courier;"&gt;\divide\pdfpxdimen by 300&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The above solution basically forces the pdf file generated at a higher resolution (in this case, 300 dpi) so that everything, including the images, looks better.&lt;/p&gt;
&lt;p&gt;The original solution comes from &lt;a href="https://stackoverflow.com/questions/5041492/latex-how-to-set-the-pdf-dpi-when-using-images"&gt;here&lt;/a&gt;.&lt;/p&gt;</content><category term="notebook"></category><category term="LaTeX"></category></entry><entry><title>Screen Saver Option Disabled on Windows 7/XP</title><link href="https://yyhh.org/blog/2012/08/screen-saver-option-disabled-on-windows-7xp" rel="alternate"></link><published>2012-08-01T17:07:00-07:00</published><updated>2012-08-01T17:07:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-08-01:/blog/2012/08/screen-saver-option-disabled-on-windows-7xp</id><summary type="html">&lt;p&gt;Recording a registry fix used when Windows 7 or XP grays out the screen saver's logon-on-resume option and triggers workplace security alerts.&lt;/p&gt;</summary><content type="html">&lt;p&gt;For unknown reason, my machines would suddenly disable their screen saver options (e.g. with the "on resume, display log on screen" check box grayed out). Whenever this happens, it would trigger the security alert and I will get a warning from the IT department to fix the issue.&lt;/p&gt;
&lt;p&gt;I am tired of having to hunting down the answer every time and therefore I am recording it here.&lt;/p&gt;
&lt;p&gt;The following method is what usually works for me.&lt;/p&gt;
&lt;p&gt;1. Go to "Start" type in "regedit"&lt;/p&gt;
&lt;p&gt;2. Go to&lt;/p&gt;
&lt;p&gt;[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Control Panel\Desktop]&lt;/p&gt;
&lt;p&gt;Delete the "ScreenSaverIsSecure" value.&lt;/p&gt;</content><category term="notebook"></category><category term="Software"></category><category term="Windows"></category></entry><entry><title>Machine Learning That Matters</title><link href="https://yyhh.org/blog/2012/07/machine-learning-that-matters" rel="alternate"></link><published>2012-07-26T21:20:00-07:00</published><updated>2012-07-26T21:20:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-07-26:/blog/2012/07/machine-learning-that-matters</id><summary type="html">&lt;p&gt;Reflections on Machine Learning That Matters and why computer science research should have practical impact, with encouragement to try industrial internships.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I happen to come across this excellent article from this year's ICML on &lt;a href="https://www.wkiri.com/research/papers/wagstaff-MLmatters-12.pdf"&gt;Machine Learning that Matters&lt;/a&gt;. I encourage everyone, especially computer science Ph.D students, to read it.&lt;/p&gt;
&lt;p&gt;As an industrial researcher who draws a lot of job satisfaction by making both scientific and practical impact, I completely agree with the author on that we need to work on research "that matters",  not just for machine learning. Many of the challenges outlined by the author are applicable to many other areas in computer science as well. &lt;/p&gt;
&lt;p&gt;If you have ever encounter questions from reviewers on the motivation of your work, reading this article can help you think about why your research does (or does not) matter.&lt;/p&gt;
&lt;p&gt;I would also strongly encourage all computer science Ph.D students to do at least one summer internship (especially in an industrial research lab). You will make new friends and get to work on cool projects. Most importantly, it can truly broaden your herizon and allow you to understand what kind of research matters.&lt;/p&gt;</content><category term="opinion"></category><category term="Research"></category><category term="MachineLearning"></category></entry><entry><title>Commonly Used Forms for Home Remodeling/Repairs</title><link href="https://yyhh.org/blog/2012/06/commonly-used-forms-for-home-remodelingrepairs" rel="alternate"></link><published>2012-06-09T00:49:00-07:00</published><updated>2012-06-09T00:49:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-06-09:/blog/2012/06/commonly-used-forms-for-home-remodelingrepairs</id><summary type="html">&lt;p&gt;A reference list of contract and payment forms gathered while managing home remodeling and repair projects.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As a new home owner, we have been going through a lot of home remodeling and repair projects. I found myself often search online for the same set of forms again and again. This post is to record all the forms that I often use and sometimes difficult to found.&lt;/p&gt;
&lt;p&gt;1. Simple contract (To be updated)&lt;/p&gt;
&lt;p&gt;2. &lt;a href="https://www.box.com/s/0ca14f155701f8021b9b"&gt;Payment forms (including those for both pregressive payments and final payments)&lt;/a&gt;&lt;/p&gt;</content><category term="experience"></category><category term="House"></category></entry><entry><title>Baby Cloth Shoe - First Attempt</title><link href="https://yyhh.org/blog/2012/06/baby-cloth-shoe-first-attempt" rel="alternate"></link><published>2012-06-01T00:50:00-07:00</published><updated>2012-06-01T00:50:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-06-01:/blog/2012/06/baby-cloth-shoe-first-attempt</id><summary type="html">&lt;p&gt;A first attempt at sewing baby cloth shoes as a gift for a niece, finished with handmade pompoms and notes on following the tutorial.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As a busy computer scientist, I don't really get to exercise my inner Martha too much. But I did somehow manage to make my first ever attempt on sewing projects --- baby cloth shoes (as gift for my niece).&lt;/p&gt;
&lt;p&gt;Here is the result --- I added the handmade pompom for extra cuteness. :)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm5.staticflickr.com/4034/4260345214_857f3812b3.jpg" width="500" height="333" alt="baby cloth shoe" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm5.staticflickr.com/4018/4259588689_e1288a85ba.jpg" width="500" height="333" alt="baby cloth shoe" /&gt;&lt;/p&gt;
&lt;p&gt;The detailed steps can be found from the following link&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.michaelmillerfabrics.com/blog/cloth_shoe.pdf"&gt;https://www.michaelmillerfabrics.com/blog/cloth_shoe.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I found the instructions there very easy to follow even for first-timers like myself. However, this is a fairly time consuming project (at least for me). I may do it again, but probably only when I am really bored. :-P&lt;/p&gt;</content><category term="experience"></category><category term="Childcare"></category><category term="Craft"></category></entry><entry><title>Cat Photography with iPhone 4s</title><link href="https://yyhh.org/blog/2012/05/cat-photography-with-iphone-4s" rel="alternate"></link><published>2012-05-19T01:19:00-07:00</published><updated>2012-05-19T01:19:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-05-19:/blog/2012/05/cat-photography-with-iphone-4s</id><summary type="html">&lt;p&gt;Testing the iPhone 4s camera with Mayori as the model, starting with cat portraits taken in natural light.&lt;/p&gt;</summary><content type="html">&lt;p&gt;It has been a while since Yunyao got her iPhone 4s, which is known for its "superb" camera --- "&lt;span class="st"&gt;8MP camera with all-new optics also shoots 1080p HD video"&lt;/span&gt;. 8MP on a cell phone sounds really impressive, does it? Maybe she finally can leave her big heavy Pentax for a while?&lt;/p&gt;
&lt;p&gt;So she tested its performance with her favoriate model: Mayori.&lt;/p&gt;
&lt;p&gt;First, let's test it under natural light setting:&lt;/p&gt;
&lt;p&gt;"What's up?"&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7194/7034156259_2dee7491ac.jpg" width="375" height="500" alt="Mayori" /&gt;&lt;/p&gt;</content><category term="opinion"></category><category term="Pets"></category><category term="Shopping"></category><category term="Technology"></category></entry><entry><title>"Count Number of Maps: First Exercises of Conceptual Mathematics in Clojure"</title><link href="https://yyhh.org/blog/2012/05/count-number-of-maps-first-exercises-of-conceptual-mathematics-in-clojure" rel="alternate"></link><published>2012-05-16T20:33:00-07:00</published><updated>2012-05-16T20:33:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2012-05-16:/blog/2012/05/count-number-of-maps-first-exercises-of-conceptual-mathematics-in-clojure</id><summary type="html">&lt;p&gt;Using Clojure to count maps between sets while working through early exercises in Lawvere's Conceptual Mathematics and learning category theory.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As &lt;a href="https://yyhh.org/blog/2012/04/start-learning-category-theory"&gt;previously mentioned&lt;/a&gt;, I am learning category theory, beginning with &lt;a href="https://en.wikipedia.org/wiki/William_Lawvere"&gt;Lawvere&lt;/a&gt;'s &lt;a href="https://www.amazon.com/Conceptual-Mathematics-First-Introduction-Categories/dp/052171916X"&gt;Conceptual Mathematics&lt;/a&gt; book. This is a very elementry book that assumes almost nothing as a background. However, it is still a math book, which requires doing some exercises. Since the book provides no answer to exercises, I decide to make my own and post them here as I did them. Hopefully someone will find them useful.&lt;/p&gt;
&lt;p&gt;Since a large part of category theory is constructive, I will try to implement the concepts computationally in order to understand them better. Cateogry theory has been implemented as types in some strong typed languages such as &lt;a href="https://www.cs.man.ac.uk/~david/categories/"&gt;ML&lt;/a&gt; and Haskell. I think it would be fun to see how it would look in a dynamic typed language such as Clojure. Even if I could not go very far, at minimum, I will have a mechanical means to check my solutions to the exercises.&lt;/p&gt;
&lt;p&gt;The first article of the book deals with the category of sets, and the main topic is about maps between sets. The second article talks about isomorphisms and related concepts. Some exercises (on page 20 and 47) are of the "how many maps are there" variety. Here are some Clojure code I used to calculate the results.&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;ns&lt;/font&gt;&lt;/span&gt; CM.core&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:use&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; clojure.math.combinatorics&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; all-maps&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of all the possible maps from a domain to &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  a codomain"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;domain codomain&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; domain &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; codomain&lt;span&gt;&lt;font color="#912f11"&gt;}&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#007080"&gt;zipmap&lt;/font&gt;&lt;/span&gt; %&lt;span&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;/span&gt; %&lt;span&gt;&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)])&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;        &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt;&lt;/span&gt; domain&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;cartesian-product&lt;/font&gt;&lt;/span&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt;&lt;/span&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;count&lt;/font&gt;&lt;/span&gt; domain&lt;font color="#698b22"&gt;)&lt;/font&gt; codomain&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; same-mapping-rule?&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return true if two mapping rules give the same results for a domain"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;domain r1 r2&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;every?&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;/span&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;=&lt;/font&gt;&lt;/span&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; r1 domain&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; r2 domain&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; same-map?&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return true if two maps are the same"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f g&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#800090"&gt;and&lt;/font&gt;&lt;/span&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;=&lt;/font&gt;&lt;/span&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; g&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;=&lt;/font&gt;&lt;/span&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; g&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#ee9a00"&gt;(&lt;/font&gt;same-mapping-rule? &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; g&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; compose-map&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a composed map, also ensure domains and codomains match"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f g&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt;&lt;/span&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#007080"&gt;=&lt;/font&gt;&lt;/span&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; g&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br /&gt;     &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; g&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;, &lt;br /&gt;      &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#007080"&gt;comp&lt;/font&gt;&lt;/span&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; g&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)}&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;     &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;throw&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;Exception. &lt;span&gt;&lt;font color="#077807"&gt;"Cannot compose, domain does not match codomain"&lt;/font&gt;&lt;/span&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; composed? &lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return true if map f and map g compose to map c"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f g c&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;same-map? c &lt;font color="#ee9a00"&gt;(&lt;/font&gt;compose-map f g&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; idempotent? &lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return true if the given map return the same results as when it is &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  applied twice"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;composed? f f f&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; solutions&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of maps that match the given predicates and go&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  from the given domain to given codomain"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;pred domain codomain&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;filter&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; pred &lt;font color="#ee9a00"&gt;(&lt;/font&gt;all-maps domain codomain&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; idempotent-maps&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of idempotent maps between a domain and itself &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  as the codomain"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;domain&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;solutions idempotent? domain domain&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; choice&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of maps that are applied before the given map to&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  return the same results as the given composed map, i.e. solution of &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  choice problem"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f c&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;solutions &lt;span&gt;&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;/span&gt;composed? f &lt;span&gt;&lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;/span&gt; c&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; c&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; determination&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of maps that are applied after the given map to&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  return the same results as the given composed map, i.e. solution of &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  determination problem"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;g c&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;solutions &lt;span&gt;&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;/span&gt;composed? &lt;span&gt;&lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;/span&gt; g c&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; g&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; c&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; section&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of maps that are sections of the given map"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;choice f &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; retraction&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of maps that are retractions of the given map"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;determination f &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; f&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; composed-solution-pairs &lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of pairs of maps that compose to a given map, with&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  the given shared domain in between"&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;domain c&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;filter&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;br /&gt;     &lt;span&gt;&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;/span&gt;composed? &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#007080"&gt;first&lt;/font&gt;&lt;/span&gt; %&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#007080"&gt;last&lt;/font&gt;&lt;/span&gt; %&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt; c&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;     &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;g &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;all-maps &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; c&lt;font color="#cd3700"&gt;)&lt;/font&gt; domain&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;           f &lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;all-maps domain &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; c&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;       &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;f g&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;       &lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt;&lt;/span&gt; retraction-section-pairs&lt;br /&gt;   &lt;span&gt;&lt;font color="#077807"&gt;"Return a lazy sequence of pairs of maps r and s, where r goes from domain&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  X to domain A,  s goes from A to X, and r of s is the same as the identity &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#077807"&gt;  map on A."&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;/span&gt;A X&lt;span&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;   &lt;font color="#cd3700"&gt;(&lt;/font&gt;composed-solution-pairs X &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; A &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; A &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;span&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; A &lt;span&gt;&lt;font color="#912f11"&gt;#{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#077807"&gt;"John"&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;"Mary"&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;"Sam"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; B &lt;span&gt;&lt;font color="#912f11"&gt;#{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#077807"&gt;"eggs"&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;"coffee"&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; U &lt;span&gt;&lt;font color="#912f11"&gt;#{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:b&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:p&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:q&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:r&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:s&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; D &lt;span&gt;&lt;font color="#912f11"&gt;#{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#077807"&gt;0&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; one-a &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; A &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; A &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; one-b &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; B &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; B &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; one-d &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; D &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; D &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; g &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; U &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; D &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:b&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;0&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:p&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;0&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:q&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;0&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:r&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:s&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;}})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; f &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; D &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; U &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#077807"&gt;0&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:b&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:r&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;}})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt;&lt;/span&gt; u &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:domain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; D &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:codomain&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; U &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:rule&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#077807"&gt;0&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:b&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#1f3f81"&gt;&lt;b&gt;:b&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#912f11"&gt;}})&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In this code, maps in category theory are simply implemented as Clojure's map data structure. So a map in category theory will have three keys in the implementation, a :domain, a :codomain, and a :rule. The first two are sets, and the last one is a function, which defines the actual mapping rule from domain to codomain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Article 1, Exercise 2.&lt;/em&gt;&lt;/strong&gt; How many different maps $f$ are there with domain $A$ and codomain $B$?&lt;/p&gt;
&lt;p&gt;Domain $A$ has 3 elements "John", "Mary" and "Sam", codomain $B$ has 2 elements "eggs" and "coffee". To find the answer, evaluate this in REPL:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (all-maps A B))&lt;/p&gt;
&lt;p&gt;8&lt;/p&gt;
&lt;p&gt;For our domain of 3 elements and codomain of 2 elements, the number of maps is 8, or $2^3$. If we try some other domains (Exercise 3, 4, 5), we will soon discover that the answer is always $$n^m$$ where $n$ and $m$ is the size of codomain and domain, respectively. The reason is simple: each and every element of the domain can pick any one of the elment of codomain as the target. So the first element in the domain has $n$ choices of target, the second can pick $n$ choices as well, and so on, doing this $m$ times, and multipling them all up gives the answer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Article 1, Exercise 6.&lt;/em&gt;&lt;/strong&gt; How many different maps $A \stackrel{f}{\longrightarrow} A$ satisfy $f \circ f = f$?&lt;/p&gt;
&lt;p&gt;Basically, this is asking how many maps are there that composes with itself to get the same results as itself. Such maps are called idempotent maps. The code to find the answer:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (idempotent-maps A))&lt;/p&gt;
&lt;p&gt;10&lt;/p&gt;
&lt;p&gt;Let's try Exercise 7, the number of idempotent maps for $B$:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (idempotent-maps B))&lt;/p&gt;
&lt;p&gt;3&lt;/p&gt;
&lt;p&gt;How about a domain with 4, 5 or 6 elments?&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (idempotent-maps #{1 2 3 4}))&lt;/p&gt;
&lt;p&gt;41&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (idempotent-maps #{1 2 3 4 5}))&lt;/p&gt;
&lt;p&gt;196&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (idempotent-maps #{1 2 3 4 5 6}))&lt;/p&gt;
&lt;p&gt;1057&lt;/p&gt;
&lt;p&gt;Hmm, 3, 10, 41, 196, 1057, ... what is the regularity here? It is not obvious. Let's examine the details of the first two maps and look at their rules:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (map :rule (idempotent-maps B))&lt;/p&gt;
&lt;p&gt;({"eggs" "coffee", "coffee" "coffee"} {"eggs" "eggs", "coffee" "coffee"} {"eggs" "eggs", "coffee" "eggs"})&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (map :rule (idempotent-maps A))&lt;/p&gt;
&lt;p&gt;({"Sam" "John", "Mary" "John", "John" "John"} {"Sam" "Sam", "Mary" "John", "John" "John"} {"Sam" "John", "Mary" "Mary", "John" "John"} {"Sam" "Mary", "Mary" "Mary", "John" "John"} {"Sam" "Sam", "Mary" "Mary", "John" "John"} {"Sam" "Sam", "Mary" "Sam", "John" "John"} {"Sam" "Mary", "Mary" "Mary", "John" "Mary"} {"Sam" "Sam", "Mary" "Mary", "John" "Mary"} {"Sam" "Sam", "Mary" "Mary", "John" "Sam"} {"Sam" "Sam", "Mary" "Sam", "John" "Sam"})&lt;/p&gt;
&lt;p&gt;The regularity seems to be this: either an element must map to itself, or it must map to an elment that maps to itself. For example, for domain $B$, if "eggs" maps to itself, "coffee" must either map to "coffee" or to "eggs". Cross mappings are not allowed. So "eggs" maps to "coffee" and "coffee" maps to "eggs" is illegal.&lt;/p&gt;
&lt;p&gt;Given this regularity, let's work out a formula for the number of idempotent maps. For a 2 element domain, there are two cases: both elements map to themselves, or both map to one element, so the total is ${2 \choose 2} + {2 \choose 1} = 3$; For a 3 element domain, there are three cases: all map to themselves, two map to themselves and the third maps to one of them, or all three map to one, total is ${3 \choose 3} + {3 \choose 2}{2^1} + {3 \choose 1} = 1+ 3\times2 + 3 = 10$; For 4 element domain, four cases: all map to themselves, three map to themselves and the fouth to one of three, two map to themselves and remaining two map to those two, or all map to one: ${4 \choose 4} + {4 \choose 3}{3^1} + {4 \choose 2}{2^2} + {4 \choose 1} = 1 + 4\times3 + 6\times4 + 4 = 41$; and so on... A general formula for the number of idempotent maps emerges, it is $$\sum\limits_{k=0}^n {n \choose k}k^{n-k}$$ Where $n$ is the size of the domain. Notice that we used the results of the previous exercise in the derivation: the number of maps is $|codomain|^{|domain|}$.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Article 1, Exercise 8.&lt;/em&gt;&lt;/strong&gt; Can you find a pair of maps $A \stackrel{f}{\longrightarrow} B \stackrel{g}{\longrightarrow} A$ for which $g \circ f = 1_A$?&lt;/p&gt;
&lt;p&gt;OK, this is asking if we can find a pair of maps that compose to an identity map of domain $A$, with the map $B$ in between. Let's see:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (composed-solution-pairs B one-a))&lt;/p&gt;
&lt;p&gt;0&lt;/p&gt;
&lt;p&gt;No such map pair exists, so it is not possible to go through $B$ back to $A$. What about going through $A$ itself?&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (composed-solution-pairs A one-a))&lt;/p&gt;
&lt;p&gt;6&lt;/p&gt;
&lt;p&gt;There are 6 such map pairs. It is the same as going through another 3 element domain:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (composed-solution-pairs #{1 2 3} one-a))&lt;/p&gt;
&lt;p&gt;6&lt;/p&gt;
&lt;p&gt;So when the domains have the same number of elements, it is possible for the map compositions to go through them back and forth. Let's look at the details of these map pairs:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (composed-solution-pairs #{1 2 3} one-a)&lt;/p&gt;
&lt;p&gt;([{:rule {3 "Sam", 2 "Mary", 1 "John"}, :domain #{1 2 3}, :codomain #{"John" "Mary" "Sam"}} {:rule {"Sam" 3, "Mary" 2, "John" 1}, :domain #{"John" "Mary" "Sam"}, :codomain #{1 2 3}}] [{:rule {3 "Mary", 2 "Sam", 1 "John"}, :domain #{1 2 3}, :codomain #{"John" "Mary" "Sam"}} {:rule {"Sam" 2, "Mary" 3, "John" 1}, :domain #{"John" "Mary" "Sam"}, :codomain #{1 2 3}}] [{:rule {3 "Sam", 2 "John", 1 "Mary"}, :domain #{1 2 3}, :codomain #{"John" "Mary" "Sam"}} {:rule {"Sam" 3, "Mary" 1, "John" 2}, :domain #{"John" "Mary" "Sam"}, :codomain #{1 2 3}}] [{:rule {3 "Mary", 2 "John", 1 "Sam"}, :domain #{1 2 3}, :codomain #{"John" "Mary" "Sam"}} {:rule {"Sam" 1, "Mary" 3, "John" 2}, :domain #{"John" "Mary" "Sam"}, :codomain #{1 2 3}}] [{:rule {3 "John", 2 "Sam", 1 "Mary"}, :domain #{1 2 3}, :codomain #{"John" "Mary" "Sam"}} {:rule {"Sam" 2, "Mary" 1, "John" 3}, :domain #{"John" "Mary" "Sam"}, :codomain #{1 2 3}}] [{:rule {3 "John", 2 "Mary", 1 "Sam"}, :domain #{1 2 3}, :codomain #{"John" "Mary" "Sam"}} {:rule {"Sam" 1, "Mary" 2, "John" 3}, :domain #{"John" "Mary" "Sam"}, :codomain #{1 2 3}}])&lt;/p&gt;
&lt;p&gt;Obviously, for each pair, the two map rules are simply the reverse of the another, i.e. flipping the arrows around. If a map has an inverse, it is unique. These maps are called isomorphic, bijective, or one-to-one and onto.&lt;/p&gt;
&lt;p&gt;In fact, when the map in the middle has larger size than $A$, there may also be map pairs that compose to the identity of $A$.&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (composed-solution-pairs #{1 2 3 4} one-a))&lt;/p&gt;
&lt;p&gt;72&lt;/p&gt;
&lt;p&gt;In such pairs, each map is called &lt;em&gt;retraction&lt;/em&gt; and &lt;em&gt;section&lt;/em&gt; to each other. Let's calculate the number of retractions and sections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Article 2, Exercise 5 (1)&lt;/em&gt;&lt;/strong&gt; Given map $g$ (see code for its definition), how many maps $f$ are there with $g \circ f = 1_{{0, 1}}$?&lt;/p&gt;
&lt;p&gt;This is asking the number of sections of the map $g$, which has a 5 element domain $U$, and a 2 element codomain $D$. Three of the elments of $U$, b, p, q, map to 0 in $D$; two elements of $U$, r and s, map to 1 in $D$. The answer can be found by:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (section g))&lt;/p&gt;
&lt;p&gt;6&lt;/p&gt;
&lt;p&gt;Basically, each section $f$ must choose two elements in $U$ to map 0 and 1 to, such that $g$ can map the results back to form an identity map on {0, 1}. For element 0, $f$ can choose one of b, p or q to map to; for element 1, $f$ can choose one of r and s. Therefore, the number of possible $f$ is $2 \times 3 = 6$.&lt;/p&gt;
&lt;p&gt;Obviously, not all maps have sections.&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (section f))&lt;/p&gt;
&lt;p&gt;0&lt;/p&gt;
&lt;p&gt;To have sections, the map must have a domain size larger than or equal to the codomain size. In addition, each elment of the codomain must be mapped to. Such map property is called surjective or onto. The general formula for the number of sections for map $g$ is therefore $$\prod_{i=1}^{n}m_i$$ where $n$ is the size of the codomain of $g$, and $m_i$ is the number of elements in the domain of $g$ that map to the $i$th element of the codomain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Article 2, Exercise 5 (2)&lt;/em&gt;&lt;/strong&gt; Choose a particular such $f$ (see code for its definition), how many maps $g$ satisfy $g \circ f = 1_{{0, 1}}$?&lt;/p&gt;
&lt;p&gt;Given a chosen $f$, this question is asking its number of retractions. The answer is:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction f))&lt;/p&gt;
&lt;p&gt;8&lt;/p&gt;
&lt;p&gt;For given $f$, 0 and 1 each maps to its own element in $U$, its retraction only need to flip the arrows to point back to 0 and 1, the remaining three element in $U$ can freely choose any of 0 and 1 to map to, so the number of retractions is the same as the total number of maps from a 3 element domain to a 2 element codomain, $2^3$. The general formula is $$n^{m-n}$$ where $n$ is the size of domain of $f$, and $m$ is its codomain size. To have retraction, a map must have a domain smaller or equal to the size of its codomain. In addition, it must be a one-to-one mapping, also called injective mapping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Number of section-retraction pairs&lt;/em&gt;&lt;/strong&gt; On page 117 of the book, the above formula for the number of retractions and sections of a given map are given, but it also says that the formula for the number of pairs of section/retraction in term of $m$ and $n$ is rather complicated. As it turns out, it is simple to derive a formula that is not complicated at all. First, each element of the smaller domain (size $n$) must map injectively to the lager domain (size $m$), the number of possibilities is just the number of permutation of choosing $n$ out of $m$. Then the remaining $m-n$ in the larger domain can freely choose any of the $n$ to map back to. Finally, we time up the two terms to arrive at $$\frac{m!}{(m-n)!}n^{m-n}$$ where $n$ is the size of domain $A$, m is the size of the domain $X$, $n \le m$, and $A \stackrel{s}{\longrightarrow} X \stackrel{r}{\longrightarrow} A$ satisfy $r \circ s = 1_A$.&lt;/p&gt;
&lt;p&gt;The formula seem to be correct as verified by the code:&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2} #{:a}))&lt;/p&gt;
&lt;p&gt;0&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt;(count (retraction-section-pairs #{1} #{:a}))&lt;/p&gt;
&lt;p&gt;1&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2} #{:a :b}))&lt;/p&gt;
&lt;p&gt;2&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2} #{:a :b}))&lt;/p&gt;
&lt;p&gt;2&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2} #{:a :b :c}))&lt;/p&gt;
&lt;p&gt;12&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2} #{:a :b :c :d :e}))&lt;/p&gt;
&lt;p&gt;160&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2 3} #{:a :b :c}))&lt;/p&gt;
&lt;p&gt;6&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2 3} #{:a :b :c :d}))&lt;/p&gt;
&lt;p&gt;72&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2 3 4} #{:a :b :c :d}))&lt;/p&gt;
&lt;p&gt;24&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2 3 4} #{:a :b :c :d :e}))&lt;/p&gt;
&lt;p&gt;480&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2 3 4 5} #{:a :b :c :d :e}))&lt;/p&gt;
&lt;p&gt;120&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2 3 4} #{:a :b :c :d :e :f}))&lt;/p&gt;
&lt;p&gt;5760&lt;/p&gt;
&lt;p&gt;CM.core=&amp;gt; (count (retraction-section-pairs #{1 2 3 4 5} #{:a :b :c :d :e :f}))&lt;/p&gt;
&lt;p&gt;3600&lt;/p&gt;
&lt;p&gt;Don't try the last two function calls, as they will run a long long time.&lt;/p&gt;</content><category term="notebook"></category><category term="Math"></category><category term="CategoryTheory"></category><category term="Programming"></category><category term="Clojure"></category></entry><entry><title>Install Vim with Homebrew Python on OS X</title><link href="https://yyhh.org/blog/2012/05/install-vim-with-homebrew-python-on-os-x" rel="alternate"></link><published>2012-05-16T04:50:00-07:00</published><updated>2012-05-16T04:50:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2012-05-16:/blog/2012/05/install-vim-with-homebrew-python-on-os-x</id><summary type="html">&lt;p&gt;Building terminal Vim on OS X with Homebrew's Python support, including formula changes and a check of the Python interpreter Vim actually uses.&lt;/p&gt;</summary><content type="html">&lt;p&gt;For people that need full features of vim, the default installation of vim on Mac OS X is definitely not enough. For example, I need to &lt;a href="https://yyhh.org/blog/2007/10/posting-blog-entry-drupal-within-vim"&gt;use vim to post to this blog&lt;/a&gt;, which requires a version of vim with python support. I also prefer terminal version of vim to the GUI version, so &lt;a href="https://code.google.com/p/macvim/"&gt;MacVim&lt;/a&gt; is less desirable.&lt;/p&gt;
&lt;p&gt;One way to get what I want is to compile a version of vim with &lt;a href="https://mxcl.github.com/homebrew/"&gt;homebrew&lt;/a&gt;. Homebrew does not officially have a vim fomula, because that would be a duplicate of the system version. Fortunately, we can grab an unofficial formula at &lt;em&gt;&lt;a href="https://raw.github.com/Homebrew/homebrew-dupes/master/vim.rb"&gt;https://raw.github.com/Homebrew/homebrew-dupes/master/vim.rb&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Also, you may want to install the latest homebrew python with the framework option:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;brew&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;--framework
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In order for vim to use the homebrew version of python (2.7.3) instead of the system one (an old 2.6), we need to change a line and add a line in the downloaded formula (vim.rb) file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="na"&gt;...  &lt;/span&gt;
&lt;span class="na"&gt;&amp;quot;--enable-pythoninterp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;dynamic&amp;quot;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="na"&gt;&amp;quot;--with-python-config-dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config&amp;quot;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="na"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now install vim with the formula:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;brew&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;./vim.rb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To check vim is using the correct version of python. Issue command in vim:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s"&gt;python import sys&lt;/span&gt;&lt;span class="c1"&gt;; print sys.version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If we get something like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2.7.3 (default, May 15 2012, 20:51:34)&lt;br&gt;
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]&lt;br&gt;
Press ENTER or type command to continue&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;we are done!&lt;/p&gt;</content><category term="notebook"></category><category term="Editor"></category><category term="Vim"></category><category term="OSX"></category></entry><entry><title>Start learning category theory</title><link href="https://yyhh.org/blog/2012/04/start-learning-category-theory" rel="alternate"></link><published>2012-04-30T07:48:00-07:00</published><updated>2012-04-30T07:48:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2012-04-30:/blog/2012/04/start-learning-category-theory</id><summary type="html">&lt;p&gt;A personal introduction to learning category theory, motivated by a preference for unifying principles over memorizing mathematical techniques.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Perhaps due to my rather small brain (literally), I dislike remembering tedious details. When in elementary school, I hated reciting classic Chinese poems, but liked composing my own :-).  In high school, I hated chemistry but loved physics, because one could do everything based on a few principles in physics, whereas chemistry was all about memorization. Last year, I was chatting with a colleage of mine who had a Ph.D. degree in chemistry from Harvard. He said he's good at it because he could find patterns in all the tedious details and summerized them in his own head, so he didn't have to remember them all. So I said why not write those patterns down so others can benefit, and he didn't seem to like that idea. Anyway, let's go back to the main topic.&lt;/p&gt;
&lt;p&gt;I did not do very well in math classes in China, perhaps because Chinese math education focused too much on problem solving techniques, which were basically a matter of remembering all the test coping tricks. But I do like math, because I find it elegant and profound. A mathematical understanding of the world seems always the most economical one. So I want to learn more.&lt;/p&gt;
&lt;p&gt;To consistently apply my preferred model of starting from the most fundamental ideas, I decide to learn &lt;a href="https://en.wikipedia.org/wiki/Category_theory"&gt;category theory&lt;/a&gt;. It might sound strange as even many professional mathematicians consider this branch of mathematics "abstract nonsense", but I think it might fit my aptitude. Who knows. In any case, I am following &lt;a href="https://math.ucr.edu/home/baez/topos.html"&gt;John Baez's book recommendation&lt;/a&gt; as a guide, and will be updating my progress here from time to time, when I have something interesting to write about.&lt;/p&gt;
&lt;p&gt;UPDATE: Baez, among others, said they benefited from &lt;a href="https://www.amazon.com/Topoi-Categorial-Analysis-Logic-Mathematics/dp/0486450260/"&gt;Goldbatt's book&lt;/a&gt;, which I myself find very readable as well. However, this &lt;a href="https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=12&amp;amp;ved=0CCUQFjABOAo&amp;amp;url=http%3A%2F%2Fwww.cwru.edu%2Fartsci%2Fphil%2FUsesandAbuses%2520HistoryToposTheory.pdf"&gt;MacLarty's article&lt;/a&gt; convinced me that Goldbatt's book might give the wrong idea about category theory. So I will stick with &lt;a href="https://www.amazon.com/Conceptual-Mathematics-First-Introduction-Categories/dp/052171916X"&gt;Lawvere's&lt;/a&gt; &lt;a href="https://www.amazon.com/Sets-Mathematics-F-William-Lawvere/dp/0521010608"&gt;books&lt;/a&gt;.&lt;/p&gt;</content><category term="notebook"></category><category term="Math"></category><category term="CategoryTheory"></category></entry><entry><title>"It's official: Tom is a Nebelung!"</title><link href="https://yyhh.org/blog/2012/03/its-official-tom-is-a-nebelung" rel="alternate"></link><published>2012-03-24T23:07:00-07:00</published><updated>2012-03-24T23:07:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2012-03-24:/blog/2012/03/its-official-tom-is-a-nebelung</id><summary type="html">&lt;p&gt;A cat-breed book in the vet's waiting room leads Tom's family to identify him as a Nebelung, comparing his appearance and personality with the breed.&lt;/p&gt;</summary><content type="html">&lt;p&gt;When &lt;a href="https://yyhh.org/blog/2011/07/cat-big-paws"&gt;Tom&lt;/a&gt; (唐唐）was adopted from the animal shelter, his papers listed him as an "American Domestic Long Hair". As new cat parents, we were eager to find out his true breed. We searched and searched online, and identified him as a &lt;a href="https://en.wikipedia.org/wiki/Chartreux"&gt;Chartreux&lt;/a&gt;, based on his fur color and personality. We knew that Chartreux is a short hair cat but Tom has long hair, but we thought Tom must not have been a pure breed. We always joked about Tom's purpoted French origin and attributed his love of bread and butter to his French ancestry.&lt;/p&gt;
&lt;p&gt;Yesterday we took the cats to get their teeth cleaned. Sitting in the vet's waiting room, I browsed a cat breed book, and stumpled upon Tom's true breed. He's a &lt;a href="https://yyhh.org/blog/2011/07/cat-big-paws"&gt;Nebelung&lt;/a&gt;! Let's see. At the left is a picture of a Chartreux, and at right a Nebelung:&lt;/p&gt;
&lt;table&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/IC_Blue_Melody_Flipper_CHA_male_EX1_CACIB.jpg/330px-IC_Blue_Melody_Flipper_CHA_male_EX1_CACIB.jpg" title="A Chartreux Cat" width="218" height="300" alt="A Chartreux Cat" /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Nebelung_Cat_at_10.JPG/330px-Nebelung_Cat_at_10.JPG" title="A Nebelung Cat" width="228" height="300" alt="A Nebelung Cat" /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even"&gt;&lt;td&gt;Chartreux&lt;/td&gt;&lt;td&gt;Nebelung&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Obviously, Chartreux has short hair, orange eyes, rounder head and body, while Nebelung has long hair, green/yellowish eyes and leaner head and body. No doubt, Tom is a Nebelung. Many of the google images of Nebelung cats can just be passed as Tom's own photos.&lt;/p&gt;
&lt;p&gt;Here's Tom:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm3.staticflickr.com/2194/1971652917_be14af92b9_n.jpg" title="Tom" width="320" height="240" alt="Tom " /&gt;&lt;/p&gt;
&lt;p&gt;So Nebelung is a rare breed created in America during 1980s from &lt;a href="https://en.wikipedia.org/wiki/Russian_Blue"&gt;Russian Blue&lt;/a&gt;. This behavior characteristics of Nebelung reads like Tom's accurate description:&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;Nebelung cats are lively, playful, affectionate, good-natured, and intelligent. The cat's mild-mannered state and personality may not always reflect the relatively high level of intelligence often found in the breed. In spite of the fact that it is an active cat, it can live very well indoors. Nebelungs prefers their own family and often keep a distance from strangers. They tend to bond with a select few humans and stay loving and devoted throughout their lives. It is, however, a cat that gladly accepts company of its people or of another cat. Nebelungs are very good communicators and will remind their owners of problems. This happens often since Nebelungs can be very picky about things such as litter cleanliness and food type. Many owners of the Nebelung cat say that they can act more like a dog at times, being extremely loyal to their owner and family. It enjoys sitting in a lap and being petted and will follow its favorite person devotedly from room to room. &lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;Now we know we are not crazy calling Tom a "Mommy's boy" and a "dog cat", because he is a Nebelung!&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Are you Han? My paternal ancestry - 12 Marker Results</title><link href="https://yyhh.org/blog/2012/03/are-you-han-my-paternal-ancestry-12-marker-results" rel="alternate"></link><published>2012-03-03T01:04:00-08:00</published><updated>2012-03-03T01:04:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2012-03-03:/blog/2012/03/are-you-han-my-paternal-ancestry-12-marker-results</id><summary type="html">&lt;p&gt;The first twelve markers from a paternal ancestry DNA test, with an explanation of Y-STR results, haplotypes, and why SNP testing adds confirmation.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As &lt;a href="https://yyhh.org/blog/2011/12/are-you-han-my-paternal-ancestry-hypothesis"&gt;mentioned previously&lt;/a&gt;, I swabbed my cheeks and mailed my Y-DNA test specimen to &lt;a href="https://www.familytreedna.com/"&gt;FamilyTreeDNA&lt;/a&gt; a few months ago. Now the first part of the results, consists of twelve markers, are known. These are standard Y-STR results. Before showing the actual numbers, let me briefly explain.&lt;/p&gt;
&lt;p&gt;What I ordered was a Y-DNA test, which is only applicable for men, since women do not have Y-chromosome. Y-chromosome passes from fathers to sons, so it can be used to track male ancestry. Chromosomes consist of a large number of &lt;a href="https://en.wikipedia.org/wiki/Nucleotide" title="Nucleotide"&gt;nucleotides&lt;/a&gt;, which have four basic types, designated by letter A, C, G, and T. At certain locations of the Y chromosome (these locations are usually labeled by names such such "DYS393"), there are repeated sequence of short letter patterns, such as "GTT", called Short Tandem Repeats (STR). For example, at location DYS426, a person may have 7 to 18 repeats of the DNA sequence “GTT”, depending on the individual. In the FamilyTreeDNA database, 12 repeats at DYS426 is the most common, which would look like this: ...TGT&lt;strong&gt;GTTGTTGTTGTTGTTGTTGTTGTTGTTGTTGTTGTT&lt;/strong&gt;GAC...  By comparing the number of such STRs at different locations, we can estimate how genetically close two individuals are.  And we call the number of STRs at each of these locations a marker.&lt;/p&gt;
&lt;p&gt;Because STRs mutate more easily, two individuals with a similar Y-STR haplotype may not necessarily share a similar ancestry. To really confirm one's haplogroup type, Single Nucleotide Polymorphism (SNP) test is needed, which examines single nucleotides at specific locations on the Y chromosome. Since these SNPs are very rare, people sharing the same SNPs almost certainly have the same ancestor many generations ago. In summary, STR test is good for finding recent relatives, while SNP can confirm one's ancient ancestry (i.e. haplogroup).&lt;/p&gt;
&lt;h4&gt;My Results&lt;/h4&gt;
&lt;p&gt;The table below shows the results of 12 markers for my Y-DNA test. &lt;/p&gt;
&lt;table&gt;&lt;caption&gt;Huahai's 12 Marker Results&lt;/caption&gt;&lt;tbody&gt;&lt;tr class="odd"&gt;&lt;td&gt;Marker&lt;/td&gt;&lt;td&gt;Value&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even"&gt;&lt;td&gt;DYS393&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td&gt;DYS390&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even"&gt;&lt;td&gt;DYS19**&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td&gt;DYS391&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even"&gt;&lt;td&gt;DYS385a&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td&gt;DYS385b&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even"&gt;&lt;td&gt;DYS426&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td&gt;DYS388&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even"&gt;&lt;td&gt;DYS439&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td&gt;DYS389I&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;/tr&gt;&lt;tr class="even"&gt;&lt;td&gt;DYS392&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;/tr&gt;&lt;tr class="odd"&gt;&lt;td&gt;DYS389II***&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;I have yet to figure out that those stars mean.&lt;/p&gt;
&lt;p&gt;OK, the table looks nice, but what does it mean? Well, given this data, we can do at least two things: the first is to find one's remote genetic cousins. Another thing is to predict one's  haplotype.&lt;/p&gt;
&lt;h4&gt;My Match&lt;/h4&gt;
&lt;p&gt;I searched the FamilyTreeDNA's database to find people with test results that match mine. BTW, this search functionality is also available at &lt;a href="https://ysearch.org"&gt;ysearch.org&lt;/a&gt;. Guess what? I found one person with an exact match! And I know his name! I have not contacted that person yet, because I want to wait for more results to be sure. That person did a 25 marker test, so I will wait for my 25 marker results.&lt;/p&gt;
&lt;p&gt;However, I have not resisted the temptation to investigate a bit about his background.  Curiously, his oldest known ancestor is from Philippine, dating back to late 19th century. On the other hand, according to our family records, my father's line has lived in Sichuan province in southwestern China since &lt;a href="https://en.wikipedia.org/wiki/Ming_Dynasty"&gt;Ming Dynasty&lt;/a&gt;, way before 19th century! &lt;/p&gt;
&lt;p&gt;So what's the connection here? There seems to be so much room for speculation. One possibility is that this Filipino family was originally migrated from China to Philippine a few hundred years ago. Given this family rather scholastic background (complete with a prominent medical scientist in the family that has his own Wikipedia page), this hypothesis doesn't sound too far off, as Chinese people are known to keep their scholastic habit even overseas. Another evidence is the similarity of surnames. This family's surname is pronounced vaguely similar to mine, so it could be a local adaptation of the original Chinese surname.&lt;/p&gt;
&lt;p&gt;Another possibility, is of course that my family was actually migrated to Sichuan from the pacific coast (maybe even the islands) somewhere during the Ming Dynasty. This would not sound too far off either, since my family records does say that we migrated to Sichuan during Ming Dynasty. However, it is vague on the origin of the migration.&lt;/p&gt;
&lt;p&gt;In any case, this seems to be getting very interesting. I am looking forward to seeing more test results.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My Haplotype&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;People have developed statistical software to predict haplogroup from STR test results. For example, &lt;a href="https://www.hprg.com/hapest5/"&gt;Whit Athey's predictor&lt;/a&gt; is popular for people of European or Mideastern origins, but it doesn't work for Asians perhaps due to a lack of data. On the other hand, FamilyTreeDNA does prediction for all customers. Before showing the prediction for my haplogroup, let's recap my own prediction in the &lt;a href="https://yyhh.org/blog/2011/12/are-you-han-my-paternal-ancestry-hypothesis"&gt;previous post&lt;/a&gt;: my hypothesis is that I have 20 percent chance to be in haplogroup &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_K_%28Y-DNA%29"&gt;K*&lt;/a&gt;, 20 percent chance in haplogroup &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_O2_%28Y-DNA%29"&gt;O2&lt;/a&gt;, 30 percent in &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_O1_%28Y-DNA%29"&gt;O1&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_O3_%28Y-DNA%29"&gt;O3&lt;/a&gt;, respectively.&lt;/p&gt;
&lt;p&gt;Well, how did I do?&lt;/p&gt;
&lt;p&gt;Pretty good, in fact. Basically, before seeing the results, I predicted that I have 20+30+30=80 percent chance to be in the haplogroup O. It turns out that FamilyTreeDNA's prediction is just that: I am in the haplogroup of &lt;a href="https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cts=1330932717http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHaplogroup_O_%28Y-DNA%29"&gt;O&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Further results should get me closer to the exact haplogroup within O. But to have some fun, let's predict again which sub-group I am in. Given that one exact match I have in the database is someone originally from Philippine, the chance of my being in O1 should be significantly increased, whereas the chance of being O2 should be diminished, down to zero. Therefore, my hypothesis is the following:&lt;/p&gt;
&lt;p&gt;P(O1) = 0.7&lt;/p&gt;
&lt;p&gt;P(O3) = 0.3&lt;/p&gt;
&lt;p&gt;Let's wait and see...&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; (3/7/2012): I found another haplogroup predictor, &lt;a href="https://predictor.ydna.ru/"&gt;Vadim Urasin's YPredictor&lt;/a&gt;, which can handle Eastern Asian results. The prediction for my 12 marker results is the following:&lt;/p&gt;
&lt;p&gt;N    Haplogroup    Probability&lt;br&gt;
1    O3-M122        77%&lt;/p&gt;
&lt;p&gt;What a surprise! So I am a typical Han Chinese after all.&lt;/p&gt;
&lt;p&gt;On the other hand, the accuracy of this predictor may not be too high for Eastern Asians due to a lack of data. Anyway, looking forward to results from more markers to confirm...&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; (3/7/2013): I paid for the deep-clique analysis to get to the bottom of this, and the results confirmed Vadim Urasin's prediction, that I am indeed O3-M122. So in this ense, I am a typical Han Chinese male. The only thing atypical is that I do not belong to any of the more popular branches under O3-M122.  This result seems to explain a lot, since I am in one of those rare branches under O3. &lt;/p&gt;</content><category term="opinion"></category><category term="Science"></category><category term="DNA"></category></entry><entry><title>Review for Canine Cat Scratcher</title><link href="https://yyhh.org/blog/2012/01/review-for-canine-cat-scratcher" rel="alternate"></link><published>2012-01-02T06:18:00-08:00</published><updated>2012-01-02T06:18:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2012-01-02:/blog/2012/01/review-for-canine-cat-scratcher</id><summary type="html">&lt;p&gt;A household review of the Canine Cat Scratcher, covering its modern design, ordering experience, and how Tom and Mayori received it.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;strong&gt;Updated on 09/10/2013&lt;/strong&gt;: It's &lt;a href="https://thecompanyofpets.com/"&gt;now only 295 USD&lt;/a&gt;, with 100 USD discount!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;As a cat and modern design lover, I am always looking for cat items pleasant for both the cats and my aesthetic standard. I had my eye on the canine scratcher for a while, but its over 1000 USD price tag made it out of reach. However, recently, I found that it now costs "only" 395 USD. I pulled the trigger w/o too much hestitation since I need to buy the cats a holiday present anyway. However, I was still a little nervious at the purchase, as it would be a huge bummer if the cats don't like it. But I really love the design and can totally see how it fit with the rest of the house w/o screaming "cat furniture".&lt;/p&gt;
&lt;p&gt;It took over 3 weeks to receive the scratcher (somehow I didn't even get the confirmation email and it took an email from me to learn about the status of my order). But I was very pleased at the arrival. It was very well packaged and arrived without any damage. It is just the right size as a standalone decoration. Most importantly, the cats love it.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7014/6598703157_fb8b32f53c_z.jpg" title="Tom loves the canine scratcher" width="392" height="585" alt="Tom loves the canine scratcher" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7158/6598915779_af98f7e934_z.jpg" title="Mayori loves the canie scratcher" width="394" height="524" alt="Mayori loves the scratcher" /&gt;&lt;/p&gt;
&lt;p&gt;After some fighting, it has now official become Mayori's favorite ride. Highly recommended!&lt;/p&gt;</content><category term="experience"></category><category term="Shopping"></category><category term="Pets"></category></entry><entry><title>Are you Han? My paternal ancestry - Hypothesis</title><link href="https://yyhh.org/blog/2011/12/are-you-han-my-paternal-ancestry-hypothesis" rel="alternate"></link><published>2011-12-28T07:02:00-08:00</published><updated>2011-12-28T07:02:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-12-28:/blog/2011/12/are-you-han-my-paternal-ancestry-hypothesis</id><summary type="html">&lt;p&gt;Questions about family origins and Han identity lead to a hypothesis about paternal ancestry and a decision to investigate with a Y-DNA test.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I was brought up as a &lt;a href="https://en.wikipedia.org/wiki/Han_Chinese"&gt;Han Chinese&lt;/a&gt; and I myself have never doubted that identity.  However, I do know that I look slightly different from people around me when I grew up. Darker skin, slightly curly hairs, deeper set eyes and other distinctive facial features. Put it simply, my face does not look like an &lt;a href="https://pmsol3.files.wordpress.com/2009/08/chineseaverageman.jpg?w=490"&gt;average Han male face&lt;/a&gt;. However, nobody really said anything about my appearance except that my old brother occasionally joked about it (he looks like a normal Han Chinese by the way). After all, I look just like my father. Besides, there are plenty of male relatives in my father's native village (near Chongqing) who look just like me.&lt;/p&gt;
&lt;p&gt;It took a foreigner to first question my ethnicity. When I was in graduate school in Beijing, there was an exchange student in my group, an African American girl, who one day took me by surprise by asking: "Are you Han?" I instinctively answered "Yes". She didn't say anything more and I didn't either, but I knew why she asked.&lt;/p&gt;
&lt;p&gt;When I came to US, the situation got worse. When I went with Yunyao to visit her college friends, they always talked English with me first, then were totally startled by my almost perfect Mandarin.  Hispanic people in the states always wanted to talk Spanish with me then were surprised by my inability to speak their language. Later I learned one Spanish phrase or two. When we traveled in Latin American, people in the restaurants always insisted on correcting my poor Spanish pronunciation while ignoring Yunyao's arguably worse performance. &lt;/p&gt;
&lt;p&gt;Since all the female members of my family look like normal Han people, Yunyao became curious about my paternal ancestry and suggested me to take a DNA test to find out. At first, I dismissed this seemly outrageous idea. A few months ago, I became curious myself when I learned a few things about the make-up of Han Chinese &lt;a href="https://en.wikipedia.org/wiki/Human_Y-chromosome_DNA_haplogroup"&gt;Y-DNA haplotypes&lt;/a&gt;. Below is a chart I made using the &lt;a href="https://www.nature.com/nature/journal/v431/n7006/extref/nature02878-s2.doc"&gt;data&lt;/a&gt; from &lt;a href="https://www.nature.com/nature/journal/v431/n7006/abs/nature02878.html"&gt;this Nature study&lt;/a&gt; on 1289 Han males in year 2004.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7167/6590228355_f274b09342.jpg" width="327" height="288" /&gt;&lt;/p&gt;
&lt;p&gt;O3*, O3d and O3e all belong to the group &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_O3_%28Y-DNA%29"&gt;O3&lt;/a&gt;. It is interesting to see that O3 takes up about 55 percentage of the Han populations. &lt;/p&gt;
&lt;p&gt;Since people always talk about the differences between southern and northern Chinese, a chart (using the same data set) comparing the two follows:&lt;br&gt;
&lt;img alt="chart" src="https://farm8.staticflickr.com/7145/6590358575_7450cf0f53.jpg"&gt;Clearly, Northern and Southern Han Chinese males have similar genetic distributions, so the alleaged north-south difference is not that significant, at least in term of male lineage.&lt;/p&gt;
&lt;p&gt;Now, the big question, what haplogroup do I belong to? To find out, one has to take out the wallet 😛. Luckily, Yunyao bought this &lt;a href="https://www.familytreedna.com/"&gt;FamilyTreeDNA&lt;/a&gt; test for me as a birthday gift. Here is the package I just received in the mail:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7020/6586266841_318f2ebdc4.jpg" width="500" height="375" /&gt;&lt;/p&gt;
&lt;p&gt;There are two swabs and two specimen tubes in the package. Following the instructions, I scraped my cheek for a full minute, put the swab in the tube, and put everything into the envelop provided, and mailed the package back.&lt;/p&gt;
&lt;p&gt;While waiting for the results, let's make a prediction about my haplogroup. To do that, let's look at the haplogroup distribution of the province where my father and I came from (using the same data set as above):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm8.staticflickr.com/7157/6590534263_621207bf2c.jpg" width="342" height="300" /&gt;The number of Sichuan Han people tested in the Nature 2004 study is only 65, so this chart may not be very accurate. In the absence of better prior information, let's work with this. &lt;/p&gt;
&lt;p&gt;There are 5 percent of &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_C3_%28Y-DNA%29"&gt;C*&lt;/a&gt;among Sichuan Han people. A major part of these are likily the decendents of the Mongol invaders. Since I am not Mongol looking, I rate the probability of my being C* to be zero, P(C*)=0.&lt;/p&gt;
&lt;p&gt;The two percent of &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_D1_%28Y-DNA%29"&gt;D1&lt;/a&gt; in Sichuan Han people are likely related to a Tibetan origin. According to my family history, this is again unlikely my paternal lineage, P(D1)=0.&lt;/p&gt;
&lt;p&gt;There are surprising large percentage of &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_K_%28Y-DNA%29"&gt;K*&lt;/a&gt; shown in the data. K is a very old lineage appearing around the Pacific everywhere, and is particularly common in the Australian islands. I think the chance of my being in this group is higher than normal. Of course, it could be that the study didn't not differentiate some of the down-stream haplogroups of K, such as LT, M, N and S. In any case, I rate the probability of my being one of these K people higher than 16 percent, P(K*, LT, M, N, or S)=0.2.  &lt;/p&gt;
&lt;p&gt;Similar to the national level, &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_O3_%28Y-DNA%29"&gt;O3&lt;/a&gt; is the most common among Sichuan Han people, taking up 57 percent. Since I am not normal Han looking, I will down rate the probability of my being O3 from 0.57 to 0.3, P(O3)=0.3. I cannot down rate O3 too much though, as my blood brothers do look like normal Han.&lt;/p&gt;
&lt;p&gt;The eight percent of &lt;a href="https://en.wikipedia.org/wiki/Haplogroup_O1_%28Y-DNA%29"&gt;O1&lt;/a&gt; in Sichuan Han people are likely the results of migration from other parts of southern China, as this is a common gene type in southeastern Asia. Given our family history, the probability of my being O1 should be significantly higher, P(O1)=0.3.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Haplogroup_O2_%28Y-DNA%29"&gt;O2&lt;/a&gt; accounts for 13 percent of Sichuan Han people. O2a is commonly seen in the tribal people of southern Asia. I rate the probability of my being O2 higher than normal: P(O2)=0.2.&lt;/p&gt;
&lt;p&gt;To recap, my probablistic hypothesis regarding my own Y-DNA haplogroup is the following:&lt;/p&gt;
&lt;p&gt;P(K*, LT, M, N, or S)=0.2&lt;/p&gt;
&lt;p&gt;P(O3)=0.3&lt;/p&gt;
&lt;p&gt;P(O1)=0.3&lt;/p&gt;
&lt;p&gt;P(O2)=0.2&lt;/p&gt;
&lt;p&gt;Let's wait for the moment of truth...&lt;/p&gt;</content><category term="opinion"></category><category term="Science"></category><category term="DNA"></category></entry><entry><title>Best Chocolate Places in Manhattan</title><link href="https://yyhh.org/blog/2011/11/best-chocolate-places-in-manhattan" rel="alternate"></link><published>2011-11-13T21:02:00-08:00</published><updated>2011-11-13T21:02:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-11-13:/blog/2011/11/best-chocolate-places-in-manhattan</id><summary type="html">&lt;p&gt;A Manhattan chocolate-shopping trip, a shortlist of three shops, and a gift from La Maison du Chocolat that proved a hit at home.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I recently stayed in Manhattan for a few days during a business trip. My colleague and I were looking for places to buy some special chocolate to bring back home. We asked a few locals New Yorker as well as consulted the web for recommendations. Here are the list of stores we collected.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La Maison Du Chocola (&lt;a href="https://www.lamaisonduchocolat.com/en/boutiques.php?c=newyork"&gt;store website&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Vosges (&lt;a href="https://www.vosgeschocolate.com/boutiques"&gt;store website&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Jacques Torres (&lt;a href="https://www.mrchocolate.com"&gt;store website&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We only have 3 hours to spend in the city. So we went to La Maison Du Chocola store in the Rockefelle Center, the store closest to our hotel.&lt;/p&gt;
&lt;p&gt;Since there is not free sampling, I was not very sure that I would like to spend $100 on one pound of chocolate. I bought two small boxes with 6 pieces of chocolate each. Obviously, I am not the only one who is not sure: they even have tiny small packages with only two pieces of chocolate (for $8), accompanied with a pretty gift bag.&lt;/p&gt;
&lt;p&gt;When I gave the gift to Huahai. He absolutely loves the chocolate. So it is money well spent and I plan to buy more for him when I go to NYC next time.  &lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category><category term="Shopping"></category></entry><entry><title>Review for "Virtual Cat Toys HD Catnip Collection"</title><link href="https://yyhh.org/blog/2011/11/review-for-virtual-cat-toys-hd-catnip-collection" rel="alternate"></link><published>2011-11-06T19:46:00-08:00</published><updated>2011-11-06T19:46:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-11-06:/blog/2011/11/review-for-virtual-cat-toys-hd-catnip-collection</id><summary type="html">&lt;p&gt;Trying The Catnip Collection on an HP TouchPad as an interactive cat toy, and finding that its constantly moving objects fail to hold the cats' interest.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As many of friends, I recently acquired a HP Touchpad largely due to its low price. I don't really need a tablet, as I am sitting in front of computes almost all the time. My original plan was to turn it into an interactive cat toy, at least sometimes, so I can keep the two cats entertained while I am working.&lt;/p&gt;
&lt;p&gt;Unfortunately, I could only find one game designed for the cats "The Catnip Collection". According to its website, it "is a variety of toys that will amuse and challenge your cat and its human".&lt;/p&gt;
&lt;p&gt;The reviews seem pretty decent (4 out 5).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.palm.com/appredirect/?packageid=com.wtflolomgbbq.haxe.vct"&gt;https://developer.palm.com/appredirect/?packageid=com.wtflolomgbbq.haxe…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Even though it is not free anymore, I bited the bullet and bought the app. Unfortunately, the cats are not even remotely interested! I think that the problem is the objects (insects, balls, etc) are constantly moving instead of stopping and moving randomly. So the cats get bored after 5 seconds.&lt;/p&gt;
&lt;p&gt;Hopefully the app developer will see my post and consider improve the game further. For the smart cats who play with human all the time, we need something that is really challenging!&lt;/p&gt;</content><category term="opinion"></category><category term="Pets"></category><category term="Shopping"></category><category term="Technology"></category></entry><entry><title>Planning a Dream Trip to Italy the Easy Way</title><link href="https://yyhh.org/blog/2011/10/planning-a-dream-trip-to-italy-the-easy-way" rel="alternate"></link><published>2011-10-16T22:13:00-07:00</published><updated>2011-10-16T22:13:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-10-16:/blog/2011/10/planning-a-dream-trip-to-italy-the-easy-way</id><summary type="html">&lt;p&gt;Lessons from planning an independent trip to Italy, reducing a mountain of travel advice to a practical two-page itinerary.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Huahai and I have just returned from our first trip together to Italy. The trip itself was wonderful and unforgeable. However, it usually took a lot of planning for such an extensive trip, unless you hire someone else to do it for you or join a tour group.&lt;/p&gt;
&lt;p&gt;We usually enjoy traveling at our own pace and explore the area; therefore, we (basically myself) always do our own travel planning. Unfortunately, as a very busy professional, I do not really have much time to do the planning. (Can you believe someone have actually spent half a year to plan a two-week's trip to Italy and produce a travel plan with 90 pages?)&lt;/p&gt;
&lt;p&gt;Following my usual practice, I have spent a lot of time initially on online travel forums initially. I also got the aforementioned 90-page's travel plan and a shorter one from a friend. Then I have brought Rick Steven's book. Eventually, I have managed to come up with a travel plan with only two pages that working out pretty well. Here are some tips that I have summarized based on my experience with this trip. I wish that I have known them first before I started the planning. It would have made my life much easier without compromising the quality of the travel plan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Buy at least one good travel book.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For European trips, I highly recommend Rick Steven's book, which contains very detailed information for each of the places. Then you can bring the book with you and do some of the detailed planning such as where to have lunch on the go. I bought this book only a couple of weeks before our trip. I wish that I have bought it before I even started the planning. It would have saved me a lot of time reading online postings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Refer to travel packages for possible travel itinery.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While I do enjoy the freedom of traveling at our own pace, studying the sample travel packages listed at the travel agency's websites is a very efficient way to come up with a travel plan that covers the major must-seen sites. I would add one extra day for each stop, as the tour groups tend to travel at much faster pace than I would like. Rick Steven's websites also provide very good example routes for each city with free mp3 audo downloadable. Another good place to get some inspiration is Yahoo! trip planner, where you can view other people travel plans.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Book hotels well in-advance&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A good travel book typically contains some recommendation for accommodations. But the list is usually very short. I found Tripadvisor to be a great place to find accommodations with good value without broking the bank. However, top ones can sold out fast. Therefore I recommend booking the hotels as soon as the trip schedule is set. Of course, don't forget to use Kayak.com to find out how to get the best price. I booked the hotels about two months ahead of time, but many of the smaller nice budget hotels have already sold out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Reserve museums in-advance or join private tours.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Check the travel book or online forums to find out whether any of the sites on the travel plan requires reservation and make the reservations ahead of time. Otherwise, you may find yourself stuck in a really long line for hours or even worse end up have to miss the must-seen sites. Joining private tours typically helps avoiding the long line but can be expensive. We only did the private tours when we were able to see things that we could not see otherwise (e.g. underground part of Colloseum is only accessible by joining one of the private tours). Many of the places can be reserved online. In addition, many hotels can help you make the reservations for free --- just send requests via emails with desired time and date.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Arrange only one or two must-do items per day, preferably in the morning&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I feel that vacation is a time to relax, not a time to check of boxes of to-do items on the travel plan. Therefore, it is better to do only one or two must-do sight-seeings in the morning and then simply add other items as you go depending on the mood. With a good travel planning book, it is easy to do such last-minute planning without stressing out yourself in planning or following the plan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Arrange some resting days.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As a first-timer to Italy, I was surprised how much walking I need to do everyday. It is true that most of the things are either within walking-distance or reachable via public transportation plus walking. However, all these walking adds up! According to my pedometer, we walked over 10 miles in one single day just visiting museums! Unless you would like to walk miles and miles everyday, it would be better to arrange some days with activity that requires not too much walking so your feet can recover. I am really glad that between our visits to Rome and Florence, we stayed in Sorrento and did a few day trips involving bus tour, boat tour, a little bit hiking, and swimming. These resting days give us some space to enjoy Italy from a completely perspective while giving our feet a break.&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category></entry><entry><title>Best CSV Reader/Writer?</title><link href="https://yyhh.org/blog/2011/10/best-csv-readerwriter" rel="alternate"></link><published>2011-10-11T21:36:00-07:00</published><updated>2011-10-11T21:36:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-10-11:/blog/2011/10/best-csv-readerwriter</id><summary type="html">&lt;p&gt;A bookmarked CSV reader and writer recommended by a colleague, saved for a future trial and review.&lt;/p&gt;</summary><content type="html">&lt;p&gt;My colleague has highly recommended to me the following CSV reader/writer: &lt;a href="https://supercsv.sourceforge.net/"&gt;https://supercsv.sourceforge.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am yet to test it out, so I will need to come back provide my review. But just put a pointer here, since this tool is not realy easy to find without the right keywords.&lt;/p&gt;</content><category term="notebook"></category><category term="Programming"></category></entry><entry><title>"Quick Fix: Windows XP Crashes with Blue Screen with Video Content"</title><link href="https://yyhh.org/blog/2011/09/quick-fix-windows-xp-crashes-with-blue-screen-with-video-content" rel="alternate"></link><published>2011-09-22T00:06:00-07:00</published><updated>2011-09-22T00:06:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-09-22:/blog/2011/09/quick-fix-windows-xp-crashes-with-blue-screen-with-video-content</id><summary type="html">&lt;p&gt;Troubleshooting Windows XP blue-screen crashes triggered by video in Firefox, after the error report points to watchdog.sys.&lt;/p&gt;</summary><content type="html">&lt;p&gt;For some reason, my main working machine, a Windows XP desktop, recently  started to crash a lot followed by the blue screen of death. The error message output at the blue screen does not seem to be helpful.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;***STOP: 0x0000008E (0xE0000001, 0xBA490925, 0xA880D820, 0x00000000)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;***watchdog.sys - Address BA490925, base at BA90000, Date stamp 480254ab&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a few crashes, I realized that the machine crashes whenever I play any video in the web browser ( I am using FireFox). Initially, I didn't bother to look into this problem and simply attempt to solve the problem by avoid playing any video, since I don't really intent to watch any video during my work hours and would rather spend my time doing really work instead of fixing the machine. However, this didn't really help since so many sites now a days include video content .&lt;/p&gt;
&lt;p&gt;So today, when the machine crashed again, I decided to fix this issue once and for all. Luckily, one Google search using the error message turned up quite a few answers. Most of the answers tent to be too complicated than what I wanted and involving checking for malware, virus, etc, which is not really my concern. Luckily, I found a very simply solution &lt;a href="https://forums.adobe.com/thread/798985"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Due to changes to the link, the exact solution from the above link no longer work. But &lt;strong&gt;the basic idea is to go to any site with flash content, and then right click on the flash content, select "setting" from the pop-up menu and uncheck&lt;/strong&gt; &lt;strong&gt;"Enable hardware acceleration".&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img src="https://www.macromedia.com/support/documentation/en/flashplayer/help/images/display_en.gif" width="213" height="136" /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For example, you can go to &lt;a href="https://www.adobe.com/products/flashplatformruntimes/gallery/"&gt;https://www.adobe.com/products/flashplatformruntimes/gallery/&lt;/a&gt; or any Youtube page. Just make sure that you don't play the video before you make the change. Otherwise, you will see the blue screen again.&lt;/p&gt;</content><category term="notebook"></category><category term="Software"></category><category term="Windows"></category></entry><entry><title>Netflix Is Splitting Into Two!?</title><link href="https://yyhh.org/blog/2011/09/netflix-is-splitting-into-two" rel="alternate"></link><published>2011-09-19T23:20:00-07:00</published><updated>2011-09-19T23:20:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-09-19:/blog/2011/09/netflix-is-splitting-into-two</id><summary type="html">&lt;p&gt;A subscriber's reaction to Netflix's proposed split of streaming and DVD services, updated after the company abandoned the plan.&lt;/p&gt;</summary><content type="html">&lt;p&gt;It has turned out that Netflix has abandoned the plan, finally.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;When Huahai told me the news late last night that Netflix is splitting into two, my first reaction was that he must be reading from Onion! After all, based all what have learned from the business school classes and information economics classes, it makes perfect sense to provide bundled services, especially when it comes to information product.&lt;/p&gt;
&lt;p&gt;However, the news is definitely true, as further confirmed by the following letter that I received this morning.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6166/6163911899_2c0010dbc8_b.jpg" width="484" height="755" alt="netflix letter" /&gt;&lt;/p&gt;
&lt;p&gt;I don't know about you. But like many other loyal NetFlix subscribers, I love the convenience of their streaming service and almost use it exclusively even when I have bundled unlimited DVD service. In fact, I don't even watch cabled TV anymore except for the morning news. However, when I was informed that I have to pay 60% to get both services, I dumped the DVD service without hesitation. After all, I was only watching at most one DVD per week. However, this price hack does have hurt my feeling --- it seems that they don't care about their customizes anymore when they now dominate the market.&lt;/p&gt;
&lt;p&gt;Nevertheless, the above news has shocked me. Frankly, I don't think that this move makes much sense --- why lose the establish name and give away the convenience to the customizes to be able to combine both services and maintain one single account? It also goes again the economic of scale. It all seems to me to be a very costly move.&lt;/p&gt;
&lt;p&gt;However, I am very excited at the news. It looks like a big move that will be written into business school text books in the near future. I am really looking forward to seeing the outcome a couple of years from now on.&lt;/p&gt;
&lt;p&gt;More on the move can be found on their &lt;a href="https://blog.netflix.com/2011/09/explanation-and-some-reflections.html?lnktrk=EMP&amp;amp;g=935BBD64D88F21C24044EB3702C7EF2A0AC0315E&amp;amp;lkid=netflixBlog"&gt;blog&lt;/a&gt;.&lt;/p&gt;
&lt;/p&gt;</content><category term="opinion"></category><category term="Technology"></category><category term="Entertainment"></category></entry><entry><title>Easy Tuna Birthday Cake for the Cats</title><link href="https://yyhh.org/blog/2011/09/easy-tuna-birthday-cake-for-the-cats" rel="alternate"></link><published>2011-09-18T23:25:00-07:00</published><updated>2011-09-18T23:25:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-09-18:/blog/2011/09/easy-tuna-birthday-cake-for-the-cats</id><summary type="html">&lt;p&gt;A homemade tuna birthday cake topped with shrimp and catnip wins over Tom and Mayori, with the simple recipe used for their celebration.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I was looking for buying birthday cakes for the cats' birthday. Surprisingly, although it is very easy to find dog bakeries, there seems no existence of a single cat bakery. Luckily, a single Google search online brought up many birthday cake recipes for the cats. I picked one simple recipe with my cats' favorite food --- tuna.&lt;/p&gt;
&lt;p&gt;So here is the tuna birthday cake for the cats, decorated with shrimp with catnip garnish.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm5.static.flickr.com/4017/4577556814_9018ebe5f2.jpg" width="500" height="333" alt="tuna cake" /&gt;&lt;/p&gt;
&lt;p&gt;It looks very nice, but most importantly, it was an instant hit. The cats jumped on to the dinning table as soon as I put the cakes on it.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3363/4577557044_6477ceb9a6.jpg" width="500" height="333" alt="cats checking out birthday cake" /&gt;&lt;/p&gt;
&lt;p&gt;Mayori started with her favorite --- shrimp --- first.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3387/4577560426_585cc5f825.jpg" width="298" height="448" alt="mayori with shrimp" /&gt;&lt;/p&gt;
&lt;p&gt;Tom enjoyed the cake itself too.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm5.static.flickr.com/4018/4576927309_9749a462f9.jpg" width="500" height="333" alt="tom ate cake" /&gt;&lt;/p&gt;
&lt;p&gt;Recipe (modified based on an online recipe I found, but I could not find the original link anymore):&lt;/p&gt;
&lt;p&gt;1. Turn the oven on 350 degree&lt;/p&gt;
&lt;p&gt;2. A can of tuna or salmon in water + 2 eggs + a little bit cheese + a little bit of flour&lt;/p&gt;
&lt;p&gt;3. Mix all the &lt;span class="st"&gt;ingredients &lt;/span&gt;and put into a muffin pan.&lt;/p&gt;
&lt;p&gt;4. Bake for 15 minutes&lt;/p&gt;
&lt;p&gt;5. Garnish with a cooked shrimp (the easiest way is to put one or two shrimp into a cup of water in a tea cup. Microwave for 1 -2 minutes).&lt;/p&gt;
&lt;p&gt;Of course, I always pick something nice from &lt;a href="https://yyhh.org/top-10-products-cats" title="birthday gift for the cats"&gt;this list&lt;/a&gt; as their birthday gift!&lt;/p&gt;
&lt;p&gt;蛋糕的做法如下：&lt;/p&gt;
&lt;p&gt;先把烤箱调到350度。&lt;/p&gt;
&lt;p&gt;然后将tuna／salmon 罐头一个, 鸡蛋两个，少量cheese，少量面粉，搅拌好以后倒到&lt;br&gt;
烤muffin的模子里。&lt;/p&gt;
&lt;p&gt;放烤箱内烤15分钟左右, 上面再放上煮好的虾一只就好了。&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category><category term="Cooking"></category></entry><entry><title>Resources to Get Rid of Lawn the Frugal Way (Phrase I)</title><link href="https://yyhh.org/blog/2011/09/resources-to-get-rid-of-lawn-the-frugal-way-phrase-i" rel="alternate"></link><published>2011-09-05T01:39:00-07:00</published><updated>2011-09-05T01:39:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-09-05:/blog/2011/09/resources-to-get-rid-of-lawn-the-frugal-way-phrase-i</id><summary type="html">&lt;p&gt;Collecting resources for replacing a front lawn with a native-plant garden on a budget, beginning with sheet mulching and demolition planning.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;We are getting rid of our front lawn --- to save water and money!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;A landscape designer helped us did the design to convert our front yard from an old deteriorating classic English garden into a vibrant modern garden full of native plants.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Given our shoe-string budget, we plan to do most of the work ourselves. However, since both of us work full time, it will be a while before we can actually start the project, but being a person who loves to plan,  I have started collecting resources to do the project frugal way already!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Here are the resources I have collected so far based on the main steps for the landscape projects:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Step 1. Demolition&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;We need to get rid of some plants and get rid of the lawn. It would cost a fortune to hire professional to do all the work, especially given the size of our front yard. So my current plan is to wait for the rain and then get rid of the lawn via sheet mulch.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;This video on YouTube explains in details how to do &lt;a href="https://www.youtube.com/watch?v=4PB0Ym_iXmc&amp;amp;feature=player_detailpage"&gt;sheet multch&lt;/a&gt;. This websites added some more way to &lt;a href="https://www.naturalfrontyards.com/faqs/"&gt;amend soil during sheet multch&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Here is a link describing &lt;a href="https://fremontlibraries.wordpress.com/2009/06/05/how-to-remove-your-lawn/"&gt;alterative ways to get rid of the lawn&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;There are several ways to &lt;a href="https://www.examiner.com/gardening-in-san-jose/where-to-get-inexpensive-or-free-compost-santa-clara-county"&gt;get cheap compost in the Bay area&lt;/a&gt;. The ones I am considering  are &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;Guadalupe Landfill “Valley’s Pride” Compost&lt;/strong&gt;&lt;/span&gt;&lt;br&gt;
&lt;span style="font-size: x-small;"&gt;999 Guadalupe Mines Road&lt;/span&gt;&lt;br&gt;
&lt;span style="font-size: x-small;"&gt;San Jose CA 95120&lt;/span&gt;&lt;br&gt;
&lt;span style="font-size: x-small;"&gt;408 268-1694&lt;/span&gt;&lt;br&gt;
&lt;span style="font-size: x-small;"&gt;Hours: Monday – Friday 8 a.m. - 4:30 p.m.&lt;/span&gt;&lt;br&gt;
&lt;span style="font-size: x-small;"&gt;Feedstock used: yard trimmings, stable manures, redwood grindings&lt;/span&gt;&lt;br&gt;
&lt;span style="font-size: x-small;"&gt;Delivery available. Self – haul price $20/yard, bags available for small quantities.&lt;/span&gt;&lt;/p&gt;</content><category term="experience"></category><category term="House"></category></entry><entry><title>Before and After --- Master Bathroom Remodeling</title><link href="https://yyhh.org/blog/2011/09/before-and-after-master-bathroom-remodeling" rel="alternate"></link><published>2011-09-04T06:04:00-07:00</published><updated>2011-09-04T06:04:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-09-04:/blog/2011/09/before-and-after-master-bathroom-remodeling</id><summary type="html">&lt;p&gt;Before-and-after photos of a master bathroom remodel, turning a dark room into a bright retreat with two sinks, a rain shower, and a freestanding tub.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The old master bathroom is dark and ugly, with only one sink and w/o tub.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3576/3510649673_bb7be58ecd.jpg" height="240" alt="master bathroom (before)" /&gt; &lt;img src="https://farm4.static.flickr.com/3643/3511460330_af487bccd5.jpg" height="240" alt="master bathroom (before)" /&gt;&lt;/p&gt;
&lt;p&gt;We wanted a master bathroom that is modern and bright, and at the same time with a sense of Zen. We also wanted it to have two sink and separate shower and tub. Three months and a lot of work later, we have what we wanted and it totally worthies it since we are now enjoying it everyday. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3314/3524171411_bc6de3450f.jpg?v=0" height="240" alt="master bathroom (after)" /&gt; &lt;img src="https://farm4.static.flickr.com/3571/3524981104_e4286d9cf8.jpg?v=0" height="240" alt="master bathroom (after)" /&gt;&lt;/p&gt;
&lt;p&gt;I love everything about the new bathroom. But the top three on my lists are:&lt;/p&gt;
&lt;p&gt;1. Shower panel with rain head --- it makes each shower much enjoyable that I really miss it every time I go travel even when I stay in 5-star hotels.&lt;/p&gt;
&lt;p&gt;2. The recessed medical cabinets from Pottery Barn --- they are a little pricey but well-worth it, because they look nice and at the same time can hide all my stuff. They are the reason why the counter is always clutter-free.&lt;/p&gt;
&lt;p&gt;3. Maax Free Standing Air Tub --- It makes every bath a really relaxing experience and super easy to clean and maintain (no harder than a usual soaking tub, no worry for mold).&lt;/p&gt;</content><category term="experience"></category><category term="House"></category></entry><entry><title>Gift Buying Guide for Your Family and Friends in China</title><link href="https://yyhh.org/blog/2011/08/gift-buying-guide-for-your-family-and-friends-in-china" rel="alternate"></link><published>2011-08-05T06:30:00-07:00</published><updated>2011-08-05T06:30:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-08-05:/blog/2011/08/gift-buying-guide-for-your-family-and-friends-in-china</id><summary type="html">&lt;p&gt;Gift ideas gathered for a trip to China, organized around family and friends, with notes on preferences and the pitfalls of buying gifts abroad.&lt;/p&gt;</summary><content type="html">&lt;p&gt;China is a fast-changing country. Not surprisingly, the list of popular gifts for Chinese family, relatives and friends keeps on changing as well.  When I return to China, I always do some extensive research to gather an updated shopping list of gifts to buy. Here is a summary based on various gift-giving guides and online forum postings for my recent trip to China.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Parents/Elderly Relatives&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* Vitamin Supplements&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* Wisconsin Ginseng&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;Health-related gifts have been always appreciated in China. Even though the same product may be available in China, items bought oversea are considered as of higher quality.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Women&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* Skin Care/Cosmetics&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most Western brands sold in department store such as Clinique, Estee Lauder and Lancome are very much adored by Chinese women. However, if you happen to get any free gift with purchase, don't gift that alone. Many people know that you get it for free, so it would be very insulting if you just give the free gift as a gift.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* Jewelry&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you really want to make a strong impression, buy from well-known brands such as Tiffany and Cartier. However, it is not a good idea to buy non-name brand pearl, which is typically much cheaper in China, or any gold jewelry that is 14K or lower, as gold jewelry in China is typically 18K or higher.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;* Chocolate/Candies&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following items are especially popular: Lindt chocolate, Ferrero Rochet Fine Hazelnut chocolate, Almond Roca.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;* Handbag/Sun Glass/Clothing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well-known name brands including Adidas, LV, Gucci, Chanel, Ralph Lauren, COACH, CK, Guess, AE, Gap, Levis, Express, Bebe, Nine West, Juicy Couture. Believe it or not, although most products are made in China, it is usually much cheaper to buy the name brands in US.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;3. Men&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* Cigarette / Zippo lighter&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A good portion of men in China smoke. Brand name cigarette and Zippo lighter can be good gift for them.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;* Red Wine&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A good choice is any Napa Valley red wine.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;* State Quarters / Yearly Stamp Collection&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* Name brand watch/belt/shoe&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Children&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;* Chocolate/Candies&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* Name-brand Clothing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most well-known name brands are good choices.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;* Disney-brand toys / Educational toys&lt;/strong&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category><category term="Shopping"></category></entry><entry><title>Display LaTeX Math on Drupal with MathJax</title><link href="https://yyhh.org/blog/2011/07/display-latex-math-on-drupal-with-mathjax" rel="alternate"></link><published>2011-07-18T20:19:00-07:00</published><updated>2011-07-18T20:19:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-07-18:/blog/2011/07/display-latex-math-on-drupal-with-mathjax</id><summary type="html">&lt;p&gt;Displaying LaTeX mathematics in Drupal with MathJax, including inline and display examples, module configuration, and support for print-friendly pages.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="https://www.mathjax.org/"&gt;MathJax&lt;/a&gt; seems to be the emerging standard for displaying math on the Web at this moment. It is supported by American Mathematical Society and American Physical Society, and has already been adopted by major math related discussion venues such as Physics Forums and Stack Exchange. MathJax displays math using CSS and Web fonts instead of images, so the quality is very high and is resize-friendly. Below are some examples:&lt;/p&gt;
&lt;p&gt;Inline math: the geometric product $\boldsymbol{uv}$ of vectors $\boldsymbol{u}$ and $\boldsymbol{v}$ is $\boldsymbol{u}\cdot\boldsymbol{v} + \boldsymbol{u}\wedge\boldsymbol{v}$, where $\boldsymbol{u}\cdot\boldsymbol{v}$ is the inner product and $\boldsymbol{u}\wedge\boldsymbol{v}$ is the outer product. &lt;/p&gt;
&lt;p&gt;Display math: the rotation of vector $\boldsymbol{u}$ by angle $\theta$ in plane $\boldsymbol{i}$ is $$R_{\boldsymbol{i}\theta}(\boldsymbol{u}) = e^{-\boldsymbol{i}\theta/2}\boldsymbol{u}e^{\boldsymbol{i}\theta/2}$$&lt;/p&gt;
&lt;p&gt;Some random expressions copied directly from the &lt;a href="ftp://ftp.ams.org/ams/doc/amsmath/short-math-guide.pdf"&gt;short math guide for latex&lt;/a&gt;: $$\begin{pmatrix}
\alpha&amp;amp; \beta^{&lt;em&gt;}\
\gamma^{&lt;/em&gt;}&amp;amp; \delta
\end{pmatrix}$$ $$\frac{{\displaystyle\sum_{n &amp;gt; 0} z^n}}
{{\displaystyle\prod_{1\leq k\leq n} (1-q^k)}}$$ $$2^k-\binom{k}{1}2^{k-1}+\binom{k}{2}2^{k-2}$$&lt;/p&gt;
&lt;p&gt;Finally, an obligatory integral: $$\int !!! \int_D f(x,y)\,dx\,dy$$&lt;/p&gt;
&lt;p&gt;The math input could be either LaTeX or MathML, embedded in regular HTML text. MathJax is a Javascript library, so it works at the browser's side. After the HTML is rendered, the MathJax code scans the output, find pieces of text marked by user defined math delimiters (more on that later), and replaces them by typesetted math. The math may take a couple of seconds to show up depending on the browser and the network speed. The MathJax library can be fetched from content delivery network (CDN), so it is fairly simple to add MathJax to any Web site. Here is how I did it for this Drupal 6 site.&lt;/p&gt;
&lt;p&gt;There is a &lt;a href="https://drupal.org/project/mathjax"&gt;Drupal module for MathJax&lt;/a&gt; that loads MathJax from CDN for every Drupal page. The module also allows Drupal pages to be selectively MathJax enabled according to some URL patterns. By default, all pages are MathJax enabled except for these paths: &lt;em&gt;admin/&lt;/em&gt;, node/add/&lt;em&gt;, node/&lt;/em&gt;/edit/&lt;em&gt;, which is reasonable. However, path based selective enabling is still a bit crude, because most pages would not contain math, so MathJax simply slows down page rendering for most pages without any benefit. It would be great if the selection can also be tag based, so only the posts tagged as "math" and maybe the front page need to incur such slow down. Another useful feature would be to allow MathJax configuration within the module. The default configuration of MathJax is not very reasonable for Drupal, &lt;span style="text-decoration: line-through"&gt;so users have to add the configurations manually to the page template at this time&lt;/span&gt;. &lt;/em&gt;&lt;em&gt;Updated Aug.25, 2011:&lt;/em&gt;* Julou, the author of the module, has responded to my feature request and added a text area for MathJax configuration in the development version of the module. I have tested it and it works.&lt;/p&gt;
&lt;p&gt;One of the most annoying default settings of MathJax is the definition of math delimiters. For inline math, the default delimiters are ( ), and for math on its own line, the default delimiters are [ ].  Because ( ) and [ ] are so commonly used in regular non-math text, this default setting is unreasonable for Drupal, as MathJax will remove the parentheses and change the text font to be math like for a Drupal page. Double dollar sign is okay, but to show the regular dollar sign properly, it needs to be escaped by reverse backslash, which is not the default setting of MathJax. Also, the default message display of MathJax is a bit too much for my taste, and I minimized them a bit.&lt;/p&gt;
&lt;p&gt;If your site has the &lt;a href="https://drupal.org/project/print"&gt;print module&lt;/a&gt; installed, you need to copy the file &lt;em&gt;print.tpl.php&lt;/em&gt; to your theme templates directory, and add the same as above so the print friendly version also show math properly. &lt;/p&gt;
&lt;p&gt;For more MathJax configuration options, please refer to the &lt;a href="https://www.mathjax.org/docs/1.1/configuration.html"&gt;MathJax documentation&lt;/a&gt;&lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="Drupal"></category><category term="Math"></category><category term="LaTeX"></category></entry><entry><title>Upgrade Drupal with Almost Zero Down Time</title><link href="https://yyhh.org/blog/2011/07/upgrade-drupal-with-almost-zero-down-time" rel="alternate"></link><published>2011-07-16T08:17:00-07:00</published><updated>2011-07-16T08:17:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-07-16:/blog/2011/07/upgrade-drupal-with-almost-zero-down-time</id><summary type="html">&lt;p&gt;Upgrading Drupal 5 to 6 with minimal downtime by preparing and testing a copy of the site before moving it into production.&lt;/p&gt;</summary><content type="html">&lt;p&gt;This site was setup in 2007 with Drupal 5, and it has not been upgraded until today. I did not feel the need to upgrade since this is just a personal blog. A few days ago I wanted to install a module, but Drupal version 6 is required, so I thought it's finally the time to upgrade Drupal. &lt;/p&gt;
&lt;p&gt;This &lt;a href="https://drupal.org/node/340073"&gt;Drupal upgrade tutorial&lt;/a&gt; suggests to first take down the site to upgrade, but I do not like that. It turns out that more than a few days of work are required to bring back a fully functional upgraded site, so taking the site down to upgrade is not a good idea. Below is what I did to upgrade this site from version 5.3 to 6.22 with almost zero down time (well, maybe a few seconds, I didn't time it). &lt;/p&gt;
&lt;p&gt;The idea is simple: keep the old site running, setup a test site with a copy of the data, upgrade at test site, fix any problems there, delete the old site when done, and move the test site to be the production site. &lt;/p&gt;
&lt;p&gt;First, the old version 5 site needs to be prepared. This means upgrading it from whatever old version to the latest version 5.22. Since this preparation is a minor upgrade, there is no need to bring down the site. Just download the 5.22 tar ball and unpack it over the existing Drupal directory. Run yoursite.com/update.php to update the database. Then download and install update_status module. It will tell you which third-party modules need to be upgraded. Download, unpack, run update.php, repeat, until all modules are at the lastest 5.x versions. Finally, uninstall update_status module, since it is included in Drupal 6 core. &lt;/p&gt;
&lt;p&gt;To setup a test site, first create a &lt;em&gt;test.yoursite.com&lt;/em&gt; sub-domain using your hosting company's tool. Most Web hosting companies allow sub-domains free of charge, and often provide easy to use tools for managing them (if yours does not, switch host company!). Download and unpack the latest Drupal 6 tar ball to a directory in the Web directory, and point the test.yoursite.com sub-domain to the directory using the hosting company's tool. Point the browser to test.yoursite.come, the Drupal installation page should show up. Now stop, DO NOT go though the installation process, for we are upgrading, not installing. Because this upgrade method requires two Drupal sites (e.g. one version 5 and one 6) running at the same time, we need to have two databases. Your hosting company should allow the creation of new databases free of charge. &lt;/p&gt;
&lt;p&gt;First, we need to check the minimum &lt;a href="https://drupal.org/requirements"&gt;system requirement&lt;/a&gt; of the new version of Drupal, especially the database requirement. This can be found at &lt;em&gt;yoursite.com/admin/reports/status&lt;/em&gt; page. Here, we are reaping the benefit of keeping the old site running while upgrading the test site: we can look up system information easily. In my case, the old site is using MySQL version 4.0, which is older than the minimum requirement of Drupal 6. Fortunately, newly created databases using my hosting company's tool are MySQL version 5.0. One thing needs to be careful about is the character encoding of the new database. Make sure it is using &lt;em&gt;utf-8&lt;/em&gt; for charset, and the collation is &lt;em&gt;utf8_general_ci&lt;/em&gt;. The later is often not the default, so we need to set it under Operations/Collations in phpMyAdmin, a MySQL management tool most hosting companies provide. &lt;/p&gt;
&lt;p&gt;Now we need to roll over the data. This can be done simply with phpMyAdmin. First, login as the primary administrator (the first user, uid=1) at the old Drupal site, and then dump its database using phpMyAdmin. Basically, we need to export all the tables. If the tables are big, you may want to export a few tables at a time. For some tables, such as &lt;em&gt;cache, cache_*, sessions, search_*, and watchdog&lt;/em&gt;, you may want to export the structure only, instead of both structure and data, as these data can be dynamically regenerated. &lt;/p&gt;
&lt;p&gt;The exported database consists of a bunch of compressed SQL text files. Using phpMyAdmin, browse to the newly created empty database, run these SQL files to import all the tables. After the new database is ready, we need to edit the new Drupal directory's &lt;em&gt;sites/default/settings.php&lt;/em&gt; file. This file is not there initially. There are two ways to create it: a). Copy the file from old Drupal directory if there are a lot of customizations done there; b). Rename the file &lt;em&gt;default.settings.php&lt;/em&gt; to &lt;em&gt;settings.php&lt;/em&gt;. I took the later approach. Now in &lt;em&gt;settings.php&lt;/em&gt;, find the line looks like &lt;em&gt;\$db_url = 'mysql://username:&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#112;&amp;#97;&amp;#115;&amp;#115;&amp;#119;&amp;#111;&amp;#114;&amp;#100;&amp;#64;&amp;#104;&amp;#111;&amp;#115;&amp;#116;&amp;#110;&amp;#97;&amp;#109;&amp;#101;"&gt;&amp;#112;&amp;#97;&amp;#115;&amp;#115;&amp;#119;&amp;#111;&amp;#114;&amp;#100;&amp;#64;&amp;#104;&amp;#111;&amp;#115;&amp;#116;&amp;#110;&amp;#97;&amp;#109;&amp;#101;&lt;/a&gt;/databasename';&lt;/em&gt;, and replace with the correct information for the new database. Save the file, now the new Drupal knows where the database is. Next step is to copy over the old Drupal directory's &lt;em&gt;files&lt;/em&gt; directory, and redo any customizations done for &lt;em&gt;.htaccess&lt;/em&gt; and &lt;em&gt;robot.txt&lt;/em&gt;. Point the browser to &lt;em&gt;test.yoursite.com/update.php&lt;/em&gt;, and follow instructions to update the database. There might be some warnings, but it should be fine if there's no error. &lt;/p&gt;
&lt;p&gt;After Drupal core is upgraded. Download the third-party modules, and install them. After installing each one, don't forget to run update.php again. We again look at the running old site to see what modules are needed. Otherwise, one has to write down a long list of module names first. I still cannot believe how many modules are necessary to run a simple site like this. For fighting spams alone, I installed seven modules. Maybe it is an overkill, but it does not hurt to be on the prudent side. &lt;/p&gt;
&lt;p&gt;Upgrading modules are easy and relatively quick. The big time sink is upgrading the theme. This site uses a sub-theme of &lt;a href="https://drupal.org/project/zen"&gt;zen&lt;/a&gt;. It turns out that the theming systems of Drupal 5 and 6 are quite different, so we cannot just copy the old theme over and expect it to work. All the customizations have to be redone, which means hacking the template files and the CSS files all over again. Having a working old site running is again a big help. Because the tag ids and classes are all different, it is necessary to use Firebug to track and match the styles of the two versions while hacking the CSS files. &lt;/p&gt;
&lt;p&gt;After the new site is tested to be working properly, it is the time to bring the old site off-line and bring the new site online. All it requires is to issue a &lt;em&gt;rm -rf&lt;/em&gt; command to delete the old Drupal directory, followed by a &lt;em&gt;mv&lt;/em&gt; command to move the new Drupal directory to the old one, so that amounts to a couple seconds of down time. Not bad.&lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="Drupal"></category></entry><entry><title>3 Time-Saving Tools for Busy Professionals</title><link href="https://yyhh.org/blog/2011/07/3-time-saving-tools-for-busy-professionals" rel="alternate"></link><published>2011-07-16T08:06:00-07:00</published><updated>2011-07-16T08:06:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-16:/blog/2011/07/3-time-saving-tools-for-busy-professionals</id><summary type="html">&lt;p&gt;How Chore Buster, Mint, and Farm Fresh to You help two busy professionals manage household chores, track finances, and save time on grocery shopping.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As a busy professional, I am consistently looking for ways to save time. Below are 3 time-saving tools that I have found most useful.&lt;/p&gt;
&lt;p&gt;1. &lt;a href="https://www.chorebuster.net/"&gt;Chore Buster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With two busy professionals in the same household, dividing chores around the house can be tricky. Dividing chores in a fixed way is one solution. But one can quickly get bored of doing the same thing everyday.&lt;/p&gt;
&lt;p&gt;With this neat free online tool, we get automatic daily chore assignment based on a pre-defined list of house chores and preference of chores for each person. It is really fun to check off the items at the end of the day. Besides ensure fairness of the chore assignment, the tool also serves as a reminder for chores that only happens once in a while.&lt;/p&gt;
&lt;p&gt;2. &lt;a href="https://www.mint.com/"&gt;Mint&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As the CFO of the family, I do need to keep track of our financial situation. However, I don't really have much time to do so. Mint has been a great help in this regards.&lt;/p&gt;
&lt;p&gt;3. &lt;a href="https://www.farmfreshtoyou.com"&gt;Farm Fresh to You&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Both Huahai and I enjoy cooking. However, weekly grocery shopping can be time-consuming. &lt;span class="st"&gt;This service basically gets organic produce delivery directly to my home from a local organic farmers. It costs $31.5 a box for a week of organic vegetable and fruit. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="st"&gt;We now only do grocery shopping every other weeks, saving both time and fuel. One thing that I like about the service is that I can exclude items so that I won't get anything that I don't like. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="st"&gt;If you decide to try this service out, don't forget to mention promotion code &lt;/span&gt;&lt;span class="st"&gt;2798 and &lt;/span&gt;&lt;span class="st"&gt;our customer number &lt;/span&gt;236470 to get 20% off your first box.&lt;/p&gt;</content><category term="opinion"></category><category term="GTD"></category></entry><entry><title>How to Share Mouse and Keyboard across Machines</title><link href="https://yyhh.org/blog/2011/07/how-to-share-mouse-and-keyboard-across-machines" rel="alternate"></link><published>2011-07-11T00:45:00-07:00</published><updated>2011-07-11T00:45:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-11:/blog/2011/07/how-to-share-mouse-and-keyboard-across-machines</id><summary type="html">&lt;p&gt;Using Synergy to share one keyboard and mouse across a desktop and laptop, with seamless pointer movement and clipboard sharing between machines.&lt;/p&gt;</summary><content type="html">&lt;p&gt;If you have multiple machines but only one set of mouse and keyboard, then you must check out this neat little tool called &lt;a href="https://synergy-foss.org"&gt;Synergy&lt;/a&gt;. It allows you to seamlessly share mouse and keyboard across machines. It even allows you to copy and paste text across machines.&lt;/p&gt;
&lt;p&gt;I have been using it for a few years now and have recommended it to many already. We all absolutely love it. My current set up is a desktop with two monitors and a set of keyboard and mouse connecting to it. Then I have a laptop with another monitor sharing the keyboard and mouse via Synergy with my desktop. This way I can use two machines and three monitors at the same time without any interruption.&lt;/p&gt;
&lt;p&gt;I simply cannot imagine my life w/o Synergy. It is technically straightforward but really useful!&lt;/p&gt;</content><category term="notebook"></category><category term="Software"></category></entry><entry><title>Fix Drupal Search</title><link href="https://yyhh.org/blog/2011/07/fix-drupal-search" rel="alternate"></link><published>2011-07-10T19:18:00-07:00</published><updated>2011-07-10T19:18:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-07-10:/blog/2011/07/fix-drupal-search</id><summary type="html">&lt;p&gt;Restoring Drupal search by reducing the number of items indexed per cron run and clearing the database variables left by a stuck cron job.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today I tried to search "clojure" using the search box at the top right corner, but could not find anything. I know I wrote a few posts on Clojure recently, so there must be something wrong with the search functionality here. This is a Drupal site, and this should be an easy fix. Indeed, I quickly figured out the problem and solved it.Here is what Idid.&lt;/p&gt;
&lt;p&gt;After I login to the administrative interface, I saw lots of cron related errors at the &lt;strong&gt;/admin/logs/watchdog&lt;/strong&gt; page: "&lt;em&gt;Cron has been running for more than an hour and is most likely stuck.&lt;/em&gt;" A google search suggests that this is a common problem. One of the possible reasons is that there are too many things for cron to do so that it cannot finish them within the time limit or it runs out of the memory. The solution is to reduce the amount of work a cron job has to do. Since the indexing of the content on this site is done with a cron job, I checked the indexing setting at &lt;strong&gt;/admin/settings/search&lt;/strong&gt; page. Sure enough, the option &lt;strong&gt;Items to index per cron run:&lt;/strong&gt; was set at 100, so I changed it to 10 instead.&lt;/p&gt;
&lt;p&gt;I then tried to manually run cron job at &lt;strong&gt;/admin/logs/status&lt;/strong&gt; page, but it didn't work. It turned out that it is necessary to clear the cron related variables in the MySQL database Drupal uses. To do that, I logined into my hosting company's &lt;em&gt;phpmyadmin&lt;/em&gt; interface, searched for "&lt;strong&gt;cron_last&lt;/strong&gt;" and "&lt;strong&gt;cron_semaphore&lt;/strong&gt;". There was no "cron_semaphore", but there was a "cron_last" entry, so I deleted it. Manually ran cron again, now it said "&lt;em&gt;Cron ran successfully&lt;/em&gt;". After several manual runs to get the indexing status to be 100% done, now I can do a search on "clojure", and get the posts to show up. Nice.&lt;/p&gt;</content><category term="notebook"></category><category term="SysAdmin"></category><category term="Drupal"></category></entry><entry><title>Review on Hex Bug as Cat Toy</title><link href="https://yyhh.org/blog/2011/07/review-on-hex-bug-as-cat-toy" rel="alternate"></link><published>2011-07-10T06:04:00-07:00</published><updated>2011-07-10T06:04:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-10:/blog/2011/07/review-on-hex-bug-as-cat-toy</id><summary type="html">&lt;p&gt;Testing a Hex Ant robot as a cat toy finds Mayori indifferent and Tom quickly bored, while the owner enjoys it more than either cat does.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I am consistantly looking for new ways to entertain the cats, as they get bored with their toys very quickly. One new toy I have recently bought for them is &lt;a href="https://www.amazon.com/HEXBUG-Fire-Ant-Colors-vary/dp/B00TV0S746"&gt;Hex Ant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I tried it during the cats outdoor time.  Mayori completely ingored it, while Tom was obviously attracted to it immediately.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6138/5921007030_f5acbaee28.jpg" width="334" height="500" alt="Tom and the Hex Ant" /&gt;&lt;/p&gt;
&lt;p&gt;He tried to smell it.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6029/5920442353_00a3a63958.jpg" width="334" height="500" alt="Tom and Hex Ant" /&gt;&lt;img src="https://farm7.static.flickr.com/6138/5920441967_a6cd68e649.jpg" width="334" height="500" /&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, his interest towards the new toy didn't last long. He quickly walked away as soon as he found out it is not a real bug.&lt;/p&gt;
&lt;p&gt;.&lt;img src="https://farm7.static.flickr.com/6020/5921004268_34c07d379d.jpg" width="334" height="500" /&gt;&lt;/p&gt;
&lt;p&gt;I thus don't recommend it for cat toy. However, it is an interesting piece of toy for myself. So I still recommend it as a human toy.  &lt;/p&gt;</content><category term="experience"></category><category term="Shopping"></category><category term="Pets"></category></entry><entry><title>Review of The Refined Feline Lotus Cat Tower</title><link href="https://yyhh.org/blog/2011/07/review-of-the-refined-feline-lotus-cat-tower" rel="alternate"></link><published>2011-07-04T09:06:00-07:00</published><updated>2011-07-04T09:06:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/review-of-the-refined-feline-lotus-cat-tower</id><summary type="html">&lt;p&gt;Unpacking and assembling the Refined Feline Lotus Cat Tower, with Tom and Mayori inspecting the pieces and claiming their favorite spots.&lt;/p&gt;</summary><content type="html">&lt;p&gt;The old cat tree of Mayori and Tom were bought nearly 4 years ago and has started to show its age. I have been shopping for a new cat tree for a while now. I need something that is nicer than the typical carpet covered cat tree and goes well with the rest of the house. At the same time, I want to get something that Mayori and Tom can really enjoy. Unfortunately, there is very limited number of such choices on the market. One of them is Refined Feline Lotus Cat Tower&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.com/gp/product/B004BA6LSU/ref=as_li_tf_il?ie=UTF8&amp;amp;tag=yunyaoshome-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399373&amp;amp;creativeASIN=B004BA6LSU"&gt;&lt;img alt="product" src="https://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=B004BA6LSU&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=yunyaoshome-20&amp;amp;ServiceVersion=20070822"&gt;&lt;/a&gt;&lt;img src="https://www.assoc-amazon.com/e/ir?t=yunyaoshome-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B004BA6LSU&amp;amp;camp=217145&amp;amp;creative=399373" width="1" height="1" /&gt;&lt;/p&gt;
&lt;p&gt;According to the online reviews, most of the cats and the cat owners like this product. So we brought one for the cats to try out.&lt;/p&gt;
&lt;p&gt;Tom was very curious to check the package out when it arrived. He pointed out some minor damage on the package itself.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6007/5899933185_5d5a8d4dbe.jpg" width="500" height="375" alt="Lotus Cat Tower" /&gt;&lt;img src="https://farm7.static.flickr.com/6099/5899933159_3d6d66d9e4.jpg" width="500" height="375" alt="Lotus Cat Tower" /&gt;&lt;/p&gt;
&lt;p&gt;But he liked new cat tree already once we unpackaged it and immediately claimed one piece as his own.&lt;br&gt;
&lt;img src="https://farm6.static.flickr.com/5275/5899933207_9b134cb17b.jpg" width="500" height="375" alt="Lotus Cat Tree." /&gt;&lt;/p&gt;
&lt;p&gt;Mayori seemed to be satisfied too and kept on inspecting the installation process.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6049/5900513272_e4f622eaec.jpg" width="375" height="500" alt="Lotus Cat tree" /&gt;&lt;/p&gt;
&lt;p&gt;And she claimed the top as soon as the installation was completed. (The installation took less than 2 hours and was not difficult according to Huahai.)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6021/5899933243_2ef8858035.jpg" width="375" height="500" alt="lotus cat tree" /&gt;&lt;/p&gt;
&lt;p&gt;Tom claimed the cube at the bottom.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6011/5900498880_1f72b921eb.jpg" width="500" height="375" alt="lotus cat tower" /&gt;&lt;/p&gt;
&lt;p&gt;Comparing to the old cat tree, the new Refine Feline Lotus Cat Tower is obviously much nicer and looks more like a human furniture. It goes really well with the rest of our bedroom furniture. It is definitely worthy considering for one who is looking to find a cat furniture with great style.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5318/5900498912_f9def84576.jpg" width="375" height="500" alt="Lotus Cat Tower" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Shopping"></category><category term="Pets"></category></entry><entry><title>Cat with Evil Eyes</title><link href="https://yyhh.org/blog/2011/07/cat-with-evil-eyes" rel="alternate"></link><published>2011-07-04T07:58:00-07:00</published><updated>2011-07-04T07:58:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/cat-with-evil-eyes</id><summary type="html">&lt;p&gt;Sweet-natured Mayori reveals her fierce hunting expression while stalking a toy mouse.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Mayori is mostly a very sweet girl. However, she can have evil eyes as well. Look at the follow photo when she wants to hunt to the toy mouse. She certainly looks more like a leopard than a domestic cat!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5111/5899856969_d8388b35cd.jpg" width="500" height="333" alt="cat with evil eyes" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Cat Boxing</title><link href="https://yyhh.org/blog/2011/07/cat-boxing" rel="alternate"></link><published>2011-07-04T07:44:00-07:00</published><updated>2011-07-04T07:44:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/cat-boxing</id><summary type="html">&lt;p&gt;Tom and Mayori have grown up together, but they still enjoy a good tussle over the best spot for watching the world through the window.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Mayori and Tom grow up together ever since they were still little kittens in the shelter. However, they still love to fight, especially for the best spot for window-watching the outside.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6048/5900398848_59e43b506b.jpg" width="500" height="333" alt="cat fight" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Samba Cat Dancer</title><link href="https://yyhh.org/blog/2011/07/samba-cat-dancer" rel="alternate"></link><published>2011-07-04T07:35:00-07:00</published><updated>2011-07-04T07:35:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/samba-cat-dancer</id><summary type="html">&lt;p&gt;Tom shows off his samba dance moves in a playful cat video.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Tom shows off his Samba dance skill.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5280/5899820299_2a6710ec3e.jpg" width="333" height="500" alt="samba dancing cat" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Cat with Impeccable Taste</title><link href="https://yyhh.org/blog/2011/07/cat-with-impeccable-taste" rel="alternate"></link><published>2011-07-04T07:17:00-07:00</published><updated>2011-07-04T07:17:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/cat-with-impeccable-taste</id><summary type="html">&lt;p&gt;Mayori chooses the Bertoia Diamond Lounge chair as her favorite furniture, appreciating both its comfort and its advantages during play fights with Tom.&lt;/p&gt;</summary><content type="html">&lt;p&gt;As a cat, Mayori has impeccable taste, as represented by her favorite furniture in the house --- a Bertoia Diamond Lounge chair.&lt;/p&gt;
&lt;p&gt;It is certainly a modern classic and a piece of highly functional cat furniture as well – Mayori can attack Tom easily from all different angels and only need to defend her from one angel. What a smart cat!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6010/5899768087_1b94f36179.jpg" width="500" height="441" alt="cat on a beroia Diamond Chair" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Cat with Big Paws</title><link href="https://yyhh.org/blog/2011/07/cat-with-big-paws" rel="alternate"></link><published>2011-07-04T06:56:00-07:00</published><updated>2011-07-04T06:56:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/cat-with-big-paws</id><summary type="html">&lt;p&gt;A photo of Tom showing off his latest catch and his impressively big paws.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Tom shows off his catch and his big paws.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5155/5899746253_57b0eb9cbc.jpg" width="500" height="333" alt="cat with big paws" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Cat Drinking from Wine Glass</title><link href="https://yyhh.org/blog/2011/07/cat-drinking-from-wine-glass" rel="alternate"></link><published>2011-07-04T06:44:00-07:00</published><updated>2011-07-04T06:44:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/cat-drinking-from-wine-glass</id><summary type="html">&lt;p&gt;Mayori demonstrates her preferred way to enjoy freshly served water, drinking from a wine glass like a proper cat princess.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Mayori loves drinking fresh-served water, especially from a wine glass. Obviously she believes that is the right way to drink water for a cat princess.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6037/5899724117_ab11a7d14e.jpg" width="333" height="500" alt="cat drink from wine glass" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Cat in a Drawer</title><link href="https://yyhh.org/blog/2011/07/cat-in-a-drawer" rel="alternate"></link><published>2011-07-04T06:36:00-07:00</published><updated>2011-07-04T06:36:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/cat-in-a-drawer</id><summary type="html">&lt;p&gt;Mayori finds a new place to play hide-and-seek in the top drawer of the bedroom dresser.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Mayori loves to play hide-and-seek with us. The top drawer of our dresser is now her new hiding place.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5152/5900257646_9b93849367.jpg" width="500" height="333" alt="cat in a drawer." /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Cat Pizza Delivery</title><link href="https://yyhh.org/blog/2011/07/cat-pizza-delivery" rel="alternate"></link><published>2011-07-04T06:31:00-07:00</published><updated>2011-07-04T06:31:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-07-04:/blog/2011/07/cat-pizza-delivery</id><summary type="html">&lt;p&gt;Mayori takes over a pizza box, finding a cozy new bed that comes with the tempting smell of freshly baked pizza.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Cat in a pizza box?&lt;/p&gt;
&lt;p&gt;Either Mayori believes that she tastes better than the fresh baked version or that she believe that she needs a new bed smelled like fresh baked pizza. Either way she obviously enjoys the pizza box. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm7.static.flickr.com/6032/5900257594_e659867ea4.jpg" width="500" height="375" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>How to redeem British Airways mileages for partner airline flights</title><link href="https://yyhh.org/blog/2011/06/how-to-redeem-british-airways-mileages-for-partner-airline-flights" rel="alternate"></link><published>2011-06-15T05:35:00-07:00</published><updated>2011-06-15T05:35:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2011-06-15:/blog/2011/06/how-to-redeem-british-airways-mileages-for-partner-airline-flights</id><summary type="html">&lt;p&gt;An account of finding British Airways mileage redemptions on partner airlines, using American Airlines routes to locate alternatives to high-fee BA flights.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I have accumulated over 60,000 miles on British Airlines Executive Club reward account for a while now, but keep on having problem redeeming them. First of all, it is difficult to find any reward flight available; secondly, the fee is extremely high --- for a flight from SFO to LHR, I would have to pay 50000 miles + over $600 fee, while the same flight costs less than $1000 when paying with cash.&lt;/p&gt;
&lt;p&gt;Over the weekend, I have investigated the problem and found out that one of the best ways to spend my BA miles is to redeem for British Airways' partner airline flights. However, it is not straightforward to do so, as BA would show its own flights with steep fee first, except when American Airlines and a couple of other partner airlines operate the same route.&lt;/p&gt;
&lt;p&gt;The easiest way I found is the following:&lt;/p&gt;
&lt;p&gt;1. First, check AA's &lt;a href="https://www.aa.com/i18n/aboutUs/whereWeFly/maps/world.jsp"&gt;route map&lt;/a&gt; to find out flight routes operated by AA: &lt;/p&gt;
&lt;p&gt;2. Once you find a route of interest, go to BA's &lt;a href="https://www.britishairways.com/travel/home/public/en_us?link=top_logo"&gt;website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Click on the tab "Executive Club", choose "Spending BA miles" on the drop-down menu, then click on "Book with BA miles" on the left-hand side menu.&lt;/p&gt;
&lt;p&gt;4. Log in and search with the desired route and time.&lt;/p&gt;
&lt;p&gt;For instance, I am interested in booking a flight between SFO and HNL, because I know there are only flights operated by AA for the route.&lt;/p&gt;
&lt;p&gt;You will see a screen similar to the following:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5108/5835342640_08339d564d.jpg" width="500" height="485" alt="screenshot" /&gt;&lt;/p&gt;
&lt;p&gt;5. Now you can either click on "Search" or "Include Parnter" for flights operated by AA.&lt;/p&gt;
&lt;p&gt;If you see the red error message "Unfortunately our systems are not responding, so we are unable to process your request at the moment. We apologies for this inconvenience and suggest you try again later." Don't panic. Just keep on clicking and it will go through eventually.&lt;/p&gt;
&lt;p&gt;With the above method, I was able to book two reward tickets from SFO to HNL with 35,000 miles + $10 fee each.&lt;/p&gt;</content><category term="experience"></category><category term="Travel"></category><category term="Shopping"></category></entry><entry><title>My solutions for problems No. 76-100 on 4clojure.com</title><link href="https://yyhh.org/blog/2011/06/my-solutions-for-problems-no-76-100-on-4clojurecom" rel="alternate"></link><published>2011-06-05T05:36:00-07:00</published><updated>2011-06-05T05:36:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-06-05:/blog/2011/06/my-solutions-for-problems-no-76-100-on-4clojurecom</id><summary type="html">&lt;p&gt;The final installment of solutions to 4clojure's first hundred problems, with reflections on learning core functions and the sequence library.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Finally done with all the 100 problems listed on 4clojure.com so far :-). When new problems appears there, I will probably do them when I have some time to kill, but I will not post my solutions here any more. If I found interesting programming exercises, I may submit to 4clojure as well.&lt;/p&gt;
&lt;p&gt;This has been a great learning experience. I become very familiar with the core Clojure functions, especially the great sequence library. The functional way of writing code is so much fun, I wish I have been exposed to it earlier. Now I am hooked and would like to learn more. It's a pity there ain't many functional algorithm books around. The one I found is Chris Okasaki's "Purely Functional Data Structures", but the exposition language is Standard ML. Let's hope it can be easily translated into Clojure...&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; 77: Write a function which finds all the anagrams in a vector of words. A &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; word x is an anagram of word y if all the letters in x can be rearranged in &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; a different order to form y. Your function should return a set of sets, where&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; each sub-set is a group of words which are anagrams of each other. Each &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; sub-set should have at least two words. Words without any anagrams should not&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; be included in the result.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ ["meat" "mat" "team" "mate" "eat"]) #{#{"meat" "team" "mate"}})&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ ["veer" "lake" "item" "kale" "mite" "ever"]) &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;   #{#{"veer" "ever"} #{"lake" "kale"} #{"mite" "item"}})&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;-&amp;gt;&amp;gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;group-by&lt;/font&gt; &lt;font color="#007080"&gt;frequencies&lt;/font&gt; coll&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;vals&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; %&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;set&lt;/font&gt; &lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#007080"&gt;set&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; anagrams have the same distribution of characters &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 79: Write a function which calculates the sum of the minimal path through a &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; triangle. The triangle is represented as a vector of vectors. The path should &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; start at the top of the triangle and move to an adjacent number on the next &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; row until the bottom of the triangle is reached. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [  [1]&lt;/font&gt;&lt;br&gt;
          &lt;font color="#786000"&gt;;[2 4]&lt;/font&gt;&lt;br&gt;
         &lt;font color="#786000"&gt;;[5 1 4]&lt;/font&gt;&lt;br&gt;
        &lt;font color="#786000"&gt;;[2 3 4 5]])&lt;/font&gt;&lt;br&gt;
   &lt;font color="#786000"&gt;;(+ 1 2 1 3)&lt;/font&gt;&lt;br&gt;
   &lt;font color="#786000"&gt;;7)&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;triangle&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;min&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; path-sum &lt;font color="#912f11"&gt;[&lt;/font&gt;p&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
                &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
                  &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; triangle&lt;font color="#00688b"&gt;)&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; p&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;br&gt;
                    &lt;font color="#912f11"&gt;[(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;+&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map-indexed&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;get-in&lt;/font&gt; triangle &lt;font color="#912f11"&gt;[&lt;/font&gt;%&lt;font color="#077807"&gt;1&lt;/font&gt; %&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#912f11"&gt;])&lt;/font&gt; p&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                    &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;last&lt;/font&gt; p&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                      &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
                        &lt;font color="#483d8b"&gt;(&lt;/font&gt;path-sum &lt;font color="#9400d3"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; p x&lt;font color="#9400d3"&gt;)&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt; &lt;br&gt;
                        &lt;font color="#483d8b"&gt;(&lt;/font&gt;path-sum &lt;font color="#9400d3"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; p &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;inc&lt;/font&gt; x&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;font color="#9400d3"&gt;)&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
              &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; We enumerate all possible paths. The next step in a path can only go to the &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; same or the plus one row index as the previous step, so the paths form a&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; binary tree. We walk the tree recursively, building a row index vector p for&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; each path.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 81: Reimplement set intersection&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;set&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; %&lt;font color="#077807"&gt;1&lt;/font&gt; %&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#912f11"&gt;))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; sets are functions too, so this works&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 82: A word chain consists of a set of words ordered so that each word differs&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; by only one letter from the words directly before and after it. The one &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; letter difference can be either an insertion, a deletion, or a substitution. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Here is an example word chain:&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; cat -&amp;gt; cot -&amp;gt; coat -&amp;gt; oat -&amp;gt; hat -&amp;gt; hot -&amp;gt; hog -&amp;gt; dog&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Write a function which takes a sequence of words, and returns true if they &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; can be arranged into one continous word chain, and false if they cannot.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= false (__ #{"cot" "hot" "bat" "fat"}))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= true (__ #{"spout" "do" "pot" "pout" "spot" "dot"}))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;word-set&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;letfn&lt;/font&gt; &lt;font color="#912f11"&gt;[(&lt;/font&gt;edit-dist &lt;font color="#912f11"&gt;[&lt;/font&gt;a b&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
            &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;cond&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
              &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;not&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;or&lt;/font&gt; a b&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;0&lt;/font&gt; &lt;br&gt;
              &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;not&lt;/font&gt; b&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; a&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
              &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;not&lt;/font&gt; a&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; b&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
              &lt;font color="#1f3f81"&gt;&lt;strong&gt;:else&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;ra &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;next&lt;/font&gt; a&lt;font color="#912f11"&gt;)&lt;/font&gt; rb &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;next&lt;/font&gt; b&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; a&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; b&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;br&gt;
                        &lt;font color="#698b22"&gt;(&lt;/font&gt;edit-dist ra rb&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;br&gt;
                        &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;+&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;min&lt;/font&gt; &lt;br&gt;
                               &lt;font color="#96cdcd"&gt;(&lt;/font&gt;edit-dist ra rb&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;br&gt;
                               &lt;font color="#96cdcd"&gt;(&lt;/font&gt;edit-dist ra b&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;br&gt;
                               &lt;font color="#96cdcd"&gt;(&lt;/font&gt;edit-dist a rb&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
          &lt;font color="#912f11"&gt;(&lt;/font&gt;find-paths &lt;font color="#912f11"&gt;[&lt;/font&gt;graph start seen&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
            &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;seen start&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
              seen&lt;br&gt;
              &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n &lt;font color="#912f11"&gt;(&lt;/font&gt;graph start&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                &lt;font color="#cdcd00"&gt;(&lt;/font&gt;find-paths graph n &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; seen start&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;graph &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#912f11"&gt;{}&lt;/font&gt; &lt;br&gt;
                      &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;s word-set&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
                        &lt;font color="#912f11"&gt;[&lt;/font&gt;s &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;edit-dist s %&lt;font color="#912f11"&gt;))&lt;/font&gt; word-set&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;w&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
                  &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; word-set &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;br&gt;
                        &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;flatten&lt;/font&gt; &lt;font color="#483d8b"&gt;(&lt;/font&gt;find-paths graph w &lt;font color="#912f11"&gt;#{}&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;br&gt;
                word-set&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;br&gt;
        &lt;font color="#077807"&gt;true&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; This problem consists of two sub-problems: A. Determine the edit distance &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; between two strings. For brevity, we just used the standard recursive &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; algorithm instead of dynamic programming. B. For the graph of strings &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; connected by edges of edit distance 1, find a simple (no loop) path that &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; goes through all strings once and only once. The graph is represented as&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; a map of adjacent node lists. We enumerate all simple paths in the graph &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; until we found one going through all nodes.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 84: Write a function which generates the transitive closure of a binary &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; relation. The relation will be represented as a set of 2 item vectors.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (let [divides #{[8 4] [9 3] [4 2] [27 9]}]&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;   (= (__ divides) #{[4 2] [8 4] [8 2] [9 3] [27 9] [27 3]}))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (let [progeny&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;       #{["father" "son"] ["uncle" "cousin"] ["son" "grandson"]}]&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;         (= (__ progeny)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;              #{["father" "son"] ["father" "grandson"]&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;                     ["uncle" "cousin"] ["son" "grandson"]}))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;relation&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;letfn&lt;/font&gt; &lt;font color="#912f11"&gt;[(&lt;/font&gt;expand &lt;font color="#912f11"&gt;[&lt;/font&gt;r&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
            &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;m &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#912f11"&gt;{}&lt;/font&gt; r&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
              &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;-&amp;gt;&amp;gt;&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
                     r&lt;br&gt;
                     &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;k v&lt;font color="#912f11"&gt;]&lt;/font&gt; m&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
                       &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when-let&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;nv &lt;font color="#912f11"&gt;(&lt;/font&gt;m v&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;k nv&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
                &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;identity&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
                &lt;font color="#007080"&gt;set&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
          &lt;font color="#912f11"&gt;(&lt;/font&gt;first-consecutive &lt;font color="#912f11"&gt;[&lt;/font&gt;pred &lt;font color="#912f11"&gt;[&lt;/font&gt;f &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; rs&lt;font color="#912f11"&gt;]]&lt;/font&gt; &lt;br&gt;
            &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; rs&lt;br&gt;
              &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;pred f &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; rs&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
                f&lt;br&gt;
                &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;recur&lt;/strong&gt;&lt;/font&gt; pred rs&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;first-consecutive &lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;iterate&lt;/font&gt; expand relation&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we iteratively expand the set of transitive relation, until the set no &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; longer changes&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 85: Write a function which generates the power set of a given set. The power &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; set of a set x is the set of all subsets of x, including the empty set and x &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; itself.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ #{1 :a}) #{#{1 :a} #{:a} #{} #{1}})&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;s&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;init e&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;set&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; init &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt; e&lt;font color="#912f11"&gt;)&lt;/font&gt; init&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;[#{&lt;/font&gt;e&lt;font color="#912f11"&gt;}]&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#912f11"&gt;#{#{}}&lt;/font&gt; s&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we just add one element at a time&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 86: Happy numbers are positive integers that follow a particular formula: take&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; each individual digit, square it, and then sum the squares to get a new number&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Repeat with the new number and eventually, you might get to a number whose &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; squared sum is 1. This is a happy number. An unhappy number (or sad number) is&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; one that loops endlessly. Write a function that determines if a number is &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; happy or not.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 7) true)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 986543210) true)&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;letfn&lt;/font&gt; &lt;font color="#912f11"&gt;[(&lt;/font&gt;digits &lt;font color="#912f11"&gt;[&lt;/font&gt;n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
            &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;y &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;iterate&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partial&lt;/font&gt; &lt;font color="#007080"&gt;*&lt;/font&gt; &lt;font color="#077807"&gt;10&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;:while&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;&amp;lt;=&lt;/font&gt; y n&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
              &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rem&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;int&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;/&lt;/font&gt; n y&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;10&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
          &lt;font color="#912f11"&gt;(&lt;/font&gt;sqr-sum &lt;font color="#912f11"&gt;[&lt;/font&gt;ds&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
            &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;+&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;*&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; ds&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;r &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt; &lt;font color="#912f11"&gt;#{&lt;/font&gt;&lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;4&lt;/font&gt;&lt;font color="#912f11"&gt;}&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;iterate&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;comp&lt;/font&gt; sqr-sum digits&lt;font color="#ee9a00"&gt;)&lt;/font&gt; x&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;cond&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; r&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;true&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;4&lt;/font&gt; r&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; it turns out that 4 is a sad number, as it results into an infinite loop&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 88: Write a function which returns the symmetric difference of two sets. The&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; symmetric difference is the set of items belonging to one but not both of &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; the two sets.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ #{1 2 3 4 5 6} #{1 3 5 7}) #{2 4 6 7})&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;set&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;remove&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;set&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; %&lt;font color="#077807"&gt;1&lt;/font&gt; %&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; %&lt;font color="#077807"&gt;1&lt;/font&gt; %&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we remove the intersection from the union&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 89: Starting with a graph you must write a function that returns true if it &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; is possible to make a tour of the graph in which every edge is visited exactly&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; once.  The graph is represented by a vector of tuples, where each tuple &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; represents a single edge.  The rules are: &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; - You can start at any node.  &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; - You must visit each edge exactly once.  &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; - All edges are undirected.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= true (__ [[1 2] [2 3] [3 4] [4 1]]))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= false (__ [[1 2] [2 3] [2 4] [2 5]]))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= false (__ [[:a :b] [:a :b] [:a :c] [:c :a] [:a :d] [:b :d] [:c :d]]))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= true (__ [[:a :b] [:a :c] [:c :b] [:a :e] [:b :e] [:a :d] [:b :d] &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;              [:c :e] [:d :e] [:c :f] [:d :f]]))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;edge-list&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;graph &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;merge-with&lt;/font&gt; &lt;br&gt;
                &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#912f11"&gt;%1&lt;/font&gt; &lt;font color="#912f11"&gt;%2&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;br&gt;
                &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
                  &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map-indexed&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
                    &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;i &lt;font color="#912f11"&gt;[&lt;/font&gt;k v&lt;font color="#912f11"&gt;]]&lt;/font&gt; &lt;br&gt;
                      &lt;font color="#912f11"&gt;[{&lt;/font&gt;k &lt;font color="#912f11"&gt;#{{&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:node&lt;/strong&gt;&lt;/font&gt; v &lt;font color="#1f3f81"&gt;&lt;strong&gt;:index&lt;/strong&gt;&lt;/font&gt; i&lt;font color="#912f11"&gt;}}}&lt;/font&gt; &lt;br&gt;
                       &lt;font color="#912f11"&gt;{&lt;/font&gt;v &lt;font color="#912f11"&gt;#{{&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:node&lt;/strong&gt;&lt;/font&gt; k &lt;font color="#1f3f81"&gt;&lt;strong&gt;:index&lt;/strong&gt;&lt;/font&gt; i&lt;font color="#912f11"&gt;}}}]&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
                    edge-list&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt;&lt;br&gt;
          &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;node&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
            &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt; &lt;br&gt;
              &lt;font color="#007080"&gt;identity&lt;/font&gt; &lt;br&gt;
              &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;flatten&lt;/font&gt; &lt;br&gt;
                &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#483d8b"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; visit &lt;font color="#912f11"&gt;[&lt;/font&gt;n vs&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
                   &lt;font color="#9400d3"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;every?&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;vs &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:index&lt;/strong&gt;&lt;/font&gt; %&lt;font color="#912f11"&gt;))&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;graph n&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;br&gt;
                     &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;every?&lt;/font&gt; &lt;font color="#007080"&gt;identity&lt;/font&gt; vs&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;true&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;br&gt;
                     &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;(&lt;/font&gt;graph n&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                       &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when-not&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;vs &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:index&lt;/strong&gt;&lt;/font&gt; x&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
                         &lt;font color="#ee9a00"&gt;(&lt;/font&gt;visit &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:node&lt;/strong&gt;&lt;/font&gt; x&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;assoc&lt;/font&gt; vs &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:index&lt;/strong&gt;&lt;/font&gt; x&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;true&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;font color="#9400d3"&gt;)&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;br&gt;
                 node &lt;font color="#483d8b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;vec&lt;/font&gt; &lt;font color="#9400d3"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; edge-list&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#9400d3"&gt;)&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;br&gt;
          &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;set&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;concat&lt;/font&gt; edge-list&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
      &lt;font color="#077807"&gt;true&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; This problem looks similar to problem 82 as both are graph traversals, but&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; the graphs are quite different. Here redundent edges exist, so we cannot use&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; a set or a map to track edge visits, we instead use a vector of booleans. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Also, the condition is to traverse all edges instead of all nodes. We again &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; use a map of adjacent node lists as the graph, but supplement each adjacent &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; node with the index of the corresponding edge. Finally, here a node can be &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; visited multiple times, and we terminates a path at a node only when all of &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; its edges have already been visited.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 91: Given a graph, determine whether the graph is connected. A connected &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; graph is such that a path exists between any two given nodes.  &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; -Your function must return true if the graph is connected and false otherwise.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; -You will be given a set of tuples representing the edges of a graph. Each &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;  member of a tuple being a vertex/node in the graph.  &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; -Each edge is undirected (can be traversed either direction). &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;  (= false (__ #{[1 2] [2 3] [3 1] [4 5] [5 6] [6 4]}))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;  (= true (__ #{[1 2] [2 3] [3 1][4 5] [5 6] [6 4] [3 4]}))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;edge-list&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;graph &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;merge-with&lt;/font&gt; &lt;br&gt;
                &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#912f11"&gt;%1&lt;/font&gt; &lt;font color="#912f11"&gt;%2&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;br&gt;
                &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
                  &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;k v&lt;font color="#912f11"&gt;]]&lt;/font&gt; &lt;font color="#912f11"&gt;[{&lt;/font&gt;k &lt;font color="#912f11"&gt;#{&lt;/font&gt;v&lt;font color="#912f11"&gt;}}&lt;/font&gt; &lt;font color="#912f11"&gt;{&lt;/font&gt;v &lt;font color="#912f11"&gt;#{&lt;/font&gt;k&lt;font color="#912f11"&gt;}}]&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; edeg-list&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; %&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; graph&lt;font color="#912f11"&gt;))&lt;/font&gt; &lt;br&gt;
              &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;flatten&lt;/font&gt; &lt;br&gt;
                &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; paths &lt;font color="#912f11"&gt;[&lt;/font&gt;node seen&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
                   &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#483d8b"&gt;(&lt;/font&gt;seen node&lt;font color="#483d8b"&gt;)&lt;/font&gt; &lt;br&gt;
                     seen&lt;br&gt;
                     &lt;font color="#483d8b"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;(&lt;/font&gt;graph node&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                       &lt;font color="#9400d3"&gt;(&lt;/font&gt;paths x &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; seen node&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;font color="#9400d3"&gt;)&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;br&gt;
                 &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;ffirst&lt;/font&gt; graph&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;#{}&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
      &lt;font color="#077807"&gt;true&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;  This graph traversal problem is simpler than both 82 and 89. We only  need &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;  to start searching from any one of the nodes instead of all nodes. But the &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;  pattern of the code is similar.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 92: Write a function to parse a Roman-numeral string and return the number it&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; represents. You can assume that the input will be well-formed, in upper-case,&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; and follow the subtractive principle. You don't need to handle any numbers &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; greater than MMMCMXCIX (3999), the largest number representable with &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; ordinary letters.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= 827 (__ "DCCCXXVII"))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= 48 (__ "XLVIII"))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;s&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;snum &lt;font color="#912f11"&gt;{[&lt;/font&gt;&lt;font color="#077807"&gt;\C&lt;/font&gt; &lt;font color="#077807"&gt;\M&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#077807"&gt;900&lt;/font&gt;  &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;\C&lt;/font&gt; &lt;font color="#077807"&gt;\D&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#077807"&gt;400&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;\X&lt;/font&gt; &lt;font color="#077807"&gt;\C&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#077807"&gt;90&lt;/font&gt; &lt;br&gt;
             &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;\X&lt;/font&gt; &lt;font color="#077807"&gt;\L&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#077807"&gt;40&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;\I&lt;/font&gt; &lt;font color="#077807"&gt;\X&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#077807"&gt;9&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;\I&lt;/font&gt; &lt;font color="#077807"&gt;\V&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#077807"&gt;4&lt;/font&gt;&lt;font color="#912f11"&gt;}&lt;/font&gt;&lt;br&gt;
        nums &lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;font color="#077807"&gt;\I&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;\V&lt;/font&gt; &lt;font color="#077807"&gt;5&lt;/font&gt; &lt;font color="#077807"&gt;\X&lt;/font&gt; &lt;font color="#077807"&gt;10&lt;/font&gt; &lt;font color="#077807"&gt;\L&lt;/font&gt; &lt;font color="#077807"&gt;50&lt;/font&gt; &lt;font color="#077807"&gt;\C&lt;/font&gt; &lt;font color="#077807"&gt;100&lt;/font&gt; &lt;font color="#077807"&gt;\D&lt;/font&gt; &lt;font color="#077807"&gt;500&lt;/font&gt; &lt;font color="#077807"&gt;\M&lt;/font&gt; &lt;font color="#077807"&gt;1000&lt;/font&gt;&lt;font color="#912f11"&gt;}]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;letfn&lt;/font&gt; &lt;font color="#912f11"&gt;[(&lt;/font&gt;sum-snum &lt;font color="#912f11"&gt;[[&lt;/font&gt;f &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; r&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;br&gt;
                      &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; f&lt;br&gt;
                        &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;+&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;if-let&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n &lt;font color="#912f11"&gt;(&lt;/font&gt;snum &lt;font color="#912f11"&gt;[&lt;/font&gt;f &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; r&lt;font color="#912f11"&gt;)])]&lt;/font&gt; &lt;br&gt;
                             n &lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
                           &lt;font color="#cdcd00"&gt;(&lt;/font&gt;sum-snum r&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
                        &lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
            &lt;font color="#912f11"&gt;(&lt;/font&gt;del-snum &lt;font color="#912f11"&gt;[[&lt;/font&gt;f &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; r&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;br&gt;
                         &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; f&lt;br&gt;
                           &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;snum &lt;font color="#912f11"&gt;[&lt;/font&gt;f &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; r&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
                             &lt;font color="#cdcd00"&gt;(&lt;/font&gt;del-snum &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rest&lt;/font&gt; r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
                             &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; f &lt;font color="#698b22"&gt;(&lt;/font&gt;del-snum r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;+&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;sum-snum s&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; nums &lt;font color="#008b00"&gt;(&lt;/font&gt;del-snum s&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; We first find and sum the special numbers (4, 9, etc), remove them and sum&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; the rest.  &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 93: Write a function which flattens any nested combination of sequential &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; things (lists, vectors, etc.), but maintains the lowest level sequential &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; items. The result should be a sequence of sequences with only one level of &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; nesting.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '((1 2)((3 4)((((5 6))))))) '((1 2)(3 4)(5 6)))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; pf &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;l &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; coll&lt;font color="#912f11"&gt;)&lt;/font&gt; r &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;next&lt;/font&gt; coll&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;and&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;sequential?&lt;/font&gt; l&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;not&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;sequential?&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; l&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
        &lt;font color="#912f11"&gt;[&lt;/font&gt;l&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;pf l&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;sequential?&lt;/font&gt; r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;pf r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; this is just a slight modification of the solution to problem 28.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 94: The game of life is a cellular automaton devised by mathematician John &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Conway.  The 'board' consists of both live (#) and dead ( ) cells. Each cell &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; interacts with its eight neighbours (horizontal, vertical, diagonal), and its&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; next state is dependent on the following rules: 1) Any live cell with fewer &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; than two live neighbours dies, as if caused by under-population.  2) Any live&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; cell with two or three live neighbours lives on to the next generation.  3) &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Any live cell with more than three live neighbours dies, as if by overcrowding&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; . 4) Any dead cell with exactly three live neighbours becomes a live cell, as&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; if by reproduction.  Write a function that accepts a board, and returns a &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; board representing the next generation of cells.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;(= (__ ["      " &lt;/font&gt;&lt;br&gt;
        &lt;font color="#786000"&gt;;" ##   "&lt;/font&gt;&lt;br&gt;
        &lt;font color="#786000"&gt;;" ##   "&lt;/font&gt;&lt;br&gt;
        &lt;font color="#786000"&gt;;"   ## "&lt;/font&gt;&lt;br&gt;
        &lt;font color="#786000"&gt;;"   ## "&lt;/font&gt;&lt;br&gt;
        &lt;font color="#786000"&gt;;"      "])&lt;/font&gt;&lt;br&gt;
   &lt;font color="#786000"&gt;;["      " &lt;/font&gt;&lt;br&gt;
    &lt;font color="#786000"&gt;;" ##   "&lt;/font&gt;&lt;br&gt;
    &lt;font color="#786000"&gt;;" #    "&lt;/font&gt;&lt;br&gt;
    &lt;font color="#786000"&gt;;"    # "&lt;/font&gt;&lt;br&gt;
    &lt;font color="#786000"&gt;;"   ## "&lt;/font&gt;&lt;br&gt;
    &lt;font color="#786000"&gt;;"      "])&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;board&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;offsets &lt;font color="#912f11"&gt;[[&lt;/font&gt;&lt;font color="#077807"&gt;-1&lt;/font&gt; &lt;font color="#077807"&gt;-1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;-1&lt;/font&gt; &lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;-1&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
                 &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;0&lt;/font&gt; &lt;font color="#077807"&gt;-1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;0&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
                 &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;-1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;br&gt;
        height &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; board&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        width &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; board&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        get-state &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;x y&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;dx dy&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;br&gt;
                    &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;c &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;+&lt;/font&gt; x dx&lt;font color="#912f11"&gt;)&lt;/font&gt; r &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;+&lt;/font&gt; y dy&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                      &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;or&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;&amp;lt;&lt;/font&gt; c &lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; c width&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;&amp;lt;&lt;/font&gt; r &lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; r height&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
                        &lt;font color="#077807"&gt;\space&lt;/font&gt;&lt;br&gt;
                        &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;get-in&lt;/font&gt; board &lt;font color="#912f11"&gt;[&lt;/font&gt;r c&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        count-lives &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;p&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
                      &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;+&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;\#&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;get-state p %&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;0&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; offsets&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        next-state &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;s p&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
                     &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n &lt;font color="#912f11"&gt;(&lt;/font&gt;count-lives p&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
                       &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;or&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; n &lt;font color="#077807"&gt;3&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
                               &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;and&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; s &lt;font color="#077807"&gt;\#&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; n &lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
                         &lt;font color="#077807"&gt;\#&lt;/font&gt;&lt;br&gt;
                         &lt;font color="#077807"&gt;\space&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;-&amp;gt;&amp;gt;&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;for&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;y &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;range&lt;/font&gt; height&lt;font color="#912f11"&gt;)&lt;/font&gt; x &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;range&lt;/font&gt; width&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
           &lt;font color="#698b22"&gt;(&lt;/font&gt;next-state &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;get-in&lt;/font&gt; board &lt;font color="#912f11"&gt;[&lt;/font&gt;y x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x y&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partition&lt;/font&gt; width&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;str&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
      &lt;font color="#007080"&gt;vec&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; This is straight-forward. The only tricky part is to remember that the order &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; of paramaters for the get-in function and the x-y coordinates is opposite to &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; each other.   &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 95: Write a predicate which checks whether or not a given sequence represents&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; a binary tree. Each node in the tree must have a value, a left child, and a &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; right child.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '(:a (:b nil nil) nil)) true)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '(:a (:b nil nil))) false)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 nil [2 [3 nil nil] [4 nil nil]]]) true)&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; bt? &lt;font color="#912f11"&gt;[&lt;/font&gt;t&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;or&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;not&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;sequential?&lt;/font&gt; t&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
          &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;and&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;3&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; t&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
               &lt;font color="#698b22"&gt;(&lt;/font&gt;bt? &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;second&lt;/font&gt; t&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
               &lt;font color="#698b22"&gt;(&lt;/font&gt;bt? &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;last&lt;/font&gt; t&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#077807"&gt;true&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; I think one of the unit tests of the problem is wrong: &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 [2 [3 [4 false nil] nil] nil] nil]) false)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; why shouldn't "false" be a legal tree node, or why should leaf have to be nil? &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 96: Let us define a binary tree as "symmetric" if the left half of the tree &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; is the mirror image of the right half of the tree. Write a predicate to &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; determine whether or not a given binary tree is symmetric.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '(:a (:b nil nil) (:b nil nil))) true)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '(:a (:b nil nil) nil)) false)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 [2 nil [3 [4 [5 nil nil] [6 nil nil]] nil]]&lt;/font&gt;&lt;br&gt;
          &lt;font color="#786000"&gt;;[2 [3 nil [4 [6 nil nil] [5 nil nil]]] nil]]) true)&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;t&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; mir? &lt;font color="#912f11"&gt;[&lt;/font&gt;l r&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
     &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;or&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;nil&lt;/font&gt; l r&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;br&gt;
             &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;and&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; l&lt;font color="#00688b"&gt;)&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; r&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;br&gt;
                  &lt;font color="#96cdcd"&gt;(&lt;/font&gt;mir? &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;second&lt;/font&gt; l&lt;font color="#00688b"&gt;)&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;last&lt;/font&gt; r&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;br&gt;
                  &lt;font color="#96cdcd"&gt;(&lt;/font&gt;mir? &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;last&lt;/font&gt; l&lt;font color="#00688b"&gt;)&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;second&lt;/font&gt; r&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
       &lt;font color="#077807"&gt;true&lt;/font&gt; &lt;font color="#077807"&gt;false&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
   &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;second&lt;/font&gt; t&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;last&lt;/font&gt; t&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 97: Pascal's triangle is a triangle of numbers computed using the following &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; rules: &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; - The first row is 1.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; - Each successive row is computed by adding together adjacent numbers in the &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;   row above, and adding a 1 to the beginning and end of the row.  &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Write a function which returns the nth row of Pascal's Triangle.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (map __ (range 1 6))&lt;/font&gt;&lt;br&gt;
   &lt;font color="#786000"&gt;;[     [1]&lt;/font&gt;&lt;br&gt;
        &lt;font color="#786000"&gt;;[1 1]&lt;/font&gt;&lt;br&gt;
       &lt;font color="#786000"&gt;;[1 2 1]&lt;/font&gt;&lt;br&gt;
      &lt;font color="#786000"&gt;;[1 3 3 1]&lt;/font&gt;&lt;br&gt;
     &lt;font color="#786000"&gt;;[1 4 6 4 1]])&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;nth&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;iterate&lt;/font&gt; &lt;br&gt;
         &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;pre&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
           &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;vec&lt;/font&gt; &lt;br&gt;
             &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
               &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
               &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;f s&lt;font color="#912f11"&gt;]]&lt;/font&gt; &lt;font color="#483d8b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;+&lt;/font&gt; f s&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;font color="#00688b"&gt;)&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partition&lt;/font&gt; &lt;font color="#077807"&gt;2&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; pre&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;br&gt;
               &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
         &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
       &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;dec&lt;/font&gt; n&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;  &lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;</content><category term="notebook"></category><category term="Programming"></category><category term="Clojure"></category></entry><entry><title>My solutions for problems No. 51-75 on 4clojure.com</title><link href="https://yyhh.org/blog/2011/05/my-solutions-for-problems-no-51-75-on-4clojurecom" rel="alternate"></link><published>2011-05-25T01:59:00-07:00</published><updated>2011-05-25T01:59:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-05-25:/blog/2011/05/my-solutions-for-problems-no-51-75-on-4clojurecom</id><summary type="html">&lt;p&gt;Clojure solutions for the next set of 4clojure exercises, with comments on functional techniques and the site's shortest-solution competition.&lt;/p&gt;</summary><content type="html">&lt;p&gt;This post continues the &lt;a href="https://yyhh.org/blog/2011/05/my-solutions-first-50-problems-4clojure-com"&gt;previous one&lt;/a&gt;, on my solutions for small clojure programming problems on &lt;a href="https://www.4clojure.com"&gt;4clojure.com&lt;/a&gt;. Doing these problems seems to be addictive as I could not seem to stop myself. The site recently added a golf league feature, so one can see how short one's own solution compared with others. If a lot of people got a much shorter solution than yours, you know you are not thinking in the right way. This little competition makes the site even more attractive. Anyhow, the code is here:&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; 53: Given a vector of integers, find the longest consecutive sub-sequence of&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; increasing numbers.  If two sub-sequences have the same length, use the one &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; that occurs first. An increasing sub-sequence must have a length of 2 or &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; greater to qualify.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 0 1 2 3 0 4 5]) [0 1 2 3])&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [7 6 5 4]) [])&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;-&amp;gt;&amp;gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partition&lt;/font&gt; &lt;font color="#077807"&gt;2&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; coll&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partition-by&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;-&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;second&lt;/font&gt; %&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; %&lt;font color="#912f11"&gt;))&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;-&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;second&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; %&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;ffirst&lt;/font&gt; %&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;))&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;&amp;lt;&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; %&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; %&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;%2&lt;/font&gt; &lt;font color="#912f11"&gt;%1&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;[]&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#007080"&gt;flatten&lt;/font&gt;&lt;br&gt;
    &lt;font color="#007080"&gt;distinct&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we first create a list of neighoring pairs, partition them by their pair &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; differences, keep those with difference 1, finally return the longest one&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 54: Write a function which returns a sequence of lists of x items each. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Lists of less than x items should not be returned. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 3 (range 8)) '((0 1 2) (3 4 5))) &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: partition, partition-all&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; partition2 &lt;font color="#912f11"&gt;[&lt;/font&gt;n coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;&amp;lt;=&lt;/font&gt; n &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; coll&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;take&lt;/font&gt; n coll&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;partition2 n &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;drop&lt;/font&gt; n coll&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we recursively take n items till not enough items&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 55: Write a function that returns a map containing the number of occurences &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; of each distinct item in a sequence.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 1 2 3 2 1 1]) {1 4, 2 2, 3 1})&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: frequencies&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;gp &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;group-by&lt;/font&gt; &lt;font color="#007080"&gt;identity&lt;/font&gt; coll&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;zipmap&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;keys&lt;/font&gt; gp&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;second&lt;/font&gt; %&lt;font color="#912f11"&gt;))&lt;/font&gt; gp&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; note a map entry is just a two item vector, first item is the key, the&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; second item is the value&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 56: Write a function which removes the duplicates from a sequence. Order of &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; the items must be maintained.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 2 1 3 1 2 4]) [1 2 3 4])&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: distinct&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; step &lt;font color="#912f11"&gt;[[&lt;/font&gt;x &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; xs&lt;font color="#912f11"&gt;]&lt;/font&gt; seen&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
     &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; x&lt;br&gt;
       &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;seen x&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;br&gt;
         &lt;font color="#008b00"&gt;(&lt;/font&gt;step xs seen&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;br&gt;
         &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; x &lt;font color="#96cdcd"&gt;(&lt;/font&gt;step xs &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; seen x&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
   coll &lt;font color="#912f11"&gt;#{}&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we recursively go through the sequence, use a set to keep track of items &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we've seen, only return those we have not seen before. &lt;/font&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 58: Write a function which allows you to create function compositions. The &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; parameter list should take a variable number of functions, and create a &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; function applies them from right-to-left.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= [3 2 1] ((__ rest reverse) [1 2 3 4]))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: comp&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; xs&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; args&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; step &lt;font color="#912f11"&gt;[[&lt;/font&gt;f &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; fs&lt;font color="#912f11"&gt;]&lt;/font&gt; a&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
       &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; fs&lt;br&gt;
         &lt;font color="#008b00"&gt;(&lt;/font&gt;f &lt;font color="#96cdcd"&gt;(&lt;/font&gt;step fs a&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;br&gt;
         &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; f a&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
     &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; x xs&lt;font color="#cdcd00"&gt;)&lt;/font&gt; args&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; step function takes the function list and the arguments, recursively builds&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; an ever deeper call stack till at the end of the list, where the right most &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; function is called with the given arguments.&lt;/font&gt;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 59: Take a set of functions and return a new function that takes a variable &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; number of arguments and returns sequence containing the result of applying &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; each function left-to-right to the argument list.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= [21 6 1] ((__ + max min) 2 3 5 1 6 4))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: juxt&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; xs&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; args&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt; args&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; x xs&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 60: Write a function which behaves like reduce, but returns each &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; intermediate value of the reduction. Your function must accept either two &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; or three arguments, and the return sequence must be lazy.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (take 5 (__ + (range))) [0 1 3 6 10])&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ conj [1] [2 3 4]) [[1] [1 2] [1 2 3] [1 2 3 4]])&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: reductions&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; reductions2&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;f init &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; xs&lt;font color="#912f11"&gt;]]&lt;/font&gt; &lt;br&gt;
   &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; init &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;lazy-seq&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; x &lt;font color="#008b00"&gt;(&lt;/font&gt;reductions2 f &lt;font color="#96cdcd"&gt;(&lt;/font&gt;f init x&lt;font color="#96cdcd"&gt;)&lt;/font&gt; xs&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;[&lt;/font&gt;f coll&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
   &lt;font color="#ee9a00"&gt;(&lt;/font&gt;reductions2 f &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; coll&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rest&lt;/font&gt; coll&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 61: Write a function which takes a vector of keys and a vector of values &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; and constructs a map from them.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [:a :b :c] [1 2 3]) {:a 1, :b 2, :c 3})&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: zipmap&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#912f11"&gt;{}&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;vector&lt;/font&gt; %&lt;font color="#077807"&gt;1&lt;/font&gt; %&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#912f11"&gt;))&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 62. Given a side-effect free function f and an initial value x &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; write a function which returns an infinite lazy sequence of x,&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (f x), (f (f x)), (f (f (f x))), etc.  &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (take 5 (__ #(* 2 %) 1)) [1 2 4 8 16])&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: iterate&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; iterate2 &lt;font color="#912f11"&gt;[&lt;/font&gt;f x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; x &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;lazy-seq&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;iterate2 f &lt;font color="#698b22"&gt;(&lt;/font&gt;f x&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; it turns out that clojure's own implmentation is the same &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 63. Given a function f and a sequence s, write a function which returns a &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; map. The keys should be the values of f applied to each item in s. The value&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; at each key should be a vector of corresponding items in the order they &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; appear in s.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ #(&amp;gt; % 5) #{1 3 6 8}) {false [1 3], true [6 8]})&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden group-by&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;f s&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; step &lt;font color="#912f11"&gt;[&lt;/font&gt;ret f &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; xs&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;br&gt;
     &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; x&lt;br&gt;
       &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;k &lt;font color="#912f11"&gt;(&lt;/font&gt;f x&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
         &lt;font color="#008b00"&gt;(&lt;/font&gt;step &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;assoc&lt;/font&gt; ret k &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; &lt;font color="#483d8b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;get&lt;/font&gt; ret k &lt;font color="#912f11"&gt;[]&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt; x&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt; f xs&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
       ret&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#912f11"&gt;{}&lt;/font&gt; f &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;seq&lt;/font&gt; s&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; the get function takes a default argument for when the key is not found,&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; which is used to initialize a vector here. Note the use of seq for s, as&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; the collection may be a set, where the [x &amp;amp; xs] destructering doesn't work.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Intead of recursively going over a sequence, we can also use reduce:&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;f s&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;ret x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;k &lt;font color="#912f11"&gt;(&lt;/font&gt;f x&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;assoc&lt;/font&gt; ret k &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;get&lt;/font&gt; ret k &lt;font color="#912f11"&gt;[]&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt; x&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#912f11"&gt;{}&lt;/font&gt; s&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 65: Write a function which takes a collection and returns one of :map, :set,&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; :list, or :vector - describing the type of collection it was given. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= :map (__ {:a 1, :b 2}))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: class, type, Class, vector?, sequential?, list?, seq?, map?, set?&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; instance? getClass&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rand-int&lt;/font&gt; &lt;font color="#077807"&gt;100&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; y &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rand-int&lt;/font&gt; &lt;font color="#077807"&gt;100&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;br&gt;
        p &lt;font color="#912f11"&gt;[&lt;/font&gt;x y&lt;font color="#912f11"&gt;]&lt;/font&gt; c &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; coll z&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;cond&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; y &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;get&lt;/font&gt; c x&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;:map&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; p &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;get&lt;/font&gt; c p&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;:set&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; x &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;last&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; c x&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;:vector&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
      &lt;font color="#1f3f81"&gt;&lt;strong&gt;:else&lt;/strong&gt;&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;:list&lt;/strong&gt;&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we conj a random two element vector into the collection, map will treat it &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; as a new key value pair, others treat it as a single item; set is a map too,&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; so we can get the vector back with itself as the key; vector and list are &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; differentiated by the position of the conj.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 67: Write a function which returns the first x number of prime numbers. &lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;take&lt;/font&gt; x&lt;br&gt;
        &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;remove&lt;/font&gt; &lt;br&gt;
          &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
            &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;0&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;mod&lt;/font&gt; n %&lt;font color="#912f11"&gt;))&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;range&lt;/font&gt; &lt;font color="#077807"&gt;2&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;inc&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;int&lt;/font&gt; &lt;font color="#483d8b"&gt;(&lt;/font&gt;Math/sqrt n&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
          &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;iterate&lt;/font&gt; &lt;font color="#007080"&gt;inc&lt;/font&gt; &lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we just test each number n, each divided by numbers from 2 up to sqrt(n)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 69: Write a function which takes a function f and a variable number of maps.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Your function should return a map that consists of the rest of the maps &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; conj-ed onto the first. If a key occurs in more than one map, the mapping(s)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; from the latter (left-to-right) should be combined with the mapping in the &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; result by calling (f val-in-result val-in-latter)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ - {1 10, 2 20} {1 3, 2 10, 3 15}) {1 7, 2 10, 3 15})&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: merge-with&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;f m &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; ms&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;ret x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;r k&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
          &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; r &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;r k&lt;font color="#00688b"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;k &lt;font color="#912f11"&gt;(&lt;/font&gt;f &lt;font color="#cd3700"&gt;(&lt;/font&gt;r k&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;x k&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;find&lt;/font&gt; x k&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;br&gt;
        ret &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;keys&lt;/font&gt; x&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; m ms&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; note a map is a function itself, so (r k) and (x k) works&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 70: Write a function which splits a sentence up into a sorted list of words.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Capitalization should not affect sort order and punctuation should be ignored&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__  "Have a nice day.") ["a" "day" "Have" "nice"])&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;s&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;sort-by&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;.toLowerCase &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;re-seq&lt;/font&gt; &lt;font color="#077807"&gt;#"\w+"&lt;/font&gt; s&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 73: A tic-tac-toe board is represented by a two dimensional vector. X is &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; represented by :x, O is represented by :o, and empty is represented by :e. A &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; player wins by placing three Xs or three Os in a horizontal, vertical, or &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; diagonal row. Write a function which analyzes a tic-tac-toe board and returns&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; :x if X has won, :o if O has won, and nil if neither player has won.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= nil (__ [[:e :e :e]&lt;/font&gt;&lt;br&gt;
            &lt;font color="#786000"&gt;;[:e :e :e]&lt;/font&gt;&lt;br&gt;
            &lt;font color="#786000"&gt;;[:e :e :e]]))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;(= :x (__ [[:x :e :o]&lt;/font&gt;&lt;br&gt;
           &lt;font color="#786000"&gt;;[:x :e :e]&lt;/font&gt;&lt;br&gt;
           &lt;font color="#786000"&gt;;[:x :e :o]]))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;board&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;i &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#077807"&gt;0&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
        c &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;take&lt;/font&gt; &lt;font color="#077807"&gt;12&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cycle&lt;/font&gt; i&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        p &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;flatten&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt; &lt;font color="#077807"&gt;3&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; i&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        zip &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;vector&lt;/font&gt; &lt;font color="#912f11"&gt;%1&lt;/font&gt; &lt;font color="#912f11"&gt;%2&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        win? &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;w&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
               &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;some&lt;/font&gt; &lt;br&gt;
                 &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;every?&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; w &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;get-in&lt;/font&gt; board %&lt;font color="#912f11"&gt;))&lt;/font&gt; x&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;br&gt;
                 &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partition&lt;/font&gt; &lt;br&gt;
                   &lt;font color="#077807"&gt;3&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;zip &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; i p&lt;font color="#008b00"&gt;)&lt;/font&gt; c&lt;font color="#698b22"&gt;)&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;zip c &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;reverse&lt;/font&gt; i&lt;font color="#96cdcd"&gt;)&lt;/font&gt; p&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;cond&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;win? &lt;font color="#1f3f81"&gt;&lt;strong&gt;:x&lt;/strong&gt;&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;:x&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;win? &lt;font color="#1f3f81"&gt;&lt;strong&gt;:o&lt;/strong&gt;&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;:o&lt;/strong&gt;&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we basically enumerate all possible winning positions, which fall into&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; some regular patterns. I am sure there are better ways, but in the &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; interest of time... Note the use of get-in to fetech value in a multiple &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; dimensional vector: (get-in board [x y])&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 74: Given a string of comma separated integers, write a function which &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; returns a new comma separated string that only contains the numbers &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; which are perfect squares.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ "4,5,6,7,8,9") "4,9")&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;s&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;-&amp;gt;&amp;gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;re-seq&lt;/font&gt; &lt;font color="#077807"&gt;#"\d+"&lt;/font&gt; s&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;Integer/parseInt &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
              &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;r &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;int&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;Math/sqrt x&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
                &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; x &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;*&lt;/font&gt; r r&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;interpose&lt;/font&gt; &lt;font color="#077807"&gt;","&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;str&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 75: Two numbers are coprime if their greatest common divisor equals 1. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Euler's totient function f(x) is defined as the number of positive integers &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; less than x which are coprime to x. The special case f(1) equals 1. Write a &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; function which calculates Euler's totient function.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 10) (count '(1 3 7 9)) 4)&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;-&amp;gt;&amp;gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;range&lt;/font&gt; &lt;font color="#077807"&gt;2&lt;/font&gt; n&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
              &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; gcd &lt;font color="#912f11"&gt;[&lt;/font&gt;a b&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
                      &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#483d8b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#077807"&gt;0&lt;/font&gt; b&lt;font color="#483d8b"&gt;)&lt;/font&gt; a &lt;font color="#483d8b"&gt;(&lt;/font&gt;gcd b &lt;font color="#9400d3"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;mod&lt;/font&gt; a b&lt;font color="#9400d3"&gt;)&lt;/font&gt;&lt;font color="#483d8b"&gt;)&lt;/font&gt;&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;br&gt;
                    x n&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#007080"&gt;count&lt;/font&gt;&lt;br&gt;
    &lt;font color="#007080"&gt;inc&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;</content><category term="notebook"></category><category term="Programming"></category><category term="Clojure"></category></entry><entry><title>My solutions for the first 50 problems on 4clojure.com</title><link href="https://yyhh.org/blog/2011/05/my-solutions-for-the-first-50-problems-on-4clojurecom" rel="alternate"></link><published>2011-05-18T23:13:00-07:00</published><updated>2011-05-18T23:13:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-05-18:/blog/2011/05/my-solutions-for-the-first-50-problems-on-4clojurecom</id><summary type="html">&lt;p&gt;Learning functional programming through 4clojure's first fifty exercises, with Clojure solutions, explanations, and later improvements.&lt;/p&gt;</summary><content type="html">&lt;p&gt;For someone without previous Lisp experience, the hardest part of learning &lt;a href="https://clojure.org"&gt;Clojure&lt;/a&gt; programming seems to be the functional way of doing things. It is like math, one really needs to do some exercises in order to master it. At this point, &lt;a href="https://www.4clojure.com"&gt;4clojure.com&lt;/a&gt; seems to be the best place for getting such exercises. It has a lot of problems for new clojurians to solve. These problems ask one to fill in the blank __ so the given expressions are true. To give a little challenge, some clojure built-in functions are forbidden to use for some problems. New problems are added from time to time on the site, so it surely can keep me entertained for a while.&lt;/p&gt;
&lt;p&gt;I just finished the first 50 problems and think it might be helpful to post the solutions here. I tried to be functional and avoided using loops in the code. Some solutions are skipped as they seem trivial even for a functional newbie like myself. My solutions are probably just awful, but it is a fun experience nevertheless. I will post more solutions when I am done with them (Solutions &lt;a href="https://yyhh.org/blog/2011/05/my-solutions-problems-no-51-75-4clojure-com"&gt;No.50-75&lt;/a&gt; and &lt;a href="https://yyhh.org/blog/2011/06/my-solutions-problems-no-76-100-4clojure-com"&gt;76-100&lt;/a&gt;) Update: there are better solutions for problem 21, 27 and 44, contributed by visitors to the old site. But those comments are lost during system switch over. &lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 21: Write a function which returns the Nth element from a sequence.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '(4 5 6 7) 2) 6)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: nth&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll n&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;comp&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; &lt;font color="#007080"&gt;first&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt; n &lt;font color="#007080"&gt;rest&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt; coll&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; We first compose n rest functions to get progressively shorter lists &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; till the &lt;/font&gt;&lt;font color="#786000"&gt;desired element is the head, then take the head. A less &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; &lt;/font&gt;&lt;/font&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;fancy version just &lt;/font&gt;&lt;font color="#786000"&gt;uses nthnext, but it feels like cheating:&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;nthnext&lt;/font&gt; coll n&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 22: Write a function which returns the total number of elements in &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; a sequence.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '(1 2 3 3 1)) 5)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: count&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;+&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt; %&lt;font color="#912f11"&gt;))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; We just turn each element into 1 and then add them up&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; Note that (fn [x] 1) can be replaced by (constantly 1)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 23: Write a function which reverses a sequence.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 2 3 4 5]) [5 4 3 2 1])&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: reverse&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;into&lt;/font&gt; &lt;font color="#912f11"&gt;()&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; We exploit the property of the list, which alway add new element &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; in front of the head. Also that the clojure sequences' equality&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; evaluation is element based, so [1 2 3] equals to '(1 2 3)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 26: Write a function which returns the first X fibonacci numbers.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 6) '(1 1 2 3 5 8))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;take&lt;/font&gt; x&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; fib &lt;font color="#912f11"&gt;[&lt;/font&gt;a b&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; a &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;lazy-seq&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;fib b &lt;font color="#00688b"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;+&lt;/font&gt; a b&lt;font color="#00688b"&gt;)&lt;/font&gt;&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
      &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;br&gt;
&lt;font color="#786000"&gt;; we first recursively construct a lazy sequence of infinite number of &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; fibonacci numbers&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 27: Write a function which returns true if the given sequence is&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; a palindrome.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (true? (__ '(1 1 3 3 1 1))) &lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;rc &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;reverse&lt;/font&gt; coll&lt;font color="#912f11"&gt;)&lt;/font&gt; n &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; coll&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;every?&lt;/font&gt; &lt;font color="#007080"&gt;identity&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;nth&lt;/font&gt; coll %&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;nth&lt;/font&gt; rc %&lt;font color="#912f11"&gt;))&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;range&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;/&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;dec&lt;/font&gt; n&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we naively compare half of the pairs of elment e(i) and e(n-i-1)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 28: Write a function which flattens a sequence.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ '((1 2) 3 [4 [5 6]])) '(1 2 3 4 5 6)) &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: flatten&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; flt &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;l &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; coll&lt;font color="#912f11"&gt;)&lt;/font&gt; r &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;next&lt;/font&gt; coll&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;sequential?&lt;/font&gt; l&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;flt l&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
        &lt;font color="#912f11"&gt;[&lt;/font&gt;l&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when&lt;/strong&gt;&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;sequential?&lt;/font&gt; r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;br&gt;
        &lt;font color="#698b22"&gt;(&lt;/font&gt;flt r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; we basically treat the nested collection as a tree and recursively &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; walk the &lt;/font&gt;&lt;font color="#786000"&gt;tree. Clojure's flatten use a tree-seq to walk the tree.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 29: Write a function which takes a string and returns a new &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; string containing&lt;/font&gt;&lt;font color="#786000"&gt; only the capital letters.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ "HeLlO, WoRlD!") "HLOWRD")    &lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;str&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;filter&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;Character/isUpperCase &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; coll&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; note the use of apply here, as str takes a number of args instead&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; of a character collection&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; 30: Write a function which removes consecutive duplicates from a sequence.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;;  (= (apply str (__ "Leeeeeerrroyyy")) "Leroy")&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; cmprs &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;when-let&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;f &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; r&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;seq&lt;/font&gt; coll&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; f &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;cmprs r&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; f &lt;font color="#698b22"&gt;(&lt;/font&gt;cmprs r&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;  &lt;br&gt;
&lt;font color="#786000"&gt;; Basically a variant of the filter function. Note the sequence &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; is destructed&lt;/font&gt;&lt;font color="#786000"&gt; into first element f and the rest r. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 31: Write a function which packs consecutive duplicates into sub-lists.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 1 2 1 1 1 3 3]) '((1 1) (2) (1 1 1) (3 3)))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; pack &lt;font color="#912f11"&gt;[&lt;/font&gt;res prev coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;if-let&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;f &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; r&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;seq&lt;/font&gt; coll&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;br&gt;
      &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;=&lt;/font&gt; f &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; prev&lt;font color="#96cdcd"&gt;)&lt;/font&gt;&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;br&gt;
        &lt;font color="#008b00"&gt;(&lt;/font&gt;pack res &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; prev f&lt;font color="#96cdcd"&gt;)&lt;/font&gt; r&lt;font color="#008b00"&gt;)&lt;/font&gt; &lt;br&gt;
        &lt;font color="#008b00"&gt;(&lt;/font&gt;pack &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; res prev&lt;font color="#96cdcd"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;f&lt;font color="#912f11"&gt;]&lt;/font&gt; r&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
     &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;conj&lt;/font&gt; res prev&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
    &lt;font color="#912f11"&gt;[]&lt;/font&gt; &lt;font color="#912f11"&gt;[(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; coll&lt;font color="#912f11"&gt;)]&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rest&lt;/font&gt; coll&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;  &lt;br&gt;
&lt;font color="#786000"&gt;; res is the final list, prev keeps the immediate previous sub-list. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; A much simpler version use partition-by:&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;partition-by&lt;/font&gt; &lt;font color="#007080"&gt;identity&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 33: Write a function which replicates each element of a sequence &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; n number of &lt;/font&gt;&lt;font color="#786000"&gt;times.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 2 3] 2) '(1 1 2 2 3 3)) &lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt; n &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; coll&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; or more succintly: &lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;mapcat&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt; n &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; coll&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 34: Write a function which creates a list of all integers in a &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; given range. &lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 1 4) '(1 2 3))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: range&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;s e&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;take&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;-&lt;/font&gt; e s&lt;font color="#ee9a00"&gt;)&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;iterate&lt;/font&gt; &lt;font color="#007080"&gt;inc&lt;/font&gt; s&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 38: Write a function which takes a variable number of parameters &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; and returns &lt;/font&gt;&lt;font color="#786000"&gt;the maximum value.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: max, max-key&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 1 8 3 4) 8)&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;x &lt;font color="#912f11"&gt;&amp;amp;&lt;/font&gt; xs&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;reduce&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;&amp;lt;&lt;/font&gt; %&lt;font color="#077807"&gt;1&lt;/font&gt; %&lt;font color="#077807"&gt;2&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;%2&lt;/font&gt; &lt;font color="#912f11"&gt;%1&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; x xs&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 39: Write a function which takes two sequences and returns the first&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; item &lt;/font&gt;&lt;font color="#786000"&gt;from each, then the second item from each, then the third, etc.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 2] [3 4 5 6]) '(1 3 2 4))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: interleave&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;mapcat&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;vector&lt;/font&gt; &lt;font color="#912f11"&gt;%1&lt;/font&gt; &lt;font color="#912f11"&gt;%2&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 40: Write a function which separates the items of a sequence by &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; an arbitrary &lt;/font&gt;&lt;font color="#786000"&gt;value.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 0 [1 2 3]) [1 0 2 0 3])&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; forbidden: interpose&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;sep coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;drop-last&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;mapcat&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;vector&lt;/font&gt; coll &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt; sep&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 41: Write a function which drops every Nth item from a sequence.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 2 3 4 5 6 7 8] 3) [1 2 4 5 7 8])  &lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;flatten&lt;/font&gt; &lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;drop-last&lt;/font&gt; &lt;font color="#912f11"&gt;%&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partition&lt;/font&gt; n coll&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; &lt;br&gt;
      &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;take-last&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rem&lt;/font&gt; &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;count&lt;/font&gt; coll&lt;font color="#008b00"&gt;)&lt;/font&gt; n&lt;font color="#698b22"&gt;)&lt;/font&gt; coll&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; We partition the sequence, drop last one from each, then stitch them&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; back&lt;/font&gt;&lt;font color="#786000"&gt; take care the remaining elements too&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 42: Write a function which calculates factorials.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 5) 120)&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;*&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;range&lt;/font&gt; &lt;font color="#077807"&gt;1&lt;/font&gt; &lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;inc&lt;/font&gt; n&lt;font color="#cdcd00"&gt;)&lt;/font&gt;&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; clojure arithmetic functions can take a variable number of arguments&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 43: Write a function which reverses the interleave process into n &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; number of &lt;/font&gt;&lt;font color="#786000"&gt;subsequences.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ [1 2 3 4 5 6] 2) '((1 3 5) (2 4 6)))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;coll n&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;map&lt;/strong&gt;&lt;/font&gt; &lt;font color="#007080"&gt;list&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;partition&lt;/font&gt; n coll&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; exploit map function's ability to take a variable number of &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; collections as &lt;/font&gt;&lt;font color="#786000"&gt;arguments&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 44: Write a function which can rotate a sequence in either direction.&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ 2 [1 2 3 4 5]) '(3 4 5 1 2))&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (__ -2 [1 2 3 4 5]) '(4 5 1 2 3))&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;fn&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;n coll&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;let&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;ntime &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;neg?&lt;/font&gt; n&lt;font color="#cd3700"&gt;)&lt;/font&gt; &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;-&lt;/font&gt; n&lt;font color="#cd3700"&gt;)&lt;/font&gt; n&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
        lshift &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;concat&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;rest&lt;/font&gt; %&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;[(&lt;/font&gt;&lt;font color="#007080"&gt;first&lt;/font&gt; %&lt;font color="#912f11"&gt;)])&lt;/font&gt;&lt;br&gt;
        rshift &lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;cons&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;last&lt;/font&gt; %&lt;font color="#912f11"&gt;)&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;drop-last&lt;/font&gt; %&lt;font color="#912f11"&gt;))]&lt;/font&gt;&lt;br&gt;
    &lt;font color="#ee9a00"&gt;(&lt;/font&gt;&lt;font color="#cdcd00"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;apply&lt;/font&gt; &lt;font color="#007080"&gt;comp&lt;/font&gt; &lt;font color="#698b22"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;repeat&lt;/font&gt; ntime &lt;font color="#008b00"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;if&lt;/font&gt; &lt;font color="#96cdcd"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;neg?&lt;/font&gt; n&lt;font color="#96cdcd"&gt;)&lt;/font&gt; rshift lshift&lt;font color="#008b00"&gt;)&lt;/font&gt;&lt;font color="#698b22"&gt;)&lt;/font&gt;&lt;font color="#cdcd00"&gt;)&lt;/font&gt; coll&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;; 50: Write a function which takes a sequence consisting of items &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; with different&lt;/font&gt;&lt;font color="#786000"&gt; types and splits them up into a set of homogeneous &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; sub-sequences. The internal&lt;/font&gt;&lt;font color="#786000"&gt; order of each sub-sequence should be &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; maintained, but the sub-sequences &lt;/font&gt;&lt;font color="#786000"&gt;themselves can be returned in &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;font color="#786000"&gt;; any order (this is why 'set' is used in the &lt;/font&gt;&lt;font color="#786000"&gt;test cases).&lt;/font&gt;&lt;br&gt;
&lt;font color="#786000"&gt;; (= (set (__ [1 :a 2 :b 3 :c])) #{[1 2 3] [:a :b :c]})&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;#(&lt;/font&gt;&lt;font color="#007080"&gt;vals&lt;/font&gt; &lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#007080"&gt;group-by&lt;/font&gt; &lt;font color="#007080"&gt;type&lt;/font&gt; %&lt;font color="#912f11"&gt;))&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;</content><category term="notebook"></category><category term="Programming"></category><category term="Clojure"></category></entry><entry><title>Develop clojure Web applications with vim</title><link href="https://yyhh.org/blog/2011/05/develop-clojure-web-applications-with-vim" rel="alternate"></link><published>2011-05-02T23:02:00-07:00</published><updated>2011-05-02T23:02:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-05-02:/blog/2011/05/develop-clojure-web-applications-with-vim</id><summary type="html">&lt;p&gt;Getting started with Clojure Web development in Vim, including Leiningen project setup and the tools used for a visual analytics application.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I recently started to learn &lt;a href="https://clojure.org"&gt;clojure&lt;/a&gt; programming. It is an interesting experience. Ever since I learned computer programming almost 20 years ago, in Pascal, on a VAX minicomputer terminal, I have not experienced this newbie sensation with a computer language. The sense of excitement and novelty is high, and the eagerness to put the language to use is higher still. So for my new project at work, I am doing it with clojure.&lt;/p&gt;
&lt;p&gt;This is a visual analytics project, and the visual part will be on the Web. It amazes me &lt;a href="https://www.glenstampoultzis.net/blog/clojure-web-infrastructure/"&gt;how much work&lt;/a&gt; has already been done for the Web using this 3 years old language. So it should be easy for me to get started. Here's what I have so far.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br&gt;
Know your lein&lt;br&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The standard build tool for clojure projects these days seems to be lein, short for &lt;a href="https://github.com/technomancy/leiningen"&gt;leiningen&lt;/a&gt;. It is just a script, download it, make it executable, put it on your path. Also make sure you have java installed. Now go to whatever directory your project will live in, run lein:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lein new myproject&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This creates the default project structure for a project creatively named "myproject", and downloads dependencies from the Internet, including clojure itself (clojure is built on java virtual machine, so the clojure language runtime is just a jar file).&lt;/p&gt;
&lt;p&gt;Now in the "mypoject" directory, there is a "project.clj" file. This file controls everything about the project, except the writing code part. Edit the file according to your needs. There is a very extensive &lt;a href="https://github.com/technomancy/leiningen/blob/master/sample.project.clj"&gt;sample project.clj&lt;/a&gt; that I find very informative. My project.clj so far looks like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace" size="1em"&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 1 &lt;/font&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;defproject myproject &lt;font color="#077807"&gt;"0.0.1-SNAPSHOT"&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 2 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:description&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;"MyProject has super duper visual analytics capabilities"&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 3 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:dependencies&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;org.clojure/clojure &lt;font color="#077807"&gt;"1.2.1"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 4 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;org.clojure/clojure-contrib &lt;font color="#077807"&gt;"1.2.0"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 5 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;compojure &lt;font color="#077807"&gt;"0.6.2"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 6 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;hiccup &lt;font color="#077807"&gt;"0.3.4"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 7 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;ring &lt;font color="#077807"&gt;"0.3.7"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 8 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;commons-logging &lt;font color="#077807"&gt;"1.1.1"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 9 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;org.apache.lucene/lucene-core &lt;font color="#077807"&gt;"3.1.0"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;10 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;xalan &lt;font color="#077807"&gt;"2.7.1"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;11 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;javaewah &lt;font color="#077807"&gt;"0.1.0"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;12 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;com.my.work/secret-lib1 &lt;font color="#077807"&gt;"0.3.4b"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;13 &lt;/font&gt;                 &lt;font color="#912f11"&gt;[&lt;/font&gt;com.my.work/secret-lib2 &lt;font color="#077807"&gt;"0.1.0"&lt;/font&gt;&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;14 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:dev-dependencies&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[[&lt;/font&gt;lein-ring &lt;font color="#077807"&gt;"0.4.0"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;15 &lt;/font&gt;                     &lt;font color="#786000"&gt;;[org.clojars.autre/lein-vimclojure "1.0.0"]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;16 &lt;/font&gt;                     &lt;font color="#912f11"&gt;[&lt;/font&gt;clj-stacktrace &lt;font color="#077807"&gt;"0.2.1"&lt;/font&gt;&lt;font color="#912f11"&gt;]]&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;17 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:repositories&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;18 &lt;/font&gt;            &lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;font color="#077807"&gt;"myrepo"&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;19 &lt;/font&gt;             &lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:url&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;20 &lt;/font&gt;              &lt;font color="#077807"&gt;"&lt;a href="https://myrepo.my.com:8080/artifactory/libs-release-local"&gt;https://myrepo.my.com:8080/artifactory/libs-release-local&lt;/a&gt;"&lt;/font&gt;&lt;font color="#912f11"&gt;}}&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;21 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:source-path&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;"src/clojure"&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;22 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:java-source-path&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;"src/java"&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;23 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:warn-on-reflection&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;true&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;24 &lt;/font&gt;  &lt;font color="#786000"&gt;;:main com.my.myproject.runtime.core)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;25 &lt;/font&gt;  &lt;font color="#1f3f81"&gt;&lt;strong&gt;:ring&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;{&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:handler&lt;/strong&gt;&lt;/font&gt; com.my.myproject.runtime.core/app&lt;font color="#912f11"&gt;})&lt;/font&gt;&lt;br&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Let me explain line by line. The first line is the project name and the current version number (using the so called &lt;a href="https://semver.org"&gt;semantic versioning&lt;/a&gt; scheme).&lt;/p&gt;
&lt;p&gt;The third line starts the dependencies definition. These dependencies are libraries written in jvm languages such as java or clojure. lein will automatically find and download them from public repositories if they are publicly available. This is the case for libraries referred in line 3 - 10, where the last three libs are open source java libs and the rest are open source clojure libs: &lt;a href="https://github.com/weavejester/compojure"&gt;compojure&lt;/a&gt; is a lightweight Web framework, which builds upon &lt;a href="https://github.com/mmcgrana/ring"&gt;ring&lt;/a&gt;, which abstract HTTP into a simple API, &lt;a href="https://github.com/weavejester/hiccup"&gt;hiccup&lt;/a&gt; allows one to write html in clojure syntax.&lt;/p&gt;
&lt;p&gt;The lib on line 11 is also open source, however, it has not been packaged by the author and submitted to a pubic repository, so lein will not be able to find it. What I did was to package it as a jar file myself and deploy it to a private repository I setup for my team, so my team members can all access to the same libs without needing to commit the libs to our version control system, which is not suitable for handling binary data. This private repository is defined on line 17 to 20. Here the repository server is a standard installation of &lt;a href="https://www.jfrog.com/products.php"&gt;artifactory&lt;/a&gt;. The libs on line 12 and 13 are our in-house developed java libraries, which are deployed the same way.&lt;/p&gt;
&lt;p&gt;By default, lein expect clojure code in "myproject/src". Since we will be mixing java code and clojure code, we put them in separate folders. These are defined in line 21 and 22.&lt;/p&gt;
&lt;p&gt;Line 14 starts the dev-dependencies. These are the dependencies for developers' convenience and will not be included in the final product. &lt;a href="https://github.com/weavejester/lein-ring"&gt;lein-ring&lt;/a&gt; is a plugin for facilitating Web development in clojure that utilizes ring. Basically, it adds a ring command for lein. For example,&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lein ring server-headless&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will start a jetty server with the Web app running on port 3000 (default). The Web app is defined on line 25, which is just a simple app to show a greeting in this case. The code consists of two files. core.clj defines the main routing table for the Web app:&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 1 &lt;/font&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;ns&lt;/font&gt; com.my.myproject.runtime.core&lt;br&gt;
&lt;font color="#375288"&gt; 2 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:use&lt;/strong&gt;&lt;/font&gt; compojure.core&lt;br&gt;
&lt;font color="#375288"&gt; 3 &lt;/font&gt;        hiccup.middleware&lt;br&gt;
&lt;font color="#375288"&gt; 4 &lt;/font&gt;        com.my.myproject.runtime.views&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 5 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:require&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;compojure.route &lt;font color="#1f3f81"&gt;&lt;strong&gt;:as&lt;/strong&gt;&lt;/font&gt; route&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 6 &lt;/font&gt;            &lt;font color="#912f11"&gt;[&lt;/font&gt;compojure.handler &lt;font color="#1f3f81"&gt;&lt;strong&gt;:as&lt;/strong&gt;&lt;/font&gt; handler&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 7 &lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 8 &lt;/font&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;defroutes main-routes&lt;br&gt;
&lt;font color="#375288"&gt; 9 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;GET &lt;font color="#077807"&gt;"/"&lt;/font&gt; &lt;font color="#912f11"&gt;[]&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;index-page&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;10 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;route/not-found &lt;font color="#ee9a00"&gt;(&lt;/font&gt;page-404&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;11 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;route/resources &lt;font color="#077807"&gt;"/"&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;12 &lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;13 &lt;/font&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#912f11"&gt;def&lt;/font&gt; app&lt;br&gt;
&lt;font color="#375288"&gt;14 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;-&amp;gt;&lt;/font&gt; &lt;font color="#ee9a00"&gt;(&lt;/font&gt;handler/site main-routes&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;15 &lt;/font&gt;      &lt;font color="#ee9a00"&gt;(&lt;/font&gt;wrap-base-url&lt;font color="#ee9a00"&gt;)&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;views.clj defines the pages to show:&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace"&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 1 &lt;/font&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;ns&lt;/font&gt; com.my.myproject.runtime.views&lt;br&gt;
&lt;font color="#375288"&gt; 2 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:use&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;[&lt;/font&gt;hiccup core page-helpers&lt;font color="#912f11"&gt;]&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 3 &lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 4 &lt;/font&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt; index-page &lt;font color="#912f11"&gt;[]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 5 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;html&lt;br&gt;
&lt;font color="#375288"&gt; 6 &lt;/font&gt;    &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:head&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt; 7 &lt;/font&gt;     &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:title&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;"Welcome"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt; 8 &lt;/font&gt;     &lt;font color="#912f11"&gt;(&lt;/font&gt;include-css &lt;font color="#077807"&gt;"/css/style.css"&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 9 &lt;/font&gt;    &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:body&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;10 &lt;/font&gt;     &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:h1&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;11 &lt;/font&gt;       &lt;font color="#077807"&gt;"Hello World!"&lt;/font&gt;&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;12 &lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;13 &lt;/font&gt;&lt;font color="#912f11"&gt;(&lt;/font&gt;&lt;font color="#800090"&gt;defn&lt;/font&gt; page-404 &lt;font color="#912f11"&gt;[]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;14 &lt;/font&gt;  &lt;font color="#cd3700"&gt;(&lt;/font&gt;html&lt;br&gt;
&lt;font color="#375288"&gt;15 &lt;/font&gt;    &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:head&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;16 &lt;/font&gt;     &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:title&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;"Sorry"&lt;/font&gt;&lt;font color="#912f11"&gt;]&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;17 &lt;/font&gt;     &lt;font color="#912f11"&gt;(&lt;/font&gt;include-css &lt;font color="#077807"&gt;"/css/style.css"&lt;/font&gt;&lt;font color="#912f11"&gt;)]&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;18 &lt;/font&gt;    &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:body&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;19 &lt;/font&gt;     &lt;font color="#912f11"&gt;[&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;:h1&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;"Page not found"&lt;/font&gt;&lt;font color="#912f11"&gt;]]&lt;/font&gt;&lt;font color="#cd3700"&gt;)&lt;/font&gt;&lt;font color="#912f11"&gt;)&lt;/font&gt;&lt;br&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;One very nice thing about lein-ring is that it will automatically pick up any changes made in the project. That's right, live changes, no need to wait for the code to compile, restart the server, etc, just refresh the browser and you will see the changes. This is extremely convenient for Web development, especially for experimentation in clojure REPL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;vimclojure&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I am a vi addict. For my fix, there is a &lt;a href="https://www.vim.org/scripts/script.php?script_id=2501"&gt;vimclojure&lt;/a&gt; plugin for clojure development with vim. To have dynamic features such as code snippet evaluation, code completion etc, there is a need to start a nailgun server so vimclojure can contact with a clojure REPL. This script is what I use:&lt;/p&gt;
&lt;p&gt;&lt;font face="monospace" size="1em"&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 1 &lt;/font&gt;&lt;font color="#786000"&gt;# clojure jar is also installed in ~/.vim/lib&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 2 &lt;/font&gt;&lt;font color="#007080"&gt;CL_CP&lt;/font&gt;=.:~/.vim/lib/*&lt;br&gt;
&lt;font color="#375288"&gt; 3 &lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 4 &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;-f&lt;/strong&gt;&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;font color="#077807"&gt;project.clj&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;;&lt;/strong&gt;&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 5 &lt;/font&gt;  &lt;font color="#007080"&gt;CP&lt;/font&gt;=&lt;font color="#912f11"&gt;`lein classpath`&lt;/font&gt;:&lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;font color="#800090"&gt; $CL_CP&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 6 &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 7 &lt;/font&gt;  &lt;font color="#007080"&gt;CP&lt;/font&gt;=&lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;font color="#800090"&gt; $CL_CP&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 8 &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;fi&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt; 9 &lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;10 &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt; &lt;font color="#800090"&gt; $#&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;-eq&lt;/strong&gt;&lt;/font&gt; &lt;font color="#077807"&gt;0&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;;&lt;/strong&gt;&lt;/font&gt; &lt;font color="#1f3f81"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;11 &lt;/font&gt;     &lt;font color="#1f3f81"&gt;&lt;strong&gt;exec&lt;/strong&gt;&lt;/font&gt; java -server -cp &lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;font color="#800090"&gt; $CP&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt; vimclojure.nailgun.NGServer &lt;font color="#077807"&gt;127&lt;/font&gt;.&lt;font color="#077807"&gt;0&lt;/font&gt;.&lt;font color="#077807"&gt;0&lt;/font&gt;.&lt;font color="#077807"&gt;1&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;12 &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color="#375288"&gt;13 &lt;/font&gt;     &lt;font color="#1f3f81"&gt;&lt;strong&gt;exec&lt;/strong&gt;&lt;/font&gt; java -server -cp &lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;font color="#800090"&gt; $CP&lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt; vimclojure.nailgun.NGServer &lt;font color="#800090"&gt; $1&lt;/font&gt; &lt;br&gt;
&lt;font color="#375288"&gt;14 &lt;/font&gt;&lt;font color="#1f3f81"&gt;&lt;strong&gt;fi&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;I normally run this script in the root directory of the project, this allows "lein classpath" to pick up all the classpaths for the REPL session. There's also a lein-vimclojure plungin that will install vimclojure and start a nailgun server for you, but I found it does not load "user.clj", so my convenient functions defined there are not autoloaded. I will stick to my script.&lt;/p&gt;
&lt;p&gt;For better navigation of clojure source code, vim users need &lt;a href="https://www.vim.org/scripts/script.php?script_id=273"&gt;TagList&lt;/a&gt; plugin. The plugin does not automatically work with clojure though. &lt;a href="https://kuriqoo.blogspot.com/2011/02/using-clojure-in-vim.html"&gt;This blog post&lt;/a&gt; has a solution, and it worked for me. Basically, this tells TagList to treat clojure code just like other Lisp code, which it is.&lt;/p&gt;
&lt;p&gt;That's all folks.&lt;/p&gt;</content><category term="notebook"></category><category term="Programming"></category><category term="Clojure"></category><category term="Editor"></category><category term="Vim"></category></entry><entry><title>A conversation about the job talks of new Ph.D. graduates in computer science</title><link href="https://yyhh.org/blog/2011/03/a-conversation-about-the-job-talks-of-new-phd-graduates-in-computer-science" rel="alternate"></link><published>2011-03-07T20:40:00-08:00</published><updated>2011-03-07T20:40:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2011-03-07:/blog/2011/03/a-conversation-about-the-job-talks-of-new-phd-graduates-in-computer-science</id><summary type="html">&lt;p&gt;A conversation about common weaknesses in computer science Ph.D. job talks, from missing the big picture to explaining research without concrete examples.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Yunyao and I work in a research center of a major technology company. At this time of a year, we attend job talks every week. These talks are technical presentations given by candidates for our research or development positions, as part of their two day job interviews here. Not surprisingly, the majority of the talks are given by newly graduated computer science PhDs who have published a lot of technical papers in premier computer science conferences. After a while, we kind of see some common deficiencies of these new graduates. Below is an instant messaging conversation we had right after attending a talk, which I hope would be helpful for some people.&lt;/p&gt;
&lt;p&gt;YY: How do you like the talk?&lt;/p&gt;
&lt;p&gt;HH: good slides&lt;/p&gt;
&lt;p&gt;YY: yes, very well made&lt;/p&gt;
&lt;p&gt;HH: lack of big picture in question handling&lt;/p&gt;
&lt;p&gt;YY: but he seems to have some problem explaining the details (to outsider)&lt;/p&gt;
&lt;p&gt;HH: I think he lacks big picture. Those questions could normally be answered by a few simple sentences&lt;/p&gt;
&lt;p&gt;YY: yeah&lt;/p&gt;
&lt;p&gt;HH: but he tried to explain the details, which further confused people. All the questions were about the big pictures, but he couldn't even understand what people were asking&lt;/p&gt;
&lt;p&gt;YY: that's typical when the work is all about formulas, because he puts slides in such a way to help people understand, but it is not clear what the exact output his program would generate&lt;/p&gt;
&lt;p&gt;HH: right&lt;/p&gt;
&lt;p&gt;YY: it would be better that he first goes through actual input/output, and then explain the meaning of the output&lt;/p&gt;
&lt;p&gt;HH: yeah, I am afraid they have not thought about that&lt;/p&gt;
&lt;p&gt;YY: we are not interested in blackbox. For example, it is still unclear to me how he ... (omitted)&lt;/p&gt;
&lt;p&gt;(a few exchanges on technical details are omitted)...&lt;/p&gt;
&lt;p&gt;YY: I didn't ask too many questions, because I didn't want to make the situation worse for him&lt;/p&gt;
&lt;p&gt;HH: right, I think he should have stepped back from the stories of his papers. Do not use the same ones in the job talk, instead, create a coherent new story for the job talk. It is the same problem with B (another candidate who gave talk here before).&lt;/p&gt;
&lt;p&gt;YY: yes, and don't refer back to the paper. I am not going to read it.&lt;/p&gt;
&lt;p&gt;HH: right, the talk should be self contained and coherent. The stories of the papers are normally not coherently fit to one another.&lt;/p&gt;
&lt;p&gt;YY: No. Anyway, I am under-impressed.&lt;/p&gt;
&lt;p&gt;HH: he just tried to repeat the stories of his papers, which are tenuous at best.&lt;/p&gt;
&lt;p&gt;YY: yeah, I think the fact that his slides use simplified examples made things worse because it confuses people&lt;/p&gt;
&lt;p&gt;HH: right. Anyway, I think it is a common problem with new graduates. They didn't seem to think too much about the problems they were solving. Everything is paper driven, and they just can't tell a story straight.&lt;/p&gt;
&lt;p&gt;YY: exactly. This is because most people are not driven by problems, but by writing papers.&lt;/p&gt;
&lt;p&gt;HH: right. They have a hunch, an idea, and they start writing a paper about it.&lt;/p&gt;
&lt;p&gt;YY: (two smiles)&lt;/p&gt;
&lt;p&gt;HH: I think this conference driven publishing culture in computer science contributes to this problem&lt;/p&gt;
&lt;p&gt;YY: I think so&lt;/p&gt;
&lt;p&gt;HH: well, these are the things beyond individual's control, so we can't really blame the student. If they are lucky, they get good adviser or mentors, then it is less of a problem...&lt;/p&gt;
&lt;p&gt;YY: yeah, the student start from scratch, so it's really up to the adviser&lt;/p&gt;
&lt;p&gt;HH: well then students often look up the publications of faculty members. If one faculty member publishes a lot, students will swarm to him instead of another one who publishes less (but maybe with higher quality). So it is a self perpetuating problem. Anyway, there's nothing we (in industry) can do about it.&lt;/p&gt;
&lt;p&gt;YY: yeah.&lt;/p&gt;</content><category term="opinion"></category><category term="Research"></category><category term="ComputerScience"></category></entry><entry><title>Thinkpad Hotkeys in KDE4</title><link href="https://yyhh.org/blog/2010/12/thinkpad-hotkeys-in-kde4" rel="alternate"></link><published>2010-12-01T22:00:00-08:00</published><updated>2010-12-01T22:00:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2010-12-01:/blog/2010/12/thinkpad-hotkeys-in-kde4</id><summary type="html">&lt;p&gt;Moving ThinkPad X61 hotkeys and power management from a custom ACPI setup to KDE4's PowerDevil, with changes to let KDE receive the key events.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I have kept my Thinkpad X61 laptop up to date with Debian sid for a few years. The KDE4 in Debian sid is at version &lt;strong&gt;4.4.5&lt;/strong&gt; at this moment, and I think it is mature enough for me to switch the laptop power management from &lt;a href="/blog/2007/10/thinkpad-x61-hotkeys-solution-debian-linux"&gt;my own hacked up solution&lt;/a&gt; to a KDE integrated one. My old solution still works for the most part, but there are some glitches after repeated supsend-resume cycles. As the system keeps evolving, I suspect more things would break.&lt;/p&gt;
&lt;p&gt;Power management in KDE4 is handled by PowerDevil, which is disabled if powersaved is running (my old solution relied on powersaved). First I uninstalled powersaved and reboot, sure enough, all Fn hotkeys stops working. Now I go to KDE &lt;strong&gt;System Settings -&amp;gt; Advanced -&amp;gt; Power Management&lt;/strong&gt;, and see the PowerDevil seems to be in a health state. The problem is that the hotkey presses are intercepted by ACPI so KDE does not receive these events. To stop the interruption, I edit &lt;strong&gt;/etc/modules&lt;/strong&gt; as root and comment out &lt;strong&gt;thinkpad_acpi&lt;/strong&gt; module, reboot. Now the Fn hotkeys should be registered in KDE, all we need to do is to make them do things we want. &lt;/p&gt;
&lt;p&gt;To set up global hotkeys, we go to &lt;strong&gt;System Settings -&amp;gt; Input Actions&lt;/strong&gt;, I add a new group called &lt;em&gt;My Shortcuts&lt;/em&gt; and enabled it. Right-click &lt;em&gt;My Shortcuts&lt;/em&gt;, &lt;strong&gt;New-&amp;gt;Global Shortcut-&amp;gt;DBus Command&lt;/strong&gt;, I create a new entry &lt;em&gt;Hibernate&lt;/em&gt;, and in the &lt;strong&gt;Action&lt;/strong&gt; tab fill in needed dbus information for hibernating the system with PowerDevil (See screenshot). Basically, this is similar to issuing a console command "qdbus org.kde.powerdevil /modules/powerdevil suspend 4". Here, the parameter 4 is for hibernate (suspend to disk), 2 is for sleep (suspend to memory), and 1 for lock screen.  In the &lt;strong&gt;Trigger&lt;/strong&gt; tab, click the button, and press Fn+F12, notice that KDE recognizes this key as a Suspend key. Now click &lt;strong&gt;Apply&lt;/strong&gt;, the Fn+F12 hotkey is setup. Now try Fn+F12, the system should hibernate. So far, the hibernate-resume cycles seem to be clean and problem free for me. I am using 2.6.36 kernel. &lt;/p&gt;
&lt;p&gt;Overall, this seems to be easy enough. No scripts, no hacks.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm6.static.flickr.com/5082/5224299173_5c53303d52.jpg" width="500" height="378" alt="hibernate-snapshot2" /&gt;&lt;/p&gt;</content><category term="notebook"></category><category term="Linux"></category></entry><entry><title>Config Spring and DWR on Jetty with zero XML</title><link href="https://yyhh.org/blog/2009/08/config-spring-and-dwr-on-jetty-with-zero-xml" rel="alternate"></link><published>2009-08-09T10:51:00-07:00</published><updated>2009-08-09T10:51:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2009-08-09:/blog/2009/08/config-spring-and-dwr-on-jetty-with-zero-xml</id><summary type="html">&lt;p&gt;Integrating Spring and DWR on Jetty using Java annotations and programmatic configuration to build a Web application without XML configuration files.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I hate xml configuation files. They look awful. As a result, they can be very time-consuming to write, and are very error-prone. There's no type-safty checking whatsoever. I would rather keep configurations within my Java source code. After all, we programmers are the only people looking at these configurations, why create trouble for ourselves? Luckily, with annotation support in Java, we can now completely do away with xml files for developing Web applications. Here is my recent experience integrating Spring framework with DWR on a Jetty sever.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Spring&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Spring framework seems to be very popular in enterprise Java world. The core idea of "inversion of control (IoC)" seems to be trival (I bet any good programmers are already doing IoC without knowing the name). But sometimes, taking a simple idea seriously can get you a lot of mileage. Map-Reduce is another example on top of my head. Anyway, I decided to use Spring to manage objects in one of my dependency-rapidly-getting-out-of-hand Web projejcts. Spring was known for its xml hell, but recently advances have given it annotation-based configuration and JavaConfig. Now we can do Spring configuration completely in Java source code.  To do this, I put these jars in my java built path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spring.jar (Note that this is spring 2.5.6)&lt;/li&gt;
&lt;li&gt;asm-3.2.jar&lt;/li&gt;
&lt;li&gt;aspectj-1.6.5.jar&lt;/li&gt;
&lt;li&gt;org.springframework.config.java-1.0.0.M4.jar&lt;/li&gt;
&lt;li&gt;cglib-2.2.jar&lt;/li&gt;
&lt;li&gt;dwr.jar&lt;/li&gt;
&lt;li&gt;all jetty modules&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;JavaConfig needs at least one class annotated with @Configuation. Here's mine:&lt;/p&gt;
&lt;p&gt;&lt;font color="#800090"&gt;@Configuration&lt;/font&gt;&lt;br&gt;
&lt;font color="#800090"&gt;@AnnotationDrivenConfig&lt;/font&gt;&lt;br&gt;
&lt;font color="#800090"&gt;@ComponentScan&lt;/font&gt;(&lt;font color="#077807"&gt;"com.company.app"&lt;/font&gt;)&lt;br&gt;
&lt;font color="#912f11"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt; AppConfig {&lt;br&gt;
  &lt;font color="#786000"&gt;// no need to list our own beans here &lt;/font&gt;&lt;br&gt;
  &lt;font color="#786000"&gt;// since we use autowiring and component scan&lt;/font&gt;&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;Yeah, the configuation file is pretty empty. In fact, @ComponentScan tells Spring to search for classes annotated with @Component (or several other stereotypes: @Controller, @Service, etc. See Spring doc for details) under "com.company.app" base package, and automatically inject all the dependencies labeled @Autowired. For example:&lt;/p&gt;
&lt;p&gt;&lt;font color="#800090"&gt;@Controller&lt;/font&gt;&lt;br&gt;
&lt;font color="#800090"&gt;@RemoteProxy&lt;/font&gt;(&lt;br&gt;
  creator = SpringCreator.&lt;font color="#912f11"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt;,&lt;br&gt;
  creatorParams =&lt;br&gt;
    {&lt;br&gt;
      &lt;font color="#800090"&gt;@Param&lt;/font&gt;(name = &lt;font color="#077807"&gt;"beanName"&lt;/font&gt;, value = &lt;font color="#077807"&gt;"UIController"&lt;/font&gt;),&lt;br&gt;
      &lt;font color="#786000"&gt;// this is needed due to a DWR bug&lt;/font&gt;&lt;br&gt;
      &lt;font color="#800090"&gt;@Param&lt;/font&gt;(name = &lt;font color="#077807"&gt;"javascript"&lt;/font&gt;, value = &lt;font color="#077807"&gt;"UIController"&lt;/font&gt;)&lt;br&gt;
    },&lt;br&gt;
  name = &lt;font color="#077807"&gt;"UIController"&lt;/font&gt;)&lt;br&gt;
&lt;font color="#912f11"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt; UIController {&lt;br&gt;
  &lt;font color="#800090"&gt;@Autowired&lt;/font&gt;&lt;br&gt;
  &lt;font color="#912f11"&gt;&lt;strong&gt;private&lt;/strong&gt;&lt;/font&gt; BackEnd backEnd;&lt;br&gt;
  &lt;font color="#800090"&gt;@Autowired&lt;/font&gt;&lt;br&gt;
  &lt;font color="#912f11"&gt;&lt;strong&gt;private&lt;/strong&gt;&lt;/font&gt; QueryProcessor queryProcessor;&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;// other stuff here &lt;/font&gt;&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;Both backEnd and queryProcessor will be automatically instantiated and injected here. This is really cool! What a time saver! Oh, don't forget to write setter for these private members. And the @RemoteProxy annotation is for DWR. More later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jetty&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now we can start our Web server this way too, without the damned web.xml and all that. Basically, we will embody a Jetty server in our Java application. Why Jetty? It's small, fast and flexible. I created a class to wrap it up and also created two servlets for it. One serves regular files, another handles ajax request using DWR. &lt;/p&gt;
&lt;p&gt;&lt;font color="#800090"&gt;@Component&lt;/font&gt;&lt;br&gt;
&lt;font color="#912f11"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt; UIServer {&lt;br&gt;
  &lt;font color="#912f11"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;static&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;final&lt;/strong&gt;&lt;/font&gt; File HTML_FILE_DIR = &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; File(&lt;font color="#077807"&gt;"../Web"&lt;/font&gt;);&lt;br&gt;
  &lt;font color="#912f11"&gt;&lt;strong&gt;private&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;int&lt;/strong&gt;&lt;/font&gt; port = &lt;font color="#077807"&gt;80&lt;/font&gt;;&lt;br&gt;
  &lt;font color="#912f11"&gt;&lt;strong&gt;private&lt;/strong&gt;&lt;/font&gt; Server jettyServer;  &lt;/p&gt;
&lt;p&gt;&lt;font color="#912f11"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;void&lt;/strong&gt;&lt;/font&gt; start() {&lt;br&gt;
    &lt;font color="#1f3f81"&gt;&lt;strong&gt;try&lt;/strong&gt;&lt;/font&gt; {&lt;br&gt;
      &lt;font color="#786000"&gt;// Create an instance of Jetty Web server&lt;/font&gt;&lt;br&gt;
      jettyServer = &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; Server(port);&lt;br&gt;
      ContextHandlerCollection contexts = &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; ContextHandlerCollection();&lt;br&gt;
      jettyServer.setHandler(contexts);&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;// this servlet serves static files&lt;/font&gt;&lt;br&gt;
      ServletContextHandler ctxDocs=&lt;br&gt;
      &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; ServletContextHandler(contexts, &lt;font color="#077807"&gt;"/"&lt;/font&gt;, ServletContextHandler.SESSIONS);&lt;br&gt;
      ctxDocs.setResourceBase(HTML_FILE_DIR.toString());&lt;br&gt;
      ServletHolder ctxDocHolder= &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; ServletHolder();&lt;br&gt;
      ctxDocHolder.setInitParameter(&lt;font color="#077807"&gt;"dirAllowed"&lt;/font&gt;, &lt;font color="#077807"&gt;"false"&lt;/font&gt;);&lt;br&gt;
      ctxDocHolder.setServlet(&lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; DefaultServlet());&lt;br&gt;
      ctxDocs.addServlet(ctxDocHolder, &lt;font color="#077807"&gt;"/*"&lt;/font&gt;);&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;// this DWR servlet handles UI requests&lt;/font&gt;&lt;br&gt;
      ServletContextHandler ctxUI =&lt;br&gt;
      &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; ServletContextHandler(contexts, &lt;font color="#077807"&gt;"/ui"&lt;/font&gt;, ServletContextHandler.SESSIONS );&lt;br&gt;
      ServletHolder ctxUIHolder= &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; ServletHolder();&lt;br&gt;
      ctxUIHolder.setInitParameter(&lt;font color="#077807"&gt;"debug"&lt;/font&gt;, &lt;font color="#077807"&gt;"true"&lt;/font&gt;);&lt;br&gt;
      ctxUIHolder.setInitParameter(&lt;font color="#077807"&gt;"jsonpEnabled"&lt;/font&gt;, &lt;font color="#077807"&gt;"true"&lt;/font&gt;);&lt;br&gt;
      ctxUIHolder.setInitParameter(&lt;font color="#077807"&gt;"crossDomainSessionSecurity"&lt;/font&gt;, &lt;font color="#077807"&gt;"false"&lt;/font&gt;);&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;// Specify the classes (comma delimited fully qualified class names)&lt;/font&gt;&lt;br&gt;
      &lt;font color="#786000"&gt;// to be exposed to Web browser&lt;/font&gt;&lt;br&gt;
      ctxUIHolder.setInitParameter(&lt;font color="#077807"&gt;"classes"&lt;/font&gt;, &lt;font color="#077807"&gt;"com.company.app.UIController"&lt;/font&gt;);&lt;br&gt;
      ctxUIHolder.setServlet(&lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; DwrServlet());&lt;/p&gt;
&lt;p&gt;ctxUI.addServlet(ctxUIHolder, &lt;font color="#077807"&gt;"/*"&lt;/font&gt;);&lt;br&gt;
      contexts.setHandlers(&lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; Handler[]{ctxUI, ctxDocs});&lt;/p&gt;
&lt;p&gt;jettyServer.start();&lt;br&gt;
      jettyServer.join();&lt;/p&gt;
&lt;p&gt;} &lt;font color="#1f3f81"&gt;&lt;strong&gt;catch&lt;/strong&gt;&lt;/font&gt; (Exception e) {&lt;br&gt;
      e.printStackTrace();&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;We now need to bootstrap our application with JavaConfig by creating an application context.  &lt;/p&gt;
&lt;p&gt;&lt;font color="#912f11"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt; App {&lt;/p&gt;
&lt;p&gt;&lt;font color="#912f11"&gt;&lt;strong&gt;public&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;static&lt;/strong&gt;&lt;/font&gt; &lt;font color="#912f11"&gt;&lt;strong&gt;void&lt;/strong&gt;&lt;/font&gt; main(String[] args) &lt;font color="#912f11"&gt;&lt;strong&gt;throws&lt;/strong&gt;&lt;/font&gt; Exception {&lt;br&gt;
    JavaConfigApplicationContext ctx =&lt;br&gt;
      &lt;font color="#1f3f81"&gt;&lt;strong&gt;new&lt;/strong&gt;&lt;/font&gt; JavaConfigApplicationContext(MidasConfig.&lt;font color="#912f11"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt;);&lt;/p&gt;
&lt;p&gt;&lt;font color="#786000"&gt;// so DWR knows where to find classes&lt;/font&gt;&lt;br&gt;
    SpringCreator.setOverrideBeanFactory(ctx);&lt;/p&gt;
&lt;p&gt;UIServer uiServer = ctx.getBean(UIServer.&lt;font color="#912f11"&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/font&gt;);&lt;br&gt;
    uiServer.start();&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DWR&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DWR allows javascript on browser to directly call Java methods on server. It's like a RPC thing, which is pretty convenient. It's my favirate ajax communication layer. Notice we have already covered most of the configurations needed for DWR in the code fragments above. Here's some explanations. The @RemoteProxy annotation basically says that "expose this class to javascript". Within such classes, @RemoteMethod annotation makes annotated methods visible for javascript to call. More details please see DWR documentation.  In addition to such annotations, we did two tricks here to make DWR configuration completely devoid of any xml files. First we passed DWR some configurations through jetty's servletholder. Second, we used SpringCreator of DWR, which basically ask Spring for objects.  &lt;/p&gt;
&lt;p&gt;Well, it took me lots of googling to put this together. Hope it would be useful for someone.&lt;/p&gt;</content><category term="notebook"></category><category term="Programming"></category><category term="Java"></category></entry><entry><title>Tails &amp; No Tales Cat Show</title><link href="https://yyhh.org/blog/2009/01/tails-no-tales-cat-show" rel="alternate"></link><published>2009-01-04T07:37:00-08:00</published><updated>2009-01-04T07:37:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2009-01-04:/blog/2009/01/tails-no-tales-cat-show</id><summary type="html">&lt;p&gt;Photos and impressions from a first visit to the Tails &amp;amp; No Tales cat show, plus a peacock-feather souvenir for Tom and Mayori at home.&lt;/p&gt;</summary><content type="html">&lt;p&gt;This is the first time we have even been to a cat show. We have enjoyed it a lot!&lt;/p&gt;
&lt;p&gt;The show cats are all very tidy and cute. Too bad that spectaculors like me cannot touch or pet any of them. :(&lt;/p&gt;
&lt;p&gt;But I still love my kitties adopted from shelter the most. :) Even though they could not come to the show (well, even if they were allowed to, I really doubt that they would enjoy it), they liked the peacock feather we bought for them very much.&lt;/p&gt;
&lt;p&gt;Here are some photos taken today.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3120/3164888505_a44e7cfcc0.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm2.static.flickr.com/1195/3164932121_0edaac41b2.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3281/3164890249_d0c1ef9d7d.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3264/3165731044_78cf62f37c.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3108/3164897565_457fa6f4b9.jpg?v=1231054710" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1066/3164894431_30c251d800.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1225/3165746230_14fa975341.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1056/3164909929_b2b1223f30.jpg?v=1231054910" width="353" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1175/3165754608_98b67aec47.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1125/3164922681_d44f474e06.jpg?v=1231055103" width="500" height="384" /&gt;&lt;img src="https://farm4.static.flickr.com/3120/3164929073_a3825263cc.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3100/3164945823_cbd01a180d.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3263/3165766746_fba6244090.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1168/3164943517_00d3b6d1c2.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1032/3165785772_7989bb28b3.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1121/3165776280_8539898e57.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3260/3165798306_1fbdef3bb9.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3116/3164973051_3b5076be0c.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;A cat looks like Yoda. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3268/3165795356_515bbb4c05.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1167/3164968367_0d08196003.jpg?v=0" width="333" height="500" /&gt;&lt;/p&gt;
&lt;p&gt;Notice the curly fur.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3080/3165792936_a19eba0f29.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Notice the tail&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3268/3164984665_1cde9812b8.jpg?v=1231055626" width="500" height="317" /&gt;&lt;img src="https://farm2.static.flickr.com/1079/3164980739_076647982c.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3083/3165805668_a040bc3f6d.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3261/3164976629_0c1205b9a5.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3260/3164973769_cea79b0d7b.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1115/3165829874_f221546b73.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1143/3165823066_ba45111db3.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3098/3164992937_f0988ac34d.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3123/3165816478_300b1acf4d.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;The cat loved the feather so much that he jumped out of the stage to get it.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3121/3165009151_9db7a9f636.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Cas without fur is not my cup of tea, but she seems to be very sweet.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3088/3165857382_deeefcf20c.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3087/3165055789_e5f145955e.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1077/3165033033_dbf544163c.jpg?v=0" width="333" height="500" /&gt;&lt;/p&gt;
&lt;p&gt;Want a hug ...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3095/3165863060_425e2cc612.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;A beautiful red cat. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3076/3165854316_cf59503a37.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1117/3165853528_31a2ef36cb.jpg?v=1231056188" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3104/3165850218_28cf92ce07.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3100/3165849408_33f1ef3ab3.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1051/3165846802_33f832a2af.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1047/3165872228_cf2d7ed757.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3119/3165037747_6bcf7c1af2.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Curly ears&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm2.static.flickr.com/1221/3165053557_8d777a0aca.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;A sleeping beauty&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm2.static.flickr.com/1393/3165052625_86c7a44a22.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3091/3165877550_6ab8769b17.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Pose for a picture&lt;img src="https://farm2.static.flickr.com/1061/3165875272_8237856e89.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3087/3165071581_71eabfe1d3.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3110/3165068585_7f56a98f0f.jpg?v=1231056699" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1068/3165065435_308850753b.jpg?v=1231056818" width="500" height="363" /&gt;&lt;img src="https://farm2.static.flickr.com/1143/3165888306_58ed47cfab.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3128/3165910776_5b136eae59.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3080/3165902348_d7b0496545.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3086/3165096625_f951d233db.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3099/3165092243_47ffd20230.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm2.static.flickr.com/1028/3165923206_a5a8633074.jpg?v=0" width="333" height="500" /&gt;&lt;/p&gt;
&lt;p&gt;Relaxing during the break.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3103/3165088515_691d22c52d.jpg?v=1231057189" width="500" height="343" /&gt;&lt;img src="https://farm2.static.flickr.com/1010/3165107153_f4dfee19a7.jpg?v=1231057366" width="500" height="342" /&gt;&lt;img src="https://farm4.static.flickr.com/3122/3165103143_967b1b21d2.jpg?v=1231057448" width="500" height="298" /&gt;&lt;img src="https://farm2.static.flickr.com/1159/3166240364_e478bf0bdf.jpg?v=0" width="444" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1137/3165118099_5bf71accfa.jpg?v=1231057698" width="466" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3112/3165116167_1c5d3a9896.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1192/3165135145_fa7b3c1665.jpg?v=1231053828" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1080/3165959034_2b609c2ae1.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1094/3165955690_721e572615.jpg?v=1231057891" width="500" height="335" /&gt;&lt;img src="https://farm2.static.flickr.com/1355/3165977402_bd307145a5.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3196/3165147143_79dabe6838.jpg?v=1231058010" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3076/3165965248_ff4d052c3f.jpg?v=1231053967" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1020/3165970416_f135124081.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3107/3165138803_d7ec155d20.jpg?v=1231053650" width="317" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1133/3165989864_ca7d21550a.jpg?v=1231058246" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1107/3165157219_7fce584bf8.jpg?v=1231058361" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1166/3165155075_ef2cdf95f3.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1012/3165436165_89367a2190.jpg?v=0" width="500" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1028/3166003328_35d52a3dd9.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1071/3165994844_3c5f2de4fa.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3265/3165163543_c132a15d6d.jpg?v=1231058711" width="500" height="387" /&gt;&lt;img src="https://farm4.static.flickr.com/3103/3165185243_3f016cedc9.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1111/3166010218_3a988e1bc8.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm2.static.flickr.com/1119/3166004012_06a06f854b.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3117/3165191133_62f5aea988.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1247/3165193577_926cb24f07.jpg?v=1231058981" width="333" height="500" /&gt;&lt;img src="https://farm2.static.flickr.com/1102/3166027234_55d9aee319.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm4.static.flickr.com/3092/3166064328_a529d7c4d2.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3256/3166063164_0f34595521.jpg?v=0" width="333" height="500" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category><category term="Events"></category></entry><entry><title>Seasonal Greetings from the Cats</title><link href="https://yyhh.org/blog/2008/12/seasonal-greetings-from-the-cats" rel="alternate"></link><published>2008-12-31T22:20:00-08:00</published><updated>2008-12-31T22:20:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2008-12-31:/blog/2008/12/seasonal-greetings-from-the-cats</id><summary type="html">&lt;p&gt;Holiday photos of Tom waiting for Santa and Mayori getting ready to be Santa's little helper.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3235/3136652664_8ff94c4266.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Tom is waiting for Santa ...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3294/3135823833_f42943d49a.jpg?v=0" width="333" height="500" /&gt;&lt;/p&gt;
&lt;p&gt;Mayori want to be Santa's little helper ...&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Thanksgiving Dinner</title><link href="https://yyhh.org/blog/2008/12/thanksgiving-dinner" rel="alternate"></link><published>2008-12-06T18:02:00-08:00</published><updated>2008-12-06T18:02:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2008-12-06:/blog/2008/12/thanksgiving-dinner</id><summary type="html">&lt;p&gt;Trying Tofurkey for Thanksgiving, with before-and-after cooking photos and impressions of a holiday meal that was more than enough for two.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I have been waiting to try the Tofurkey for a few weeks ever since I saw the ad from Trader Joe about it. So I finally tried out on Thanksgiving.&lt;/p&gt;
&lt;p&gt;This is what Tofurkey looks like out of the box. Then I cooked it in the oven. It tastes better than I expected, but a little too much for two people.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3090/3086604265_39fd710dac.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Cooking"></category></entry><entry><title>Wedding Gift from Huahai's Mom</title><link href="https://yyhh.org/blog/2008/11/wedding-gift-from-huahais-mom" rel="alternate"></link><published>2008-11-14T03:57:00-08:00</published><updated>2008-11-14T03:57:00-08:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2008-11-14:/blog/2008/11/wedding-gift-from-huahais-mom</id><summary type="html">&lt;p&gt;A trip to China brings home a wedding gift from Huahai's parents, a special Olympic umbrella.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3139/3028284061_29fe78f4bd.jpg?v=0" width="230" height="235" /&gt;&lt;/p&gt;
&lt;p&gt;Finally, after our trip to China this year, we got our wedding gifts from Huahai's parents --- a special Olympic umbrella. 😛&lt;/p&gt;</content><category term="experience"></category><category term="Extraordinary"></category><category term="Family"></category></entry><entry><title>Winking Tom &amp; Superman</title><link href="https://yyhh.org/blog/2008/06/winking-tom-superman" rel="alternate"></link><published>2008-06-15T06:37:00-07:00</published><updated>2008-06-15T06:37:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2008-06-15:/blog/2008/06/winking-tom-superman</id><summary type="html">&lt;p&gt;A playful pairing of photos featuring a winking Tom and Superman.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3003/2579895048_acecea6edc.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.pinimg.com/236x/83/d6/27/83d627ecca8b358f383fb2c8acc64f9b--real-superman-superman-stuff.jpg" width="308" height="391" /&gt; &lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>"Finding happiness: a cat's story"</title><link href="https://yyhh.org/blog/2008/06/finding-happiness-a-cats-story" rel="alternate"></link><published>2008-06-06T20:56:00-07:00</published><updated>2008-06-06T20:56:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2008-06-06:/blog/2008/06/finding-happiness-a-cats-story</id><summary type="html">&lt;p&gt;An illustrated story in English and Chinese follows Prince Thomas the cat as he asks where happiness comes from and searches for it himself.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Long long time ago, there's a prince named Thomas. He's a handsome boy, but often sad, because he's parents passed away when he's very young.&lt;/p&gt;
&lt;p&gt;很久很久以前，有一个年轻英俊的王子叫作唐唐。他名如其人，长得仪表唐唐。可是因为从小就父母双亡的缘故，他的心里总是充满了淡淡的忧伤。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3047/2555910847_1502df458c.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;One day, Thomas prays to Godess Felines: dear goddess, I have been good all these years. Please give me something that will bring me happiness.&lt;/p&gt;
&lt;p&gt;终于有一天，唐唐王子鼓起勇气向猫神巴思特祈祷道：＂亲爱的巴思特女神，这么多年以来我一直都努力做一个合格的猫王子，可是我并不快乐。您可以用您的魔力赐与我快乐吗？&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm3.static.flickr.com/2131/2270170498_f02511ca36.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Goddess Felines says: I know you are a good boy, but happiness is not something handed out by gods. You have to find your own happiness.&lt;/p&gt;
&lt;p&gt;Where can I find my happiness, asks Thomas?&lt;/p&gt;
&lt;p&gt;Search in the basket of life, you will find it, answered Godess Felines.&lt;/p&gt;
&lt;p&gt;巴思特女神说"唐唐，我知道你是一个好孩子。可是幸福不是神仙可以赐与的。你必须自己寻找到幸福。"&lt;/p&gt;
&lt;p&gt;＂那么我在哪里可以找到幸福呢？＂唐唐急切的问道。&lt;/p&gt;
&lt;p&gt;＂它在生命的篮子里＂巴思特女神回答道。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3120/2556740896_67367c8638.jpg?v=1213488675" width="500" height="324" /&gt;&lt;/p&gt;
&lt;p&gt;Basket of life? Thomas is puzzled: "I have a basket, all my toys are in it. Is that basket of life?". Godess Felines smiles and leaves. Disappointed, Thomas goes to his basket, and takes out his favirate toy, a green shining ball.&lt;/p&gt;
&lt;p&gt;"生命的篮子？"唐唐困惑的问道。"我倒确实有一个篮子，里面放满了我的玩具。那个是生命的篮子吗？"&lt;/p&gt;
&lt;p&gt;可是巴思特女神什么也没说便微笑着消失掉了。&lt;/p&gt;
&lt;p&gt;唐唐很失望的走到玩具篮子之前，取出平时最心爱的闪光的小绿球。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3150/2556741086_d95e63c69e.jpg?v=1213488474" width="500" height="356" /&gt;&lt;/p&gt;
&lt;p&gt;Thomas carries the shining ball to play ground.&lt;/p&gt;
&lt;p&gt;唐唐叼着闪光的小绿球来到游乐场。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3009/2556741242_07dd071e21.jpg?v=1213488876" width="334" height="500" /&gt;&lt;/p&gt;
&lt;p&gt;Thomas plays with the shining ball upside down.&lt;/p&gt;
&lt;p&gt;他把小球抛到半空中然后接住。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3036/2555914171_091f86e3e2.jpg?v=1213489000" width="500" height="344" /&gt;&lt;/p&gt;
&lt;p&gt;He plays the ball downside up.&lt;/p&gt;
&lt;p&gt;接着再前空翻后滚翻。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3088/2555913725_990341c23b.jpg?v=0" width="500" height="334" /&gt;&lt;/p&gt;
&lt;p&gt;Thomas spins with the ball.&lt;/p&gt;
&lt;p&gt;唐唐抱着小球翻滚得越来越快，最后只见他灰色的影子在快速地移动。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3177/2556739252_8728798092.jpg?v=0" width="500" height="334" /&gt;&lt;/p&gt;
&lt;p&gt;Thomas is tired, but is still not happy.&lt;/p&gt;
&lt;p&gt;玩了很久以后，唐唐觉得有些累了，可是却没有觉得开心。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3169/2555913101_1cf2337503.jpg?v=0" width="500" height="334" /&gt;&lt;/p&gt;
&lt;p&gt;Unbekown to Thomas, a wild wild cat is watching him in the shadow all the time.&lt;/p&gt;
&lt;p&gt;但唐唐却万万没有想到，就在他玩耍的时候，不远的地方有一双蓝色的眼睛一直在暗地里观察着他的一举一动。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm3.static.flickr.com/2171/2555909537_38a4f2139e.jpg?v=0" width="500" height="333" /&gt;&lt;/p&gt;
&lt;p&gt;Seeing Thomas is tired and unable to defend himself, the wild cat rushs out of thedarkness, and goes for the shinning ball!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3271/2555913339_3ec7dcce3b.jpg?v=0" width="500" height="334" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3274/2556734506_c2fb6b7964.jpg?v=0" width="500" height="333" /&gt;&lt;img src="https://farm3.static.flickr.com/2072/2579857814_dc73799608.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3115/2579855222_88e0a1a9a9.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3087/2556738650_3b90d004da.jpg?v=0" width="333" height="500" /&gt;&lt;img src="https://farm4.static.flickr.com/3001/2579821378_fe5b17f4b7.jpg?v=0" width="333" height="500" /&gt;&lt;/p&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>Kitty Singing a Birdy Song</title><link href="https://yyhh.org/blog/2008/06/kitty-singing-a-birdy-song" rel="alternate"></link><published>2008-06-03T23:42:00-07:00</published><updated>2008-06-03T23:42:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2008-06-03:/blog/2008/06/kitty-singing-a-birdy-song</id><summary type="html">&lt;p&gt;A short video post featuring Mayori, the family's little cat who loves to sing.&lt;/p&gt;</summary><content type="html">&lt;p&gt;偶家的娇娇爱唱歌&lt;/p&gt;
&lt;iframe frameborder="0" height="350" src="https://www.youtube.com/embed/cMHzCMtk4PE" width="425"&gt;&lt;/iframe&gt;</content><category term="experience"></category><category term="Pets"></category></entry><entry><title>How to save millions per year for your newspaper?</title><link href="https://yyhh.org/blog/2008/04/how-to-save-millions-per-year-for-your-newspaper" rel="alternate"></link><published>2008-04-20T07:45:00-07:00</published><updated>2008-04-20T07:45:00-07:00</updated><author><name>Yunyao</name></author><id>tag:yyhh.org,2008-04-20:/blog/2008/04/how-to-save-millions-per-year-for-your-newspaper</id><summary type="html">&lt;p&gt;A satirical proposal for an automatic news writer critiques formulaic coverage of China and the 2008 Olympic torch relay.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Dear CEO of XXX News:&lt;/p&gt;
&lt;p&gt;I am writing in regard to an automatic news article writer (NAW) that can ** **save your company millions of dolloar per year (see appendix below for peudo code). The basic idea of NAW is to be able to automatically generate news articles with comparable quality to news articles written by actual human reporters by your company.&lt;/p&gt;
&lt;p&gt;As a proof of concept, I have conducted a comprehensive comparison study. The results show that on issues with regard to Olympic Torch Relay 2008,  the similarity of the automatically generated news articles and those manually written by human reporters is higher than 99%, making them undistinguishable by any of your valuable readers. With a click of a button, you can generate news articles using NAW at your wish anytime anywhere. More importantly, your readers will not realize the differences.&lt;/p&gt;
&lt;p&gt;Since issues with regard to the Olymipic Torch Relay 2008 refect most if not all the issues about China, the above result safely indicates that NAW can be used to replace your news reporters on any issues with regard to China, thus allowing them to concentrate on more important issues such as Iraq, human right issues in US inner cities, independent requests from Hawaii, Porto Rico and Alaska, and so on.&lt;/p&gt;
&lt;p&gt;Assume that your news paper needs one report with regard to China about every other day. That is about 180 news articles each year. Assume the cost of writing each news articles, including transportation, lodging, meals, salary for your news reporter and his/her crew members, is merely $8000. By investing on this software, with a fix cost of $500 and no operating cost (since it can work on any of the existing computers of your company), you can save nearly $1.5 millions per year from now on!&lt;/p&gt;
&lt;p&gt;More importantly, with a little more input from human reporters, NAW can be adopted to report issues on many other countries. That is again over millions of saving each year!&lt;/p&gt;
&lt;p&gt;Thank you very much for your time. Please do let me know should you have any questions. I am looking forward to discuss you next steps.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;an inventor&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Appendix:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;Input&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;

&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nl"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nl"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;
&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nc"&gt;date&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;date&lt;/span&gt;
&lt;span class="w"&gt;           &lt;/span&gt;

&lt;span class="k"&gt;Output&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nl"&gt;news&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;

&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="k"&gt;Function&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;

&lt;span class="n"&gt;NewsArticleWriter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;Begin&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;numProtester&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;between&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;numSupporter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numProester&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;issues&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;Tibet&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;FLG&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;AgainstChinaMade&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;HumanRightIssues&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;&amp;quot;Free $ProvinceName&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;AnyOtherCurrentHotIssue&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;typesProtesters&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;typesSupporters&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="n"&gt;aggressive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;males&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bused&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Chinese&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;consolate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Pro&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;China&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;organization&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;popular&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Chinese&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;locations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;an&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nearby&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;


&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;typesProtesters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numProtester&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numSupporter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;writing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;elaborated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;predefined&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;topics&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;each&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;protesters&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;WriteMore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;typesProtesters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;between&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;lengthOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;locations&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;location&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;typesProtesters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;news&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;typesSupporters&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;End&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="opinion"></category><category term="Politics"></category></entry><entry><title>Suspending to RAM on Debian laptop</title><link href="https://yyhh.org/blog/2008/04/suspending-to-ram-on-debian-laptop" rel="alternate"></link><published>2008-04-17T23:39:00-07:00</published><updated>2008-04-17T23:39:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2008-04-17:/blog/2008/04/suspending-to-ram-on-debian-laptop</id><summary type="html">&lt;p&gt;Fixing a Debian ThinkPad that wakes immediately after suspending to RAM by configuring pm-utils to unload the e1000 Ethernet module.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I am tracking Debian sid on my Thinkpad laptop, a few months ago it started to use &lt;em&gt;pm-utils&lt;/em&gt; and broke suspending to RAM (sleep) functionality. Basically, the machine would go to sleep then immediately resume.&lt;br&gt;
It turned out that this problem can be easily fixed by creating a file &lt;em&gt;/etc/pm/config.d/local&lt;/em&gt;, and put in a line&lt;/p&gt;
&lt;p&gt;SUSPEND_MODULES="e1000"&lt;/p&gt;
&lt;p&gt;The reason is that &lt;em&gt;pm-utils&lt;/em&gt; by default does not unload Ethernet card module &lt;em&gt;e1000&lt;/em&gt;, so the machine would be waken up by Ethernet card activities.&lt;/p&gt;</content><category term="notebook"></category><category term="Linux"></category></entry><entry><title>YouTube censors BBC's documentary in USA</title><link href="https://yyhh.org/blog/2008/03/youtube-censors-bbcs-documentary-in-usa" rel="alternate"></link><published>2008-03-10T15:15:00-07:00</published><updated>2008-03-10T15:15:00-07:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2008-03-10:/blog/2008/03/youtube-censors-bbcs-documentary-in-usa</id><summary type="html">&lt;p&gt;A reaction to YouTube blocking U.S. access to the BBC documentary A Year in Tibet while viewers in the U.K. could still watch it.&lt;/p&gt;</summary><content type="html">&lt;p&gt;BBC is broadcasting a documentary series titled "A year in Tibet". From &lt;a href="https://www.bbc.co.uk/bbcfour/listings/programme.shtml?day=today&amp;amp;filename=20080306/20080306_2100_4544_2145_60&amp;amp;service_id=4544"&gt;the program description on BBC Web site,&lt;/a&gt; this documentary shows the real life today in Tibet. The first segment was shown on Mar. 6. Not surprisingly, there is a Youtube video of this first show. Surprisingly, if you attempt to access this video in US, Youtube says &lt;a href="https://youtube.com/?v=HZ98sP2GSCE"&gt;"This video is not available in your country."&lt;/a&gt; Interestingly, people in UK have confirmed that this video is accessible in UK!&lt;/p&gt;
&lt;p&gt;Obviously, this block of access could not have been requested by BBC on the basis of copyright violation. Or how could you explain the availability of the video on Youtube for UK visitors? One can only speculate on who is behind this blockage. The Free Tibet people? What are they afraid of? Shouldn't showing the reality of Tibet today further their cause? The Chinese government? Since when Youtube is afraid of Chinese government? If Youtube is afraid of them, how to explain the abundant Free Tibet videos on Youtube?&lt;/p&gt;
&lt;p&gt;One thing is clear, people in US are now proved to be actively and specifically targeted for information blockage. I thought only China has the Great Firewall. Where's the outrage?&lt;/p&gt;
&lt;p&gt;Update 03/12/2008: if you are looking for confirmation, check out the &lt;a href="https://digg.com/political_opinion/Youtube_censors_BBC_s_documentary_in_US"&gt;comments on digg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Update 03/17/2008: some people point out that it is BBC's policy to not allow access to their video outside UK. One comment on Slashdot pointed out that the video is blocked in Netherland as well. If these are true, my speculation could be wrong.&lt;/p&gt;
&lt;p&gt;However, it is rather depressing to see that some of the comments to my post display an unabated bias and contempt towards people of my heritage. For example, the comment below accusing me of justifying totalitarianism is so unwarranted to the point of absurdity, especially considering that some of my posts here would be considered subversive to party rule. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://yro.slashdot.org/comments.pl?sid=489386&amp;amp;cid=22771430"&gt;Another comment on Slashdot&lt;/a&gt; put it in plain words: &lt;em&gt;Identifying yourself as Han Chinese has already shown how biased you are so no more needs to be said.&lt;/em&gt; I simply cannot understand the reasoning behind this statement. Why would identifying one's own ethnic identity automatically disqualify one from being listened to? I hope this is another cultural gap that I have yet to overcome, is it? Can any one enlighten me a bit on this? Anyway, I hope these people are not representative of the general population here in the West.&lt;/p&gt;</content><category term="opinion"></category><category term="Politics"></category></entry><entry><title>an interesting birthday gift</title><link href="https://yyhh.org/blog/2008/03/an-interesting-birthday-gift" rel="alternate"></link><published>2008-03-02T22:34:00-08:00</published><updated>2008-03-02T22:34:00-08:00</updated><author><name>Huahai</name></author><id>tag:yyhh.org,2008-03-02:/blog/2008/03/an-interesting-birthday-gift</id><summary type="html">&lt;p&gt;Yunyao surprises Huahai with a scenic flight certificate as an early birthday present, revealed through a few photos of the gift.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="gift" src="https://farm4.static.flickr.com/3269/2305955534_80d0caf8e5.jpg?v=0"&gt;&lt;/p&gt;
&lt;p&gt;Huahai has received his birthday gift from Yunyao, a few days early.&lt;/p&gt;
&lt;p&gt;What's inside?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://farm4.static.flickr.com/3171/2305157953_2633a3fed6.jpg?v=0" width="500" height="375" /&gt;&lt;/p&gt;
&lt;p&gt;Wow, a scenic flight certificate, what a lovely gift! Thank you, babe.&lt;/p&gt;</content><category term="experience"></category><category term="Extraordinary"></category><category term="Family"></category></entry></feed>