summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/github-action-checks.yml9
-rw-r--r--.gitignore6
-rw-r--r--README.mediawiki66
-rw-r--r--bip-0002.mediawiki15
-rw-r--r--bip-0009/states.gv22
-rw-r--r--bip-0009/states.pngbin30632 -> 50153 bytes
-rw-r--r--bip-0010.mediawiki4
-rw-r--r--bip-0012.mediawiki4
-rw-r--r--bip-0014.mediawiki2
-rw-r--r--bip-0015.mediawiki4
-rw-r--r--bip-0021.mediawiki11
-rw-r--r--bip-0032.mediawiki10
-rw-r--r--bip-0035.mediawiki2
-rw-r--r--bip-0038.mediawiki4
-rw-r--r--bip-0039.mediawiki66
-rw-r--r--bip-0039/bip-0039-wordlists.md14
-rw-r--r--bip-0042.mediawiki2
-rw-r--r--bip-0043.mediawiki2
-rw-r--r--bip-0044.mediawiki2
-rw-r--r--bip-0047.mediawiki18
-rw-r--r--bip-0049.mediawiki2
-rw-r--r--bip-0060.mediawiki4
-rw-r--r--bip-0061.mediawiki2
-rw-r--r--bip-0067.mediawiki6
-rw-r--r--bip-0078.mediawiki14
-rw-r--r--bip-0080.mediawiki2
-rw-r--r--bip-0081.mediawiki2
-rw-r--r--bip-0083.mediawiki2
-rw-r--r--bip-0084.mediawiki2
-rw-r--r--bip-0085.mediawiki2
-rw-r--r--bip-0086.mediawiki2
-rw-r--r--bip-0087.mediawiki2
-rw-r--r--bip-0088.mediawiki6
-rw-r--r--bip-0099.mediawiki2
-rw-r--r--bip-0109.mediawiki2
-rw-r--r--bip-0112.mediawiki2
-rw-r--r--bip-0119.mediawiki2
-rw-r--r--bip-0126.mediawiki20
-rw-r--r--bip-0127.mediawiki2
-rw-r--r--bip-0129.mediawiki9
-rw-r--r--bip-0132.mediawiki2
-rw-r--r--bip-0133.mediawiki2
-rw-r--r--bip-0137.mediawiki2
-rw-r--r--bip-0141.mediawiki14
-rw-r--r--bip-0143.mediawiki8
-rw-r--r--bip-0151.mediawiki2
-rw-r--r--bip-0152.mediawiki2
-rw-r--r--bip-0155.mediawiki9
-rw-r--r--bip-0158.mediawiki5
-rw-r--r--bip-0158/gentestvectors.go2
-rw-r--r--bip-0173.mediawiki10
-rw-r--r--bip-0174.mediawiki6
-rwxr-xr-xbip-0174/build.sh9
-rw-r--r--bip-0174/coinjoin-workflow.svg1460
-rw-r--r--bip-0174/coinjoin-workflow.tex12
-rw-r--r--bip-0174/multisig-workflow.svg2957
-rw-r--r--bip-0174/multisig-workflow.tex19
-rw-r--r--bip-0176.mediawiki2
-rw-r--r--bip-0197.mediawiki2
-rw-r--r--bip-0300.mediawiki4
-rw-r--r--bip-0310.mediawiki4
-rw-r--r--bip-0322.mediawiki2
-rw-r--r--bip-0324/test_sage_decoding.py2
-rw-r--r--bip-0327.mediawiki8
-rw-r--r--bip-0330.mediawiki2
-rwxr-xr-xbip-0330/minisketch.py2
-rw-r--r--bip-0331.mediawiki430
-rw-r--r--bip-0331/no_package_info.pngbin0 -> 34994 bytes
-rw-r--r--bip-0331/orphan_handling_flow.pngbin0 -> 65204 bytes
-rw-r--r--bip-0331/package_cpfp_flow.pngbin0 -> 57377 bytes
-rw-r--r--bip-0331/package_erlay.pngbin0 -> 45106 bytes
-rw-r--r--bip-0331/package_info_only.pngbin0 -> 45150 bytes
-rw-r--r--bip-0331/sender_init_future_version.pngbin0 -> 99293 bytes
-rw-r--r--bip-0331/version_negotiation.pngbin0 -> 50918 bytes
-rw-r--r--bip-0345.mediawiki688
-rw-r--r--bip-0345/opvault.drawio.pngbin0 -> 92563 bytes
-rw-r--r--bip-0345/vaults-Basic.pngbin0 -> 18595 bytes
-rw-r--r--bip-0345/vaults.drawio1113
-rw-r--r--bip-0345/withdrawal-comparison.drawio.pngbin0 -> 20720 bytes
-rw-r--r--bip-0370.mediawiki4
-rw-r--r--bip-0371.mediawiki2
-rw-r--r--bip-0380.mediawiki16
-rw-r--r--bip-0381.mediawiki4
-rw-r--r--bip-0382.mediawiki4
-rw-r--r--bip-0383.mediawiki2
-rw-r--r--bip-0384.mediawiki4
-rw-r--r--bip-0385.mediawiki2
-rw-r--r--bip-0386.mediawiki2
-rw-r--r--bip-0389.mediawiki2
-rwxr-xr-xscripts/buildtable.pl3
-rwxr-xr-xscripts/diffcheck.sh3
-rwxr-xr-xscripts/link-format-chk.sh16
92 files changed, 6095 insertions, 1099 deletions
diff --git a/.github/workflows/github-action-checks.yml b/.github/workflows/github-action-checks.yml
index bfc014b..8a7d2ac 100644
--- a/.github/workflows/github-action-checks.yml
+++ b/.github/workflows/github-action-checks.yml
@@ -5,15 +5,18 @@ jobs:
Link-Format-Checks:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- run: scripts/link-format-chk.sh
Build-Table-Checks:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- run: scripts/buildtable.pl >/tmp/table.mediawiki || exit 1
Diff-Checks:
+ name: "Diff Checks (fails until number assignment)"
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 2
- run: scripts/diffcheck.sh
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d939d2a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+bip-0174/coinjoin-workflow.aux
+bip-0174/coinjoin-workflow.log
+bip-0174/coinjoin-workflow.pdf
+bip-0174/multisig-workflow.aux
+bip-0174/multisig-workflow.log
+bip-0174/multisig-workflow.pdf
diff --git a/README.mediawiki b/README.mediawiki
index ed7df0c..41efcd4 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -1,4 +1,4 @@
-People wishing to submit BIPs, first should propose their idea or document to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev bitcoin-dev@lists.linuxfoundation.org] mailing list (do <em>not</em> assign a number - read <a href="bip-0002.mediawiki">BIP 2</a> for the full process). After discussion, please open a PR. After copy-editing and acceptance, it will be published here.
+People wishing to submit BIPs, first should propose their idea or document to the [https://groups.google.com/g/bitcoindev bitcoindev@googlegroups.com] mailing list (do <em>not</em> assign a number - read <a href="bip-0002.mediawiki">BIP 2</a> for the full process). After discussion, please open a PR. After copy-editing and acceptance, it will be published here.
We are fairly liberal with approving BIPs, and try not to be too involved in decision making on behalf of the community. The exception is in very rare cases of dispute resolution when a decision is contentious and cannot be agreed upon. In those cases, the conservative option will always be preferred.
@@ -235,15 +235,15 @@ Those proposing changes should consider that ultimately consent may rest with th
| Applications
| Purpose Field for Deterministic Wallets
| Marek Palatinus, Pavol Rusnak
-| Informational
+| Standard
| Final
-|- style="background-color: #ffffcf"
+|- style="background-color: #cfffcf"
| [[bip-0044.mediawiki|44]]
| Applications
| Multi-Account Hierarchy for Deterministic Wallets
| Marek Palatinus, Pavol Rusnak
| Standard
-| Proposed
+| Final
|- style="background-color: #ffffcf"
| [[bip-0045.mediawiki|45]]
| Applications
@@ -251,13 +251,13 @@ Those proposing changes should consider that ultimately consent may rest with th
| Manuel Araoz, Ryan X. Charles, Matias Alejo Garcia
| Standard
| Proposed
-|-
+|- style="background-color: #cfffcf"
| [[bip-0047.mediawiki|47]]
| Applications
| Reusable Payment Codes for Hierarchical Deterministic Wallets
| Justus Ranvier
| Informational
-| Draft
+| Final
|- style="background-color: #ffffcf"
| [[bip-0048.mediawiki|48]]
| Applications
@@ -270,7 +270,7 @@ Those proposing changes should consider that ultimately consent may rest with th
| Applications
| Derivation scheme for P2WPKH-nested-in-P2SH based accounts
| Daniel Weigl
-| Informational
+| Standard
| Final
|- style="background-color: #cfffcf"
| [[bip-0050.mediawiki|50]]
@@ -434,12 +434,12 @@ Those proposing changes should consider that ultimately consent may rest with th
| Eric Lombrozo
| Standard
| Rejected
-|-
+|- style="background-color: #cfffcf"
| [[bip-0084.mediawiki|84]]
| Applications
| Derivation scheme for P2WPKH based accounts
| Pavol Rusnak
-| Informational
+| Standard
| Final
|-
| [[bip-0085.mediawiki|85]]
@@ -452,7 +452,7 @@ Those proposing changes should consider that ultimately consent may rest with th
| [[bip-0086.mediawiki|86]]
| Applications
| Key Derivation for Single Key P2TR Outputs
-| Andrew Chow
+| Ava Chow
| Standard
| Draft
|- style="background-color: #ffffcf"
@@ -487,7 +487,7 @@ Those proposing changes should consider that ultimately consent may rest with th
| [[bip-0093.mediawiki|93]]
| Applications
| codex32: Checksummed SSSS-aware BIP32 seeds
-| Leon Olsson Curr, Pearlwort Sneed
+| Leon Olsson Curr, Pearlwort Sneed, Andrew Poelstra
| Informational
| Draft
|-
@@ -627,7 +627,7 @@ Those proposing changes should consider that ultimately consent may rest with th
| [[bip-0119.mediawiki|119]]
| Consensus (soft fork)
| CHECKTEMPLATEVERIFY
-| Jeremy Rubin
+| Jeremy Rubin, James O'Beirne
| Standard
| Draft
|- style="background-color: #ffcfcf"
@@ -714,13 +714,13 @@ Those proposing changes should consider that ultimately consent may rest with th
| Andy Chase
| Process
| Withdrawn
-|-
+|- style="background-color: #cfffcf"
| [[bip-0133.mediawiki|133]]
| Peer Services
| feefilter message
| Alex Morcos
| Standard
-| Draft
+| Final
|- style="background-color: #ffcfcf"
| [[bip-0134.mediawiki|134]]
| Consensus (hard fork)
@@ -900,7 +900,7 @@ Those proposing changes should consider that ultimately consent may rest with th
| [[bip-0174.mediawiki|174]]
| Applications
| Partially Signed Bitcoin Transaction Format
-| Andrew Chow
+| Ava Chow
| Standard
| Final
|- style="background-color: #ffcfcf"
@@ -1030,6 +1030,13 @@ Those proposing changes should consider that ultimately consent may rest with th
| Standard
| Draft
|-
+| [[bip-0331.mediawiki|331]]
+| Peer Services
+| Ancestor Package Relay
+| Gloria Zhao
+| Standard
+| Draft
+|-
| [[bip-0338.mediawiki|338]]
| Peer Services
| Disable transaction relay message
@@ -1072,13 +1079,20 @@ Those proposing changes should consider that ultimately consent may rest with th
| Standard
| Final
|-
+| [[bip-0345.mediawiki|345]]
+| Consensus (soft fork)
+| OP_VAULT
+| James O'Beirne, Greg Sanders, Anthony Towns
+| Standard
+| Draft
+|-
| [[bip-0347.mediawiki|347]]
| Consensus (soft fork)
| OP_CAT in Tapscript
| Ethan Heilman, Armin Sabouri
| Standard
| Draft
-|-
+|- style="background-color: #cfffcf"
| [[bip-0350.mediawiki|350]]
| Applications
| Bech32m format for v1+ witness addresses
@@ -1096,14 +1110,14 @@ Those proposing changes should consider that ultimately consent may rest with th
| [[bip-0370.mediawiki|370]]
| Applications
| PSBT Version 2
-| Andrew Chow
+| Ava Chow
| Standard
| Draft
|-
| [[bip-0371.mediawiki|371]]
| Applications
| Taproot Fields for PSBT
-| Andrew Chow
+| Ava Chow
| Standard
| Draft
|-
@@ -1117,56 +1131,56 @@ Those proposing changes should consider that ultimately consent may rest with th
| [[bip-0380.mediawiki|380]]
| Applications
| Output Script Descriptors General Operation
-| Pieter Wuille, Andrew Chow
+| Pieter Wuille, Ava Chow
| Informational
| Draft
|-
| [[bip-0381.mediawiki|381]]
| Applications
| Non-Segwit Output Script Descriptors
-| Pieter Wuille, Andrew Chow
+| Pieter Wuille, Ava Chow
| Informational
| Draft
|-
| [[bip-0382.mediawiki|382]]
| Applications
| Segwit Output Script Descriptors
-| Pieter Wuille, Andrew Chow
+| Pieter Wuille, Ava Chow
| Informational
| Draft
|-
| [[bip-0383.mediawiki|383]]
| Applications
| Multisig Output Script Descriptors
-| Pieter Wuille, Andrew Chow
+| Pieter Wuille, Ava Chow
| Informational
| Draft
|-
| [[bip-0384.mediawiki|384]]
| Applications
| combo() Output Script Descriptors
-| Pieter Wuille, Andrew Chow
+| Pieter Wuille, Ava Chow
| Informational
| Draft
|-
| [[bip-0385.mediawiki|385]]
| Applications
| raw() and addr() Output Script Descriptors
-| Pieter Wuille, Andrew Chow
+| Pieter Wuille, Ava Chow
| Informational
| Draft
|-
| [[bip-0386.mediawiki|386]]
| Applications
| tr() Output Script Descriptors
-| Pieter Wuille, Andrew Chow
+| Pieter Wuille, Ava Chow
| Informational
| Draft
|-
| [[bip-0389.mediawiki|389]]
| Applications
| Multipath Descriptor Key Expressions
-| Andrew Chow
+| Ava Chow
| Informational
| Draft
|}
diff --git a/bip-0002.mediawiki b/bip-0002.mediawiki
index c6eb950..4bdc23b 100644
--- a/bip-0002.mediawiki
+++ b/bip-0002.mediawiki
@@ -32,13 +32,13 @@ The BIP process begins with a new idea for Bitcoin. Each potential BIP must have
Small enhancements or patches to a particular piece of software often don't require standardisation between multiple projects; these don't need a BIP and should be injected into the relevant project-specific development workflow with a patch submission to the applicable issue tracker.
Additionally, many ideas have been brought forward for changing Bitcoin that have been rejected for various reasons.
The first step should be to search past discussions to see if an idea has been considered before, and if so, what issues arose in its progression.
-After investigating past work, the best way to proceed is by posting about the new idea to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Bitcoin development mailing list].
+After investigating past work, the best way to proceed is by posting about the new idea to the [https://groups.google.com/g/bitcoindev Bitcoin development mailing list].
Vetting an idea publicly before going as far as writing a BIP is meant to save both the potential author and the wider community time.
Asking the Bitcoin community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the internet does not always do the trick).
It also helps to make sure the idea is applicable to the entire community and not just the author. Just because an idea sounds good to the author does not mean it will work for most people in most areas where Bitcoin is used.
-Once the champion has asked the Bitcoin community as to whether an idea has any chance of acceptance, a draft BIP should be presented to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Bitcoin development mailing list].
+Once the champion has asked the Bitcoin community as to whether an idea has any chance of acceptance, a draft BIP should be presented to the [https://groups.google.com/g/bitcoindev Bitcoin development mailing list].
This gives the author a chance to flesh out the draft BIP to make it properly formatted, of high quality, and to address additional concerns about the proposal.
Following a discussion, the proposal should be submitted to the [https://github.com/bitcoin/bips BIPs git repository] as a pull request.
This draft must be written in BIP style as described below, and named with an alias such as "bip-johndoe-infinitebitcoins" until an editor has assigned it a BIP number (authors MUST NOT self-assign BIP numbers).
@@ -67,8 +67,12 @@ If you are interested in assuming ownership of a BIP, send a message asking to t
The current BIP editors are:
+* Bryan Bishop ([[mailto:kanzure@gmail.com|kanzure@gmail.com]])
+* Jon Atack ([[mailto:jon@atack.com|jon@atack.com]])
* Luke Dashjr ([[mailto:luke_bipeditor@dashjr.org|luke_bipeditor@dashjr.org]])
-* Kalle Alm ([[mailto:karljohan-alm@garage.co.jp|karljohan-alm@garage.co.jp]])
+* Mark "Murch" Erhardt ([[mailto:murch@murch.one|murch@murch.one]])
+* Olaoluwa Osuntokun ([[mailto:laolu32@gmail.com|laolu32@gmail.com]])
+* Ruben Somsen ([[mailto:rsomsen@gmail.com|rsomsen@gmail.com]])
===BIP Editor Responsibilities & Workflow===
@@ -98,11 +102,13 @@ The BIP editor will:
The BIP editors are intended to fulfill administrative and editorial responsibilities. The BIP editors monitor BIP changes, and update BIP headers as appropriate.
+BIP editors may also, at their option, unilaterally make and merge strictly-editorial changes to BIPs, such as correcting misspellings, fixing broken links, etc.
+
==BIP format and structure==
===Specification===
-BIPs should be written in mediawiki format.
+BIPs should be written in mediawiki or markdown format.
Each BIP should have the following parts:
@@ -409,7 +415,6 @@ Why is Public Domain no longer acceptable for new BIPs?
* Non-image auxiliary files are permitted in the bip-XXXX subdirectory.
* Email addresses are now required for authors.
* The Post-History header may be provided as a link instead of a simple date.
-* Markdown format is no longer permitted for BIPs.
* The Resolution header has been dropped, as it is not applicable to a decentralised system where no authority exists to make final decisions.
==See Also==
diff --git a/bip-0009/states.gv b/bip-0009/states.gv
new file mode 100644
index 0000000..9dc95c5
--- /dev/null
+++ b/bip-0009/states.gv
@@ -0,0 +1,22 @@
+/* There are many ways to compile this, but one of them is:
+ *
+ * $ dot -Tpng states.gv -o states.png
+ */
+digraph {
+ /* States. */
+ DEFINED; FAILED; STARTED; LOCKED_IN; ACTIVE;
+
+ /* Relationships between states, labeled where applicable. */
+ DEFINED -> DEFINED;
+ DEFINED -> FAILED [label = "timeout ≤ MTP"];
+ DEFINED -> STARTED [label = "starttime ≤ MTP < timeout"];
+ FAILED -> FAILED;
+ STARTED -> STARTED;
+ STARTED -> FAILED [label = "timeout ≤ MTP"];
+ STARTED -> LOCKED_IN [label = "(MTP < timeout) AND (threshold reached)"];
+ LOCKED_IN -> ACTIVE [label = "Always"];
+ ACTIVE -> ACTIVE;
+
+ /* Visualization hack to unclutter output. */
+ nodesep = 1.2;
+}
diff --git a/bip-0009/states.png b/bip-0009/states.png
index 09312a1..2048ed8 100644
--- a/bip-0009/states.png
+++ b/bip-0009/states.png
Binary files differ
diff --git a/bip-0010.mediawiki b/bip-0010.mediawiki
index 42071f3..289e3b0 100644
--- a/bip-0010.mediawiki
+++ b/bip-0010.mediawiki
@@ -93,10 +93,10 @@ The following is an example TxDP from Armory, produced while running on the test
In this transaction, there are two inputs, one of 150 BTC and the other of 12 BTC. This transaction combines 162 BTC to create two outputs, one of 160 BTC, one 1.9995 BTC, and a tx fee of 0.0005. In this TxDP, both inputs have been signed, and thus could broadcast immediately.
-The style of communication is taken directly from PGP/GPG, which uses blocks of ASCII like this to communicate encrypted messages and signatures. This serialization is compact, and will be interpretted the same in all character encodings. It can be copied inline into an email, or saved in a text file. The advantage over the analogous PGP encoding is that there are some human readable elements to it, for users that wish to examine the TxDP packet manually, instead of requiring a program to parse the core elements of the TxDP.
+The style of communication is taken directly from PGP/GPG, which uses blocks of ASCII like this to communicate encrypted messages and signatures. This serialization is compact, and will be interpreted the same in all character encodings. It can be copied inline into an email, or saved in a text file. The advantage over the analogous PGP encoding is that there are some human readable elements to it, for users that wish to examine the TxDP packet manually, instead of requiring a program to parse the core elements of the TxDP.
A party receiving this TxDP can simply add their signature to the appropriate _TXINPUT_ line. If that is the last signature required, they can broadcast it themselves. Any software that implements this standard should be able to combine multiple TxDPs into a single TxDP. However, even without the programmatic support, a user could manually combine them by copying the appropriate _TXSIGS_ lines between serializations, though it is not the recommended method for combining TxDPs.
== Reference Implementation ==
-This proposal was implemented and tested in the older versions of ''Armory'' Bitcoin software for use in offline-wallet transaction signing (as a 1-of-1 transaction). Implementation can be found in https://github.com/etotheipi/BitcoinArmory/blob/v0.91-beta/armoryengine/Transaction.py under the class PyTxDistProposal. However, as of verion 0.92 released in July 2014, Armory no longer uses this proposal for offline wallet transaction signing and has moved on to a new format.
+This proposal was implemented and tested in the older versions of ''Armory'' Bitcoin software for use in offline-wallet transaction signing (as a 1-of-1 transaction). Implementation can be found in https://github.com/etotheipi/BitcoinArmory/blob/v0.91-beta/armoryengine/Transaction.py under the class PyTxDistProposal. However, as of version 0.92 released in July 2014, Armory no longer uses this proposal for offline wallet transaction signing and has moved on to a new format.
diff --git a/bip-0012.mediawiki b/bip-0012.mediawiki
index 70069d6..bd3d88c 100644
--- a/bip-0012.mediawiki
+++ b/bip-0012.mediawiki
@@ -43,11 +43,11 @@ OP_EVAL allows the receiver of bitcoins to specify how they can be spent when th
If ''serialized script'' is a large or complicated multi-signature script, then the burden of paying for it (in increased transaction fees due to more signature operations or transaction size) is shifted from the sender to the receiver.
-The main objection to OP_EVAL is that it adds complexity, and complexity is the enemy of security. Also, evaluating data as code has a long record of being a source of security vulnerabilties.
+The main objection to OP_EVAL is that it adds complexity, and complexity is the enemy of security. Also, evaluating data as code has a long record of being a source of security vulnerabilities.
That same argument can be applied to the existing Bitcoin 'scripting' system; scriptPubKeys are transmit as data across the network and are then interpreted by every bitcoin implementation. OP_EVAL just moves the data that will be interpreted. It is debatable whether or not the entire idea of putting a little interpreted expression evaluation language at the core of Bitcoin was brilliant or stupid, but the existence of OP_EVAL does not make the expression language less secure.
-There is a 1-confirmation attack on old clients that interepret OP_EVAL as a no-op, but it is expensive and difficult in practice. The attack is:
+There is a 1-confirmation attack on old clients that interpret OP_EVAL as a no-op, but it is expensive and difficult in practice. The attack is:
# Attacker creates an OP_EVAL transaction that is valid as seen by old clients, but invalid for new clients.
# Attacker also creates a standard transaction that spends the OP_EVAL transaction, and pays the victim.
diff --git a/bip-0014.mediawiki b/bip-0014.mediawiki
index abd575c..fded420 100644
--- a/bip-0014.mediawiki
+++ b/bip-0014.mediawiki
@@ -28,7 +28,7 @@ Version bumping can also introduce incompatibilities and fracture the network. I
By using a protocol version, we set all implementations on the network to a common standard. Everybody is able to agree within their confines what is protocol and what is implementation-dependent. A user agent string is offered as a 'vanity-plate' for clients to distinguish themselves in the network.
-Separation of the network protocol from the implemention, and forming development of said protocol by means of a mutual consensus among participants, has the democratic disadvantage when agreement is hard to reach on contentious issues. To mitigate this issue, strong communication channels and fast release schedules are needed, and are outside the scope of this document (concerning a process-BIP type).
+Separation of the network protocol from the implementation, and forming development of said protocol by means of a mutual consensus among participants, has the democratic disadvantage when agreement is hard to reach on contentious issues. To mitigate this issue, strong communication channels and fast release schedules are needed, and are outside the scope of this document (concerning a process-BIP type).
User agents provide extra tracking information that is useful for keeping tabs on network data such as client implementations used or common architectures/operating-systems. In the rare case they may even provide an emergency method of shunning faulty clients that threaten network health- although this is strongly unrecommended and extremely bad form. The user agent does not provide a method for clients to work around and behave differently to different implementations, as this will lead to protocol fracturing.
diff --git a/bip-0015.mediawiki b/bip-0015.mediawiki
index a6e4426..52a698f 100644
--- a/bip-0015.mediawiki
+++ b/bip-0015.mediawiki
@@ -348,7 +348,7 @@ By using DNS lookups, the MITM problem with IP transactions could be mitigated b
=== Namecoin ID ===
-This proposal uses the Namecoin blockchain to associate an alias with a bitcoin address. Bitcoin queries a namecoin node. This retreives the structured data containing the bitcoin address(es) associated with this alias.
+This proposal uses the Namecoin blockchain to associate an alias with a bitcoin address. Bitcoin queries a namecoin node. This retrieves the structured data containing the bitcoin address(es) associated with this alias.
Using a decentralised domain name system like Namecoin, means no external server or entity needs to be trusted unlike the other proposals listed here. This indicates a system with the advantage of having a high availability and ease of entry (no restrictions for users to create aliases).
@@ -401,4 +401,4 @@ Any text can be put into the brackets, allowing merchants to adapt it to all the
New features can be added later to support uncovered cases.
-See the specification of [http://dot-bit.org/Namespace:Identity Namecoin ID] for more informations.
+See the specification of [http://dot-bit.org/Namespace:Identity Namecoin ID] for more information.
diff --git a/bip-0021.mediawiki b/bip-0021.mediawiki
index 0fba9bc..9fa4823 100644
--- a/bip-0021.mediawiki
+++ b/bip-0021.mediawiki
@@ -37,7 +37,7 @@ Elements of the query component may contain characters outside the valid range.
=== ABNF grammar ===
-(See also [[#Simpler syntax|a simpler representation of syntax]])
+(See also [[#simpler-syntax|a simpler representation of syntax]])
bitcoinurn = "bitcoin:" bitcoinaddress [ "?" bitcoinparams ]
bitcoinaddress = *base58
@@ -120,11 +120,6 @@ Some future version that has variables which are (currently) not understood but
Characters must be URI encoded properly.
-== Reference Implementations ==
-=== Bitcoin clients ===
-* Bitcoin-Qt supports the old version of Bitcoin URIs (ie without the req- prefix), with Windows and KDE integration as of commit 70f55355e29c8e45b607e782c5d76609d23cc858.
+== Reference Implementation ==
-=== Libraries ===
-* Javascript - https://github.com/bitcoinjs/bip21
-* Java - https://github.com/SandroMachado/BitcoinPaymentURI
-* Swift - https://github.com/SandroMachado/BitcoinPaymentURISwift
+Bitcoin-Qt supports the old version of Bitcoin URIs (ie without the req- prefix), with Windows and KDE integration as of commit 70f55355e29c8e45b607e782c5d76609d23cc858.
diff --git a/bip-0032.mediawiki b/bip-0032.mediawiki
index b441658..0e6df24 100644
--- a/bip-0032.mediawiki
+++ b/bip-0032.mediawiki
@@ -25,7 +25,7 @@ This document describes hierarchical deterministic wallets (or "HD Wallets"): wa
The specification is intended to set a standard for deterministic wallets that can be interchanged between different clients. Although the wallets described here have many features, not all are required by supporting clients.
-The specification consists of two parts. In a first part, a system for deriving a tree of keypairs from a single seed is presented. The second part demonstrates how to build a wallet structure on top of such a tree.
+The specification consists of two parts. In the first part, a system for deriving a tree of keypairs from a single seed is presented. The second part demonstrates how to build a wallet structure on top of such a tree.
==Copyright==
@@ -37,7 +37,7 @@ The Bitcoin reference client uses randomly generated keys. In order to avoid the
Deterministic wallets do not require such frequent backups, and elliptic curve mathematics permit schemes where one can calculate the public keys without revealing the private keys. This permits for example a webshop business to let its webserver generate fresh addresses (public key hashes) for each order or for each customer, without giving the webserver access to the corresponding private keys (which are required for spending the received funds).
-However, deterministic wallets typically consist of a single "chain" of keypairs. The fact that there is only one chain means that sharing a wallet happens on an all-or-nothing basis. However, in some cases one only wants some (public) keys to be shared and recoverable. In the example of a webshop, the webserver does not need access to all public keys of the merchant's wallet; only to those addresses which are used to receive customer's payments, and not for example the change addresses that are generated when the merchant spends money. Hierarchical deterministic wallets allow such selective sharing by supporting multiple keypair chains, derived from a single root.
+However, deterministic wallets typically consist of a single "chain" of keypairs. The fact that there is only one chain means that sharing a wallet happens on an all-or-nothing basis. However, in some cases one only wants some (public) keys to be shared and recoverable. In the example of a webshop, the webserver does not need access to all public keys of the merchant's wallet; only to those addresses which are used to receive customers' payments, and not for example the change addresses that are generated when the merchant spends money. Hierarchical deterministic wallets allow such selective sharing by supporting multiple keypair chains, derived from a single root.
==Specification: Key derivation==
@@ -104,7 +104,7 @@ The function N((k, c)) &rarr; (K, c) computes the extended public key correspond
To compute the public child key of a parent private key:
* N(CKDpriv((k<sub>par</sub>, c<sub>par</sub>), i)) (works always).
* CKDpub(N(k<sub>par</sub>, c<sub>par</sub>), i) (works only for non-hardened child keys).
-The fact that they are equivalent is what makes non-hardened keys useful (one can derive child public keys of a given parent key without knowing any private key), and also what distinguishes them from hardened keys. The reason for not always using non-hardened keys (which are more useful) is security; see further for more information.
+The fact that they are equivalent is what makes non-hardened keys useful (one can derive child public keys of a given parent key without knowing any private key), and also what distinguishes them from hardened keys. The reason for not always using non-hardened keys (which are more useful) is security; see further below for more information.
====Public parent key &rarr; private child key====
@@ -184,7 +184,7 @@ When a business has several independent offices, they can all use wallets derive
====Recurrent business-to-business transactions: N(m/i<sub>H</sub>/0)====
In case two business partners often transfer money, one can use the extended public key for the external chain of a specific account (M/i h/0) as a sort of "super address", allowing frequent transactions that cannot (easily) be associated, but without needing to request a new address for each payment.
-Such a mechanism could also be used by mining pool operators as variable payout address.
+Such a mechanism could also be used by mining pool operators as a variable payout address.
====Unsecure money receiver: N(m/i<sub>H</sub>/0)====
@@ -212,7 +212,7 @@ Private and public keys must be kept safe as usual. Leaking a private key means
Somewhat more care must be taken regarding extended keys, as these correspond to an entire (sub)tree of keys.
One weakness that may not be immediately obvious, is that knowledge of a parent extended public key plus any non-hardened private key descending from it is equivalent to knowing the parent extended private key (and thus every private and public key descending from it). This means that extended public keys must be treated more carefully than regular public keys.
-It is also the reason for the existence of hardened keys, and why they are used for the account level in the tree. This way, a leak of account-specific (or below) private key never risks compromising the master or other accounts.
+It is also the reason for the existence of hardened keys, and why they are used for the account level in the tree. This way, a leak of account-specific (or below) private keys never risks compromising the master or other accounts.
==Test Vectors==
diff --git a/bip-0035.mediawiki b/bip-0035.mediawiki
index 64edaf5..eccd381 100644
--- a/bip-0035.mediawiki
+++ b/bip-0035.mediawiki
@@ -16,7 +16,7 @@ Make a network node's transaction memory pool accessible via a new "mempool" mes
==Motivation==
-Several use cases make it desireable to expose a network node's transaction memory pool:
+Several use cases make it desirable to expose a network node's transaction memory pool:
# SPV clients, wishing to obtain zero-confirmation transactions sent or received.
# Miners, to avoid missing lucrative fees, downloading existing network transactions after a restart.
# Remote network diagnostics.
diff --git a/bip-0038.mediawiki b/bip-0038.mediawiki
index 511b55a..f5013db 100644
--- a/bip-0038.mediawiki
+++ b/bip-0038.mediawiki
@@ -39,7 +39,7 @@ This proposal is hereby placed in the public domain.
:'''''User story:''' As a Bitcoin user who uses paper wallets, I would like the ability to add encryption, so that my Bitcoin paper storage can be two factor: something I have plus something I know.''
:'''''User story:''' As a Bitcoin user who would like to pay a person or a company with a private key, I do not want to worry that any part of the communication path may result in the interception of the key and theft of my funds. I would prefer to offer an encrypted private key, and then follow it up with the password using a different communication channel (e.g. a phone call or SMS).''
:'''''User story:''' (EC-multiplied keys) As a user of physical bitcoins, I would like a third party to be able to create password-protected Bitcoin private keys for me, without them knowing the password, so I can benefit from the physical bitcoin without the issuer having access to the private key. I would like to be able to choose a password whose minimum length and required format does not preclude me from memorizing it or engraving it on my physical bitcoin, without exposing me to an undue risk of password cracking and/or theft by the manufacturer of the item.''
-:'''''User story:''' (EC multiplied keys) As a user of paper wallets, I would like the ability to generate a large number of Bitcoin addresses protected by the same password, while enjoying a high degree of security (highly expensive scrypt parameters), but without having to incur the scrypt delay for each address I generate.
+:'''''User story:''' (EC-multiplied keys) As a user of paper wallets, I would like the ability to generate a large number of Bitcoin addresses protected by the same password, while enjoying a high degree of security (highly expensive scrypt parameters), but without having to incur the scrypt delay for each address I generate.
==Specification==
This proposal makes use of the following functions and definitions:
@@ -170,7 +170,7 @@ To recalculate the address:
# Derive ''passfactor'' using scrypt with ''ownerentropy'' and the user's passphrase and use it to recompute ''passpoint''
# Derive decryption key for ''pointb'' using scrypt with ''passpoint'', ''addresshash'', and ''ownerentropy''
# Decrypt ''encryptedpointb'' to yield ''pointb''
-# ECMultiply ''pointb'' by ''passfactor''. Use the resulting EC point as a public key and hash it into ''address'' using either compressed or uncompressed public key methodology as specifid in ''flagbyte''.
+# ECMultiply ''pointb'' by ''passfactor''. Use the resulting EC point as a public key and hash it into ''address'' using either compressed or uncompressed public key methodology as specified in ''flagbyte''.
=====Decryption=====
# Collect encrypted private key and passphrase from user.
diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki
index 5170edd..51fe33d 100644
--- a/bip-0039.mediawiki
+++ b/bip-0039.mediawiki
@@ -138,69 +138,3 @@ Also see https://github.com/bip32JP/bip32JP.github.io/blob/master/test_JP_BIP39.
Reference implementation including wordlists is available from
http://github.com/trezor/python-mnemonic
-
-==Other Implementations==
-
-Go:
-* https://github.com/tyler-smith/go-bip39
-
-Python:
-* https://github.com/meherett/python-hdwallet
-
-Elixir:
-* https://github.com/aerosol/mnemo
-
-Objective-C:
-* https://github.com/nybex/NYMnemonic
-
-Haskell:
-* https://github.com/haskoin/haskoin
-
-.NET (Standard):
-* https://www.nuget.org/packages/dotnetstandard-bip39/
-
-.NET C# (PCL):
-* https://github.com/Thashiznets/BIP39.NET
-
-.NET C# (PCL):
-* https://github.com/NicolasDorier/NBitcoin
-
-JavaScript:
-* https://github.com/bitpay/bitcore/tree/master/packages/bitcore-mnemonic
-* https://github.com/bitcoinjs/bip39 (used by [[https://github.com/blockchain/My-Wallet-V3/blob/v3.8.0/src/hd-wallet.js#L121-L146|blockchain.info]])
-* https://github.com/dashhive/DashPhrase.js
-* https://github.com/hujiulong/web-bip39
-
-Java:
-* https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/crypto/MnemonicCode.java
-
-Ruby:
-* https://github.com/sreekanthgs/bip_mnemonic
-
-Rust:
-* https://github.com/maciejhirsz/tiny-bip39/
-* https://github.com/koushiro/bip0039-rs
-
-Smalltalk:
-* https://github.com/eMaringolo/pharo-bip39mnemonic
-
-Swift:
-* https://github.com/CikeQiu/CKMnemonic
-* https://github.com/yuzushioh/WalletKit
-* https://github.com/pengpengliu/BIP39
-* https://github.com/matter-labs/web3swift/blob/develop/Sources/web3swift/KeystoreManager/BIP39.swift
-* https://github.com/zcash-hackworks/MnemonicSwift
-* https://github.com/ShenghaiWang/BIP39
-* https://github.com/anquii/BIP39
-
-C++:
-* https://github.com/libbitcoin/libbitcoin-system/blob/master/include/bitcoin/system/wallet/mnemonic.hpp
-
-C (with Python/Java/Javascript bindings):
-* https://github.com/ElementsProject/libwally-core
-
-Python:
-* https://github.com/scgbckbone/btc-hd-wallet
-
-Dart:
-* https://github.com/dart-bitcoin/bip39
diff --git a/bip-0039/bip-0039-wordlists.md b/bip-0039/bip-0039-wordlists.md
index f2c173c..5acf87d 100644
--- a/bip-0039/bip-0039-wordlists.md
+++ b/bip-0039/bip-0039-wordlists.md
@@ -53,7 +53,7 @@ Credits: @Kirvx @NicolasDorier @ecdsa @EricLarch
7. No words in the plural (except invariable words like "univers", or same spelling than singular like "heureux").
8. No female adjectives (except words with same spelling for male and female adjectives like "magique").
9. No words with several senses AND different spelling in speaking like "verre-vert", unless a word has a meaning much more popular than another like "perle" and "pairle".
-10. No very similar words with 1 letter of difference.
+10. No very similar words with only 1 letter of difference.
11. No essentially reflexive verbs (unless a verb is also a noun like "souvenir").
12. No words with "ô;â;ç;ê;œ;æ;î;ï;û;ù;à;ë;ÿ".
13. No words ending by "é;ée;è;et;ai;ait".
@@ -93,12 +93,12 @@ Words chosen using the following rules:
1. Words are 4-8 letters long.
2. Words can be uniquely determined typing the first 4 letters.
-3. Only words containing all letters without diacritical marks. (It was the hardest task, because in one third of all Czech letters has diacritical marks.)
+3. Only words containing all letters without diacritical marks. (It was the hardest task, because one third of all Czech letters has diacritical marks.)
4. Only nouns, verbs and adverbs, no other word types. All words are in basic form.
5. No personal names or geographical names.
6. No very similar words with 1 letter of difference.
-7. Words are sorting according English alphabet (Czech sorting has difference in "ch").
-8. No words already used in other language mnemonic sets (english, italian, french, spanish). Letters with diacritical marks from these sets are counted as analogous letters without diacritical marks.
+7. Words are sorted according to English alphabet (Czech sorting has difference in "ch").
+8. No words already used in other language mnemonic sets (english, italian, french, spanish). Letters with diacritical marks from these sets are counted as analogous letters without diacritical marks.
### Portuguese
@@ -109,9 +109,9 @@ Credits: @alegotardo @bitmover-studio @brenorb @kuthullu @ninjastic @sabotag3x @
3. No complex verb forms.
4. No plural words, unless there's no singular form.
5. No words with double spelling.
-6. No words with the exact sound of another word with different spelling.
+6. No words with the exact sound as another word with different spelling.
7. No offensive words.
8. No words already used in other language mnemonic sets.
9. The words which have not the same spelling in Brazil and in Portugal are excluded.
-10. No words that remind negative/sad/bad things.
-11. No very similar words with 1 letter of difference.
+10. No words that remind one of negative/sad/bad things.
+11. No very similar words with only 1 letter of difference.
diff --git a/bip-0042.mediawiki b/bip-0042.mediawiki
index 223076f..2c5de6d 100644
--- a/bip-0042.mediawiki
+++ b/bip-0042.mediawiki
@@ -15,7 +15,7 @@
Although it is widely believed that Satoshi was an inflation-hating goldbug he never said this, and in fact programmed Bitcoin's money supply to grow indefinitely, forever. He modeled the monetary supply as 4 gold mines being discovered per mibillenium (1024 years), with equal intervals between them, each one being depleted over the course of 140 years.
-This poses obvious problems, however. Prominent among them is the discussion on what to call 1 billion Bitcoin, which symbol color to use for it, and when wallet clients should switch to it by default.
+This poses obvious problems, however. Prominent among them is the discussion on what to call 1 billion bitcoin, which symbol color to use for it, and when wallet clients should switch to it by default.
To combat this, this document proposes a controversial change: making Bitcoin's monetary supply finite.
diff --git a/bip-0043.mediawiki b/bip-0043.mediawiki
index 32e02b1..f07c94a 100644
--- a/bip-0043.mediawiki
+++ b/bip-0043.mediawiki
@@ -7,7 +7,7 @@
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0043
Status: Final
- Type: Informational
+ Type: Standards Track
Created: 2014-04-24
</pre>
diff --git a/bip-0044.mediawiki b/bip-0044.mediawiki
index 4ddd56b..5db540c 100644
--- a/bip-0044.mediawiki
+++ b/bip-0044.mediawiki
@@ -6,7 +6,7 @@
Pavol Rusnak <stick@satoshilabs.com>
Comments-Summary: Mixed review (one person)
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0044
- Status: Proposed
+ Status: Final
Type: Standards Track
Created: 2014-04-24
</pre>
diff --git a/bip-0047.mediawiki b/bip-0047.mediawiki
index af801f9..dc1f588 100644
--- a/bip-0047.mediawiki
+++ b/bip-0047.mediawiki
@@ -1,7 +1,7 @@
RECENT CHANGES:
+* (15 Feb 2021) Finalize specification
+* (28 Sep 2017) Adjust text to match test vectors
* (19 Apr 2016) Define version 2 payment codes
-* (17 Apr 2016) Clarify usage of outpoints in notification transactions
-* (18 Dec 2015) Update explanations to resolve FAQs
<pre>
BIP: 47
@@ -10,11 +10,17 @@ RECENT CHANGES:
Author: Justus Ranvier <justus@openbitcoinprivacyproject.org>
Comments-Summary: Unanimously Discourage for implementation
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0047
- Status: Draft
+ Status: Final
Type: Informational
Created: 2015-04-24
</pre>
+==Status==
+
+This BIP can be be considered final in terms of enabling compatibility with wallets that implement version 1 and version 2 reusable payment codes, however future developments of the reusable payment codes specification will not be distributed via the BIP process.
+
+The Open Bitcoin Privacy Project RFC repo should be consulted for specifications related to version 3 or higher payment codes: https://github.com/OpenBitcoinPrivacyProject/rfc
+
==Abstract==
This BIP defines a technique for creating a payment code which can be publicly advertised and associated with a real-life identity without creating the loss of security or privacy inherent to P2PKH address reuse.
@@ -150,7 +156,7 @@ It is assumed that Alice can easily obtain Bob's payment code via a suitable met
Prior to the first time Alice initiates a transaction to Bob, Alice MUST inform Bob of her payment code via the following procedure:
-Note: this procedure is used if Bob uses a version 1 payment code (regardless of the the version of Alice's payment code). If Bob's payment code is not version 1, see the appropriate section in this specification.
+Note: this procedure is used if Bob uses a version 1 payment code (regardless of the version of Alice's payment code). If Bob's payment code is not version 1, see the appropriate section in this specification.
# Alice constructs a transaction which sends a small quantity of bitcoins to Bob's notification address (notification transaction)
## The inputs selected for this transaction MUST NOT be easily associated with Alice's notification address
@@ -158,7 +164,7 @@ Note: this procedure is used if Bob uses a version 1 payment code (regardless of
## Alice selects the private key corresponding to the designated pubkey: <pre>a</pre>
## Alice selects the public key associated with Bob's notification address: <pre>B, where B = bG</pre>
## Alice calculates a secret point: <pre>S = aB</pre>
-## Alice calculates a 64 byte blinding factor: <pre>s = HMAC-SHA512(x, o)</pre>
+## Alice calculates a 64 byte blinding factor: <pre>s = HMAC-SHA512(o, x)</pre>
### "x" is the x value of the secret point
### "o" is the outpoint being spent by the designated input
# Alice serializes her payment code in binary form.
@@ -229,7 +235,7 @@ The following actions are recommended to reduce this risk:
<img src="bip-0047/reusable_payment_codes-04.png" />
<img src="bip-0047/reusable_payment_codes-05.png" />
# Bob is watching for incoming payments on B' ever since he received the notification transaction from Alice.
-## Bob calculates n shared secrets with Alice, using the 0<sup>th</sup> public key derived Alice's payment code, and private keys 0 - n derived from Bob's payment code, where n is his desired lookahead window.
+## Bob calculates n shared secrets with Alice, using the 0<sup>th</sup> public key derived from Alice's payment code, and private keys 0 - n derived from Bob's payment code, where n is his desired lookahead window.
## Bob calculates the ephemeral deposit addresses using the same procedure as Alice: <pre>B' = B + sG</pre>
## Bob calculate the private key for each ephemeral address as: <pre>b' = b + s</pre>
<img src="bip-0047/reusable_payment_codes-02.png" />
diff --git a/bip-0049.mediawiki b/bip-0049.mediawiki
index 7d8d2c7..a13b437 100644
--- a/bip-0049.mediawiki
+++ b/bip-0049.mediawiki
@@ -6,7 +6,7 @@
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0049
Status: Final
- Type: Informational
+ Type: Standards Track
Created: 2016-05-19
License: PD
</pre>
diff --git a/bip-0060.mediawiki b/bip-0060.mediawiki
index 8e9f289..626a039 100644
--- a/bip-0060.mediawiki
+++ b/bip-0060.mediawiki
@@ -23,14 +23,14 @@ The implementation is problematic because the RelayTransactions flag is an optio
One property of Bitcoin messages is their fixed number of fields. This keeps the format simple and easily understood. Adding optional fields to messages will cause deserialisation issues when other fields come after the optional one.
-As an example, the length of version messages might be checked to ensure the byte stream is consistent. With optional fields, this checking is no longer possible. This is desirable to check for consistency inside internal deserialization code, and proper formatting of version messages originating from other nodes. In the future with diversification of the Bitcoin network, it will become desirable to enforce this kind of strict adherance to standard messages with field length compliance with every protocol version.
+As an example, the length of version messages might be checked to ensure the byte stream is consistent. With optional fields, this checking is no longer possible. This is desirable to check for consistency inside internal deserialization code, and proper formatting of version messages originating from other nodes. In the future with diversification of the Bitcoin network, it will become desirable to enforce this kind of strict adherence to standard messages with field length compliance with every protocol version.
Another property of fixed-length field messages is the ability to pass stream operators around for deserialization. This property is also lost, as now the deserialisation code must know the remaining length of bytes to parse. The parser now requires an additional piece of information (remaining size of the stream) for parsing instead of being a dumb reader.
==Specification==
=== version ===
-When a node creates an outgoing connection, it will immediately advertise its version. The remote node will respond with its version. No futher communication is possible until both peers have exchanged their version.
+When a node creates an outgoing connection, it will immediately advertise its version. The remote node will respond with its version. No further communication is possible until both peers have exchanged their version.
Payload:
diff --git a/bip-0061.mediawiki b/bip-0061.mediawiki
index b08739d..384c0ff 100644
--- a/bip-0061.mediawiki
+++ b/bip-0061.mediawiki
@@ -57,7 +57,7 @@ Every reject message begins with the following fields. Some messages append extr
|}
The human-readable string is intended only for debugging purposes; in particular, different implementations may
-use different strings. The string should not be shown to users or used for anthing besides diagnosing
+use different strings. The string should not be shown to users or used for anything besides diagnosing
interoperability problems.
The following reject code categories are used; in the descriptions below, "server" is the peer generating
diff --git a/bip-0067.mediawiki b/bip-0067.mediawiki
index 793039d..a31cc3d 100644
--- a/bip-0067.mediawiki
+++ b/bip-0067.mediawiki
@@ -53,10 +53,10 @@ Hash the redeem script according to BIP-0016 to get the P2SH address.
3Q4sF6tv9wsdqu2NtARzNCpQgwifm2rAba
==Compatibility==
-* Uncompressed keys are incompatible with this specificiation. A compatible implementation should not automatically compress keys. Receiving an uncompressed key from a multisig participant should be interpreted as a sign that the user has an incompatible implementation.
-* P2SH addressses do not reveal information about the script that is receiving the funds. For this reason it is not technically possible to enforce this BIP as a rule on the network. Also, it would cause a hard fork.
+* Uncompressed keys are incompatible with this specification. A compatible implementation should not automatically compress keys. Receiving an uncompressed key from a multisig participant should be interpreted as a sign that the user has an incompatible implementation.
+* P2SH addresses do not reveal information about the script that is receiving the funds. For this reason it is not technically possible to enforce this BIP as a rule on the network. Also, it would cause a hard fork.
* Implementations that do not conform with this BIP will have compatibility issues with strictly-compliant wallets.
-* Implementations which do adopt this standard will be cross-compatible when choosing multisig addressses.
+* Implementations which do adopt this standard will be cross-compatible when choosing multisig addresses.
* If a group of users were not entirely compliant, there is the possibility that a participant will derive an address that the others will not recognize as part of the common multisig account.
==Test vectors==
diff --git a/bip-0078.mediawiki b/bip-0078.mediawiki
index 1893f0e..3528725 100644
--- a/bip-0078.mediawiki
+++ b/bip-0078.mediawiki
@@ -143,7 +143,7 @@ If the receiver does not support the version of the sender, they should send an
}
</pre>
-* <code>additionalfeeoutputindex=</code>, if the sender is willing to pay for increased fee, this indicate output can have its value substracted to pay for it.
+* <code>additionalfeeoutputindex=</code>, if the sender is willing to pay for increased fee, this indicate output can have its value subtracted to pay for it.
If the <code>additionalfeeoutputindex</code> is out of bounds or pointing to the payment output meant for the receiver, the receiver should ignore the parameter. See [[#fee-output|fee output]] for more information.
@@ -198,7 +198,7 @@ It is advised to hard code the description of the well known error codes into th
===<span id="fee-output"></span>Fee output===
In some situation, the sender might want to pay some additional fee in the payjoin proposal.
-If such is the case, the sender must use both [[#optional-params|optional parameters]] <code>additionalfeeoutputindex=</code> and <code>maxadditionalfeecontribution=</code> to indicate which output and how much the receiver can substract fee.
+If such is the case, the sender must use both [[#optional-params|optional parameters]] <code>additionalfeeoutputindex=</code> and <code>maxadditionalfeecontribution=</code> to indicate which output and how much the receiver can subtract fee.
There is several cases where a fee output is useful:
@@ -273,7 +273,7 @@ The sender should check the payjoin proposal before signing it to prevent a mali
* For each outputs in the proposal:
** Verify that no keypaths is in the PSBT output
** If the output is the [[#fee-output|fee output]]:
-*** The amount that was substracted from the output's value is less than or equal to <code>maxadditionalfeecontribution</code>. Let's call this amount <code>actual contribution</code>.
+*** The amount that was subtracted from the output's value is less than or equal to <code>maxadditionalfeecontribution</code>. Let's call this amount <code>actual contribution</code>.
*** Make sure the actual contribution is only paying fee: The <code>actual contribution</code> is less than or equals to the difference of absolute fee between the payjoin proposal and the original PSBT.
*** Make sure the actual contribution is only paying for fee incurred by additional inputs: <code>actual contribution</code> is less than or equals to <code>originalPSBTFeeRate * vsize(sender_input_type) * (count(payjoin_proposal_inputs) - count(original_psbt_inputs))</code>. (see [[#fee-output|Fee output]] section)
** If the output is the payment output and payment output substitution is allowed.
@@ -344,7 +344,7 @@ On top of this the receiver can poison analysis by randomly faking a round amoun
===<span id="output-substitution"></span>Payment output substitution===
-Unless disallowed by sender explicitely via `disableoutputsubstitution=true` or by the BIP21 url via query parameter the `pjos=0`, the receiver is free to decrease the amount, remove, or change the scriptPubKey output paying to himself.
+Unless disallowed by sender explicitly via `disableoutputsubstitution=true` or by the BIP21 url via query parameter the `pjos=0`, the receiver is free to decrease the amount, remove, or change the scriptPubKey output paying to himself.
Note that if payment output substitution is disallowed, the reveiver can still increase the amount of the output. (See [[#reference-impl|the reference implementation]])
For example, if the sender's scriptPubKey type is P2WPKH while the receiver's payment output in the original PSBT is P2SH, then the receiver can substitute the payment output to be P2WPKH to match the sender's scriptPubKey type.
@@ -413,7 +413,7 @@ Here is pseudo code of a sender implementation.
The <code>signedPSBT</code> represents a PSBT which has been fully signed, but not yet finalized.
We then prepare <code>originalPSBT</code> from the <code>signedPSBT</code> via the <code>CreateOriginalPSBT</code> function and get back the <code>proposal</code>.
-While we verify the <code>proposal</code>, we also import into it informations about our own inputs and outputs from the <code>signedPSBT</code>.
+While we verify the <code>proposal</code>, we also import into it information about our own inputs and outputs from the <code>signedPSBT</code>.
At the end of this <code>RequestPayjoin</code>, the proposal is verified and ready to be signed.
We logged the different PSBT involved, and show the result in our [[#test-vectors|test vectors]].
@@ -557,7 +557,7 @@ public async Task<PSBT> RequestPayjoin(
if (output.OriginalTxOut == feeOutput)
{
var actualContribution = feeOutput.Value - proposedPSBTOutput.Value;
- // The amount that was substracted from the output's value is less than or equal to maxadditionalfeecontribution
+ // The amount that was subtracted from the output's value is less than or equal to maxadditionalfeecontribution
if (actualContribution > optionalParameters.MaxAdditionalFeeContribution)
throw new PayjoinSenderException("The actual contribution is more than maxadditionalfeecontribution");
// Make sure the actual contribution is only paying fee
@@ -642,7 +642,7 @@ A successful exchange with:
{| class="wikitable"
!InputScriptType
-!Orginal PSBT Fee rate
+!Original PSBT Fee rate
!maxadditionalfeecontribution
!additionalfeeoutputindex
|-
diff --git a/bip-0080.mediawiki b/bip-0080.mediawiki
index 0cade19..f367c71 100644
--- a/bip-0080.mediawiki
+++ b/bip-0080.mediawiki
@@ -35,7 +35,7 @@ Each level has a special meaning, described in the chapters below.
===Purpose===
-Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "80" with the most signifigant bit set to indicate hardened derivation (0x80000050). It indicates that the subtree of this node is used according to this specification.
+Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "80" with the most significant bit set to indicate hardened derivation (0x80000050). It indicates that the subtree of this node is used according to this specification.
Hardened derivation is used at this level.
diff --git a/bip-0081.mediawiki b/bip-0081.mediawiki
index 96ac8d1..923917c 100644
--- a/bip-0081.mediawiki
+++ b/bip-0081.mediawiki
@@ -35,7 +35,7 @@ Each level has a special meaning, described in the chapters below.
===Purpose===
-Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "81" with the most signifigant bit set to indicate hardened derivation (0x80000051). It indicates that the subtree of this node is used according to this specification.
+Purpose is a constant set following the BIP43 recommendation to: the ASCII value of "81" with the most significant bit set to indicate hardened derivation (0x80000051). It indicates that the subtree of this node is used according to this specification.
Hardened derivation is used at this level.
diff --git a/bip-0083.mediawiki b/bip-0083.mediawiki
index d7bbe8e..c669001 100644
--- a/bip-0083.mediawiki
+++ b/bip-0083.mediawiki
@@ -53,7 +53,7 @@ p //' n instead of p / 0' / n
Rather than specifying upfront which path is to be used for a specific purpose (i.e. external invoicing vs. internal change), different applications can specify arbitrary parent nodes and derivation paths. This allows for nesting of sublevels to arbitrary depth with application-specified semantics. Rather than trying to specify use cases upfront, we leave the design completely open-ended. Different applications can exchange these mappings for interoperability. Eventually, if certain mappings become popular, application user interfaces can provide convenient shortcuts or use them as defaults.
-Note that BIP32 suggests reserving child 0 for the derivation of signing keys rather than sublevels. It is not really necessary to reserve signing key parents, however, as each key's parent's path can be explicitly stated. But unless we reserve a child for sublevel derivation, we lose the ability to nest deeper levels into the hierarchy. While we could reserve any arbitrary index for nesting sublevels, reserving child 0 seems simplest to implement, leaving all indices > 0 for contiguously indexed signing keys. We could also use MAX_INDEX (2<sup>31</sup> - 1) for this purpose. However, we believe doing so introduces more ideosyncracies into the semantics and will present a problem if we ever decide to extend the scheme to use indices larger than 31 bits.
+Note that BIP32 suggests reserving child 0 for the derivation of signing keys rather than sublevels. It is not really necessary to reserve signing key parents, however, as each key's parent's path can be explicitly stated. But unless we reserve a child for sublevel derivation, we lose the ability to nest deeper levels into the hierarchy. While we could reserve any arbitrary index for nesting sublevels, reserving child 0 seems simplest to implement, leaving all indices > 0 for contiguously indexed signing keys. We could also use MAX_INDEX (2<sup>31</sup> - 1) for this purpose. However, we believe doing so introduces more idiosyncrasies into the semantics and will present a problem if we ever decide to extend the scheme to use indices larger than 31 bits.
==Use Cases==
diff --git a/bip-0084.mediawiki b/bip-0084.mediawiki
index 7f20217..e1e458c 100644
--- a/bip-0084.mediawiki
+++ b/bip-0084.mediawiki
@@ -6,7 +6,7 @@
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0084
Status: Final
- Type: Informational
+ Type: Standards Track
Created: 2017-12-28
License: CC0-1.0
</pre>
diff --git a/bip-0085.mediawiki b/bip-0085.mediawiki
index 0627755..d5557fb 100644
--- a/bip-0085.mediawiki
+++ b/bip-0085.mediawiki
@@ -364,7 +364,7 @@ The resulting RSA key can be used to create a GPG key where the creation date MU
Note on GPG key capabilities on smartcard/hardware devices:
-GPG capable smart-cards SHOULD be be loaded as follows: The encryption slot SHOULD be loaded with the ENCRYPTION capable key; the authentication slot SHOULD be loaded with the AUTHENTICATION capable key. The signature capable slot SHOULD be loaded with the SIGNATURE capable key.
+GPG capable smart-cards SHOULD be loaded as follows: The encryption slot SHOULD be loaded with the ENCRYPTION capable key; the authentication slot SHOULD be loaded with the AUTHENTICATION capable key. The signature capable slot SHOULD be loaded with the SIGNATURE capable key.
However, depending on available slots on the smart-card, and preferred policy, the CERTIFY capable key MAY be flagged with CERTIFY and SIGNATURE capabilities and loaded into the SIGNATURE capable slot (for example where the smart-card has only three slots and the CERTIFY capability is required on the same card). In this case, the SIGNATURE capable sub-key would be disregarded because the CERTIFY capable key serves a dual purpose.
diff --git a/bip-0086.mediawiki b/bip-0086.mediawiki
index f724884..529f094 100644
--- a/bip-0086.mediawiki
+++ b/bip-0086.mediawiki
@@ -2,7 +2,7 @@
BIP: 86
Layer: Applications
Title: Key Derivation for Single Key P2TR Outputs
- Author: Andrew Chow <andrew@achow101.com>
+ Author: Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0086
Status: Draft
diff --git a/bip-0087.mediawiki b/bip-0087.mediawiki
index d270027..308e852 100644
--- a/bip-0087.mediawiki
+++ b/bip-0087.mediawiki
@@ -40,7 +40,7 @@ A modern standardization is needed for multisig derivation paths. There are som
m / purpose' / cosigner_index / change / address_index
</pre>
-BIP45 unecessarily demands a single script type (here, P2SH). In addition, BIP45 sets <code>cosigner_index</code> in order to sort the <code>purpose'</code> public keys of each cosigner. This too is redundant, as descriptors can set the order of the public keys with <code>multi</code> or have them sorted lexicographically (as described in [https://github.com/bitcoin/bips/blob/master/bip-0067.mediawiki BIP67]) with <code>sortedmulti</code>. Sorting public keys between cosigners in order to create the full derivation path, prior to sending the key record to the coordinator to create the descriptor, merely adds additional unnecessary communication rounds.
+BIP45 unnecessarily demands a single script type (here, P2SH). In addition, BIP45 sets <code>cosigner_index</code> in order to sort the <code>purpose'</code> public keys of each cosigner. This too is redundant, as descriptors can set the order of the public keys with <code>multi</code> or have them sorted lexicographically (as described in [https://github.com/bitcoin/bips/blob/master/bip-0067.mediawiki BIP67]) with <code>sortedmulti</code>. Sorting public keys between cosigners in order to create the full derivation path, prior to sending the key record to the coordinator to create the descriptor, merely adds additional unnecessary communication rounds.
The second multisignature "standard" in use is m/48', which specifies:
diff --git a/bip-0088.mediawiki b/bip-0088.mediawiki
index 936f2ca..49be7db 100644
--- a/bip-0088.mediawiki
+++ b/bip-0088.mediawiki
@@ -89,7 +89,7 @@ installation of malicious or incorrect profiles, though.
==Specification==
-The format for the template was choosen to make it easy to read, convenient and visually unambigous.
+The format for the template was chosen to make it easy to read, convenient and visually unambigous.
Template starts with optional prefix <code>m/</code>, and then one or more sections delimited by the slash character (<code>/</code>).
@@ -127,13 +127,13 @@ Constraints:
# To avoid ambiguity, an index range that matches a single value MUST be specified as Unit range.
# To avoid ambiguity, an index range <code>0-2147483647</code> is not allowed, and MUST be specified as Wildcard index template instead
# For Non-unit range, range_end MUST be larger than range_start.
-# If there is more than one index range within the Ranged index template, range_start of the second and any subsequent range MUST be larger than the range_end of the preceeding range.
+# If there is more than one index range within the Ranged index template, range_start of the second and any subsequent range MUST be larger than the range_end of the preceding range.
# To avoid ambiguity, all representations of integer values larger than 0 MUST NOT start with character <code>0</code> (no leading zeroes allowed).
# If hardened marker appears within any section in the path template, all preceding sections MUST also specify hardened matching.
# To avoid ambiguity, if a hardened marker appears within any section in the path template, all preceding sections MUST also use the same hardened marker (either <code>h</code> or <code>'</code>).
# To avoid ambiguity, trailing slashes (for example, <code>1/2/</code>) and duplicate slashes (for example, <code>0//1</code>) MUST NOT appear in the template.
-It may be desireable to have fully unambiguous encoding, where for each valid path template string, there is no other valid template string that matches the exact same set of paths. This would enable someone to compare templates for equality through a simple string equality check, without any parsing.
+It may be desirable to have fully unambiguous encoding, where for each valid path template string, there is no other valid template string that matches the exact same set of paths. This would enable someone to compare templates for equality through a simple string equality check, without any parsing.
To achieve this, two extra rules are needed:
diff --git a/bip-0099.mediawiki b/bip-0099.mediawiki
index 8882e00..156eec0 100644
--- a/bip-0099.mediawiki
+++ b/bip-0099.mediawiki
@@ -56,7 +56,7 @@ development, diversity, etc) to fork the Bitcoin Core software and it's good
that there's many alternative implementations of the protocol (forks
of Bitcoin Core or written from scratch).
-But sometimes a bug in the reimplementaion of the consensus
+But sometimes a bug in the reimplementation of the consensus
validation rules can prevent users of alternative implementation from
following the longest (most work) valid chain. This can result in
those users losing coins or being defrauded, making reimplementations
diff --git a/bip-0109.mediawiki b/bip-0109.mediawiki
index 69b265b..4822d4a 100644
--- a/bip-0109.mediawiki
+++ b/bip-0109.mediawiki
@@ -37,7 +37,7 @@ In particular:
* The coinbase scriptSig is not counted
* Signature operations in un-executed branches of a Script are not counted
-* OP_CHECKMULTISIG evaluations are counted accurately; if the signature for a 1-of-20 OP_CHECKMULTISIG is satisified by the public key nearest the top of the execution stack, it is counted as one signature operation. If it is satisfied by the public key nearest the bottom of the execution stack, it is counted as twenty signature operations.
+* OP_CHECKMULTISIG evaluations are counted accurately; if the signature for a 1-of-20 OP_CHECKMULTISIG is satisfied by the public key nearest the top of the execution stack, it is counted as one signature operation. If it is satisfied by the public key nearest the bottom of the execution stack, it is counted as twenty signature operations.
* Signature operations involving invalidly encoded signatures or public keys are not counted towards the limit
=== Add a new limit of 1,300,000,000 bytes hashed to compute transaction signatures per block ===
diff --git a/bip-0112.mediawiki b/bip-0112.mediawiki
index 63a7797..d6ed546 100644
--- a/bip-0112.mediawiki
+++ b/bip-0112.mediawiki
@@ -36,7 +36,7 @@ When executed, if any of the following conditions are true, the script interpret
Otherwise, script execution will continue as if a NOP had been executed.
-BIP 68 prevents a non-final transaction from being selected for inclusion in a block until the corresponding input has reached the specified age, as measured in block-height or block-time. By comparing the argument to CHECKSEQUENCEVERIFY against the nSequence field, we indirectly verify a desired minimum age of the
+BIP 68 prevents a non-final transaction from being selected for inclusion in a block until the corresponding input has reached the specified age, as measured in block-height or block-time. By comparing the argument to CHECKSEQUENCEVERIFY against the nSequence field, we indirectly verify a desired minimum age of
the output being spent; until that relative age has been reached any script execution pathway including the CHECKSEQUENCEVERIFY will fail to validate, causing the transaction not to be selected for inclusion in a block.
diff --git a/bip-0119.mediawiki b/bip-0119.mediawiki
index acbe97c..d661f4c 100644
--- a/bip-0119.mediawiki
+++ b/bip-0119.mediawiki
@@ -89,7 +89,7 @@ def execute_bip_119(self):
self.context.precomputed_ctv_data = self.context.tx.get_default_check_template_precomputed_data()
# If the hashes do not match, return error
- if stack[-1] != self.context.tx.get_default_check_template_hash(self.context.nIn, self.context.precomputed_ctv_data)
+ if stack[-1] != self.context.tx.get_default_check_template_hash(self.context.nIn, self.context.precomputed_ctv_data):
return self.errors_with(errors.script_err_template_mismatch)
return self.return_as_nop()
diff --git a/bip-0126.mediawiki b/bip-0126.mediawiki
index f498b1c..2c04eb4 100644
--- a/bip-0126.mediawiki
+++ b/bip-0126.mediawiki
@@ -14,7 +14,7 @@
When a Bitcoin transaction contains inputs that reference previous transaction outputs sent to different Bitcoin addresses, personally identifiable information of the user will leak into the blockchain in an uncontrolled manner. While undesirable, these transactions are frequently unavoidable due to the natural fragmentation of wallet balances over time.
-This document proposes a set of best practice guidelines which minimize the uncontrolled disclosure of personally identifiable information by defining standard forms for transactions containing heterogenous input scripts.
+This document proposes a set of best practice guidelines which minimize the uncontrolled disclosure of personally identifiable information by defining standard forms for transactions containing heterogeneous input scripts.
==Copyright==
@@ -23,8 +23,8 @@ This BIP is in the public domain.
==Definitions==
* '''Heterogenous input script transaction (HIT)''': A transaction containing multiple inputs where the scripts of the previous transaction outputs being consumed are not identical (e.g. a transaction spending outputs which were sent to more than one Bitcoin address)
-* '''Unavoidable heterogenous input script transaction''': A HIT created as a result of a user’s desire to create a new output with a value larger than the value of his wallet's largest existing unspent output
-* '''Intentional heterogenous input script transaction''': A HIT created as part of a user protection protocol for reducing uncontrolled disclosure of personally-identifying information (PII)
+* '''Unavoidable heterogeneous input script transaction''': A HIT created as a result of a user’s desire to create a new output with a value larger than the value of his wallet's largest existing unspent output
+* '''Intentional heterogeneous input script transaction''': A HIT created as part of a user protection protocol for reducing uncontrolled disclosure of personally-identifying information (PII)
Throughout this procedure, when input scripts are evaluated for uniqueness, "input script" should be interpreted to mean, "the script of the previous output referenced by an input to a transaction".
@@ -33,10 +33,10 @@ Throughout this procedure, when input scripts are evaluated for uniqueness, "inp
The recommendations in this document are designed to accomplish three goals:
# Maximise the effectiveness of user-protecting protocols: Users may find that protection protocols are counterproductive if such transactions have a distinctive fingerprint which renders them ineffective.
-# Minimise the adverse consequences of unavoidable heterogenous input transactions: If unavoidable HITs are indistinguishable from intentional HITs, a user creating an unavoidable HIT benefits from ambiguity with respect to graph analysis.
+# Minimise the adverse consequences of unavoidable heterogeneous input transactions: If unavoidable HITs are indistinguishable from intentional HITs, a user creating an unavoidable HIT benefits from ambiguity with respect to graph analysis.
# Limiting the effect on UTXO set growth: To date, non-standardized intentional HITs tend to increase the network's UTXO set with each transaction; this standard attempts to minimize this effect by standardizing unavoidable and intentional HITs to limit UTXO set growth.
-In order to achieve these goals, this specification proposes a set of best practices for heterogenous input script transaction creation. These practices accommodate all applicable requirements of both intentional and unavoidable HITs while maximising the effectiveness of both in terms of preventing uncontrolled disclosure of PII.
+In order to achieve these goals, this specification proposes a set of best practices for heterogeneous input script transaction creation. These practices accommodate all applicable requirements of both intentional and unavoidable HITs while maximising the effectiveness of both in terms of preventing uncontrolled disclosure of PII.
In order to achieve this, two forms of HIT are proposed: Standard form and alternate form.
@@ -44,13 +44,13 @@ In order to achieve this, two forms of HIT are proposed: Standard form and alter
Applications which wish to comply both with this procedure and BIP69 should apply this procedure prior to applying BIP69.
-==Standard form heterogenous input script transaction==
+==Standard form heterogeneous input script transaction==
===Rules===
A HIT is Standard form if it adheres to all of the following rules:
-# The number of unique output scripts must be equal to the number of unique inputs scripts (irrespective of the number of inputs and outputs).
+# The number of unique output scripts must be equal to the number of unique input scripts (irrespective of the number of inputs and outputs).
# All output scripts must be unique.
# At least one pair of outputs must be of equal value.
# The largest output in the transaction is a member of a set containing at least two identically-sized outputs.
@@ -63,7 +63,7 @@ The requirement that all output scripts are unique prevents address reuse. Restr
The requirement for at least one pair of outputs in an intentional HIT to be of equal value results in optimal behavior, and causes intentional HITs to resemble unavoidable HITs.
-==Alternate form heterogenous input script transactions==
+==Alternate form heterogeneous input script transactions==
The formation of a standard form HIT is not possible in the following cases:
@@ -88,7 +88,7 @@ Clients which create intentional HITs must have the capability to form alternate
An HIT formed via the preceding procedure will adhere to the following conditions:
-# The number of unique inputs scripts must exceed the number of output scripts.
+# The number of unique input scripts must exceed the number of output scripts.
# All output scripts must be unique.
# At least one pair of outputs must be of equal value.
## "Standard outputs" refers to the set of outputs with equal value
@@ -100,7 +100,7 @@ An HIT formed via the preceding procedure will adhere to the following condition
## The sum of the inputs in the set minus the value of the change output is equal to the standard value with a tolerance equal to the transaction fee.
## Change outputs with a value of zero (virtual change outputs) are permitted. The are defined for the purpose of testing whether or not a HIT adheres to this specification but are not present in the version of the transaction which is broadcast to the network.
-==Non-compliant heterogenous input script transactions==
+==Non-compliant heterogeneous input script transactions==
If a user wishes to create an output that is larger than half the total size of their spendable outputs, or if their inputs are not distributed in a manner in which the alternate form procedure can be completed, then the user can not create a transaction which is compliant with this procedure.
diff --git a/bip-0127.mediawiki b/bip-0127.mediawiki
index 44a90d7..87071d8 100644
--- a/bip-0127.mediawiki
+++ b/bip-0127.mediawiki
@@ -124,7 +124,7 @@ message FinalProof {
// Bitcoin transaction.
bytes proof_tx = 1;
- // The metadata of the ouputs used in the proof transaction.
+ // The metadata of the outputs used in the proof transaction.
repeated OutputMeta output_metadata = 2;
}
diff --git a/bip-0129.mediawiki b/bip-0129.mediawiki
index 8719fe4..b5dfae8 100644
--- a/bip-0129.mediawiki
+++ b/bip-0129.mediawiki
@@ -47,11 +47,14 @@ Concerns #4 and #5 should be handled by Signers and are out of scope of this pro
==Specification==
===Prerequisites===
-This proposal assumes the parties in the multisig support [https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki BIP-0032], [https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki BIP-0322], [https://github.com/bitcoin/bitcoin/blob/master/doc/descriptors.md the descriptor language] and [https://tools.ietf.org/html/rfc3686 AES encryption].
+This proposal assumes the parties in the multisig support [https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki BIP-0032], [https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki BIP-0322], [https://github.com/bitcoin/bips/blob/master/bip-0380.mediawiki BIP-0380 Output Script Descriptors] ([https://github.com/bitcoin/bips/blob/master/bip-0381.mediawiki BIP-0381],[https://github.com/bitcoin/bips/blob/master/bip-0382.mediawiki BIP-0382],[https://github.com/bitcoin/bips/blob/master/bip-0383.mediawiki BIP-0383]) and [https://tools.ietf.org/html/rfc3686 AES encryption].
===File Extensions===
All descriptor and key records should have a <tt>.bsms</tt> file extension. Encrypted data should have a <tt>.dat</tt> extension.
+===Newline===
+This specification uses line feed (LF) control character <tt>\n</tt>.
+
===Roles===
====Coordinator====
@@ -141,7 +144,7 @@ Whereas:
* Password = "No SPOF"
* Salt = <tt>TOKEN</tt>
* c = 2048
-* dkLen = 256
+* dkLen = 256 bits (32 bytes)
* DKey = Derived <tt>ENCRYPTION_KEY</tt>
====Encryption Scheme====
@@ -452,7 +455,7 @@ sh(wsh(multi(2,[793cc70b/48'/0'/0'/1']xpub6ErVmcYYHmavsMgxEcTZyzN5sqth1ZyRpFNJC2
==Acknowledgement==
-Special thanks to Pavol Rusnak, Dmitry Petukhov, Christopher Allen, Craig Raw, Robert Spigler, Gregory Sanders, Ta Tat Tai, Michael Flaxman, Pieter Wuille, Salvatore Ingala, Andrew Chow and others for their feedback on the specification.
+Special thanks to Pavol Rusnak, Dmitry Petukhov, Christopher Allen, Craig Raw, Robert Spigler, Gregory Sanders, Ta Tat Tai, Michael Flaxman, Pieter Wuille, Salvatore Ingala, Ava Chow and others for their feedback on the specification.
==References==
diff --git a/bip-0132.mediawiki b/bip-0132.mediawiki
index e7aed29..173c919 100644
--- a/bip-0132.mediawiki
+++ b/bip-0132.mediawiki
@@ -48,7 +48,7 @@ The author doesn't believe this is a problem because a BIP cannot be forced on c
== Process ==
-* '''Submit for Comments.''' The first BIP champion named in the proposal can call a &quot;submit for comments&quot; at any time by posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Dev Mailing List] mailling with the BIP number and a statement that the champion intends to immediately submit the BIP for comments.
+* '''Submit for Comments.''' The first BIP champion named in the proposal can call a &quot;submit for comments&quot; at any time by posting to the [https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev Dev Mailing List] mailing with the BIP number and a statement that the champion intends to immediately submit the BIP for comments.
** The BIP must have been assigned BIP-number (i.e. been approved by the BIP editor) to be submitted for comments.
* '''Comments.'''
** After a BIP has been submitted for comments, a two-week waiting period begins in which the community should transition from making suggestions about a proposal to publishing their opinions or concerns on the proposal.
diff --git a/bip-0133.mediawiki b/bip-0133.mediawiki
index c109f12..b37370d 100644
--- a/bip-0133.mediawiki
+++ b/bip-0133.mediawiki
@@ -5,7 +5,7 @@
Author: Alex Morcos <morcos@chaincode.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0133
- Status: Draft
+ Status: Final
Type: Standards Track
Created: 2016-02-13
License: PD
diff --git a/bip-0137.mediawiki b/bip-0137.mediawiki
index 43addba..575440b 100644
--- a/bip-0137.mediawiki
+++ b/bip-0137.mediawiki
@@ -116,7 +116,7 @@ Since this format includes P2PKH keys, it is backwards compatible, but keep in m
==Implications==
-Message signing is an important use case and potentially underused due to the fact that, up until now, there has not been a formal specification for how wallets can sign messages using Bitcoin private keys. Bitcoin wallets should be interoperable and use the same conventions for determing a signature's validity. This BIP can also be updated as new signature formats emerge.
+Message signing is an important use case and potentially underused due to the fact that, up until now, there has not been a formal specification for how wallets can sign messages using Bitcoin private keys. Bitcoin wallets should be interoperable and use the same conventions for determining a signature's validity. This BIP can also be updated as new signature formats emerge.
==Acknowledgements==
diff --git a/bip-0141.mediawiki b/bip-0141.mediawiki
index efdd9c9..117ca59 100644
--- a/bip-0141.mediawiki
+++ b/bip-0141.mediawiki
@@ -83,19 +83,23 @@ If all transactions in a block do not have witness data, the commitment is optio
=== Witness program ===
-A <code>scriptPubKey</code> (or <code>redeemScript</code> as defined in BIP16/P2SH) that consists of a 1-byte push opcode (for 0 to 16) followed by a data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program".
+A <code>scriptPubKey</code> (or <code>redeemScript</code> as defined in BIP16/P2SH) that consists of a 1-byte push opcode (one of <code>OP_0,OP_1,OP_2,...,OP_16</code>) followed by a direct data push between 2 and 40 bytes gets a new special meaning. The value of the first push is called the "version byte". The following byte vector pushed is called the "witness program".
+In more detail, this means a <code>scriptPubKey</code> or <code>redeemScript</code> which consists of (in order):
+* First, byte 0x00 (<code>OP_0</code>) or any byte between 0x51 (<code>OP_1</code>) and 0x60 (<code>OP_16</code>) inclusive (the version byte).
+* Then, a byte ''L'' between 0x02 (push of 2 bytes) and 0x28 (push of 40 bytes) inclusive.
+* Finally, ''L'' arbitrary bytes (the witness program).
There are two cases in which witness validation logic are triggered. Each case determines the location of the witness version byte and program, as well as the form of the scriptSig:
# Triggered by a <code>scriptPubKey</code> that is exactly a push of a version byte, plus a push of a witness program. The scriptSig must be exactly empty or validation fails. (''"native witness program"'')
# Triggered when a <code>scriptPubKey</code> is a P2SH script, and the BIP16 <code>redeemScript</code> pushed in the <code>scriptSig</code> is exactly a push of a version byte plus a push of a witness program. The <code>scriptSig</code> must be exactly a push of the BIP16 <code>redeemScript</code> or validation fails. (''"P2SH witness program"'')
-If the version byte is 0, and the witness program is 20 bytes:
+If the version byte is 0, and the witness program is 20 bytes (''L = 20''):
* It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program.
* The witness must consist of exactly 2 items (≤ 520 bytes each). The first one a signature, and the second one a public key.
* The HASH160 of the public key must match the 20-byte witness program.
* After normal script evaluation, the signature is verified against the public key with CHECKSIG operation. The verification must result in a single TRUE on the stack.
-If the version byte is 0, and the witness program is 32 bytes:
+If the version byte is 0, and the witness program is 32 bytes (''L = 32''):
* It is interpreted as a pay-to-witness-script-hash (P2WSH) program.
* The witness must consist of an input stack to feed to the script, followed by a serialized script (<code>witnessScript</code>).
* The <code>witnessScript</code> (≤ 10,000 bytes) is popped off the initial witness stack. SHA256 of the <code>witnessScript</code> must match the 32-byte witness program.
@@ -276,7 +280,7 @@ These commitments could be included in the extensible commitment structure throu
Since a version byte is pushed before a witness program, and programs with unknown versions are always considered as anyone-can-spend script, it is possible to introduce any new script system with a soft fork. The witness as a structure is not restricted by any existing script semantics and constraints, the 520-byte push limit in particular, and therefore allows arbitrarily large scripts and signatures.
-Examples of new script system include Schnorr signatures which reduce the size of multisig transactions dramatically, Lamport signature which is quantum computing resistance, and Merklized abstract syntax trees which allow very compact witness for conditional scripts with extreme complexity.
+Examples of new script systems include Schnorr signatures, which reduce the size of multisig transactions dramatically; Lamport signatures, which are quantum computing resistant; and Merklized abstract syntax trees, which allow very compact witnesses for conditional scripts with extreme complexity.
=== Per-input lock-time and relative-lock-time ===
@@ -303,7 +307,7 @@ As a soft fork, older software will continue to operate without modification. N
This BIP will be deployed by "version bits" BIP9 with the name "segwit" and using bit 1.
-For Bitcoin mainnet, the BIP9 starttime will be midnight 15 november 2016 UTC (Epoch timestamp 1479168000) and BIP9 timeout will be midnight 15 november 2017 UTC (Epoch timestamp 1510704000).
+For Bitcoin mainnet, the BIP9 starttime will be midnight 15 November 2016 UTC (Epoch timestamp 1479168000) and BIP9 timeout will be midnight 15 November 2017 UTC (Epoch timestamp 1510704000).
For Bitcoin testnet, the BIP9 starttime will be midnight 1 May 2016 UTC (Epoch timestamp 1462060800) and BIP9 timeout will be midnight 1 May 2017 UTC (Epoch timestamp 1493596800).
diff --git a/bip-0143.mediawiki b/bip-0143.mediawiki
index 81763a0..9935eaa 100644
--- a/bip-0143.mediawiki
+++ b/bip-0143.mediawiki
@@ -39,12 +39,12 @@ A new transaction digest algorithm is defined, but only applicable to sigops in
9. nLocktime of the transaction (4-byte little endian)
10. sighash type of the signature (4-byte little endian)
-Semantics of the original sighash types remain unchanged, except the followings:
+Semantics of the original sighash types remain unchanged, except the following:
# The way of serialization is changed;
# All sighash types commit to the amount being spent by the signed input;
# <code>FindAndDelete</code> of the signature is not applied to the <code>scriptCode</code>;
# <code>OP_CODESEPARATOR</code>(s) after the last executed <code>OP_CODESEPARATOR</code> are not removed from the <code>scriptCode</code> (the last executed <code>OP_CODESEPARATOR</code> and any script before it are always removed);
-# <code>SINGLE</code> does not commit to the input index. When <code>ANYONECANPAY</code> is not set, the semantics are unchanged since <code>hashPrevouts</code> and <code>outpoint</code> together implictly commit to the input index. When <code>SINGLE</code> is used with <code>ANYONECANPAY</code>, omission of the index commitment allows permutation of the input-output pairs, as long as each pair is located at an equivalent index.
+# <code>SINGLE</code> does not commit to the input index. When <code>ANYONECANPAY</code> is not set, the semantics are unchanged since <code>hashPrevouts</code> and <code>outpoint</code> together implicitly commit to the input index. When <code>SINGLE</code> is used with <code>ANYONECANPAY</code>, omission of the index commitment allows permutation of the input-output pairs, as long as each pair is located at an equivalent index.
The items 1, 4, 7, 9, 10 have the same meaning as the original algorithm. <ref name=wiki></ref>
@@ -187,7 +187,7 @@ To ensure consistency in consensus-critical behaviour, developers should test th
nHashType: 01000000
sigHash: c37af31116d1b27caf68aae9e3ac82f1477929014d5b917657d0eb49478cb670
- signature: 304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee
+ signature: 304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee01
The serialized signed transaction is: 01000000000102fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000494830450221008b9d1dc26ba6a9cb62127b02742fa9d754cd3bebf337f7a55d114c8e5cdd30be022040529b194ba3f9281a99f2b1c0a19c0489bc22ede944ccf4ecbab4cc618ef3ed01eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac000247304402203609e17b84f6a7d30c80bfa610b5b4542f32a8a0d5447a12fb1366d7f01cc44a0220573a954c4518331561406f90300e8f3358f51928d43c212a8caed02de67eebee0121025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee635711000000
@@ -551,7 +551,7 @@ These examples show that <code>FindAndDelete</code> for the signature is not app
nLockTime: 00000000
The input comes from a P2WSH witness program:
- scriptPubKey : 00209e1be07558ea5cc8e02ed1d80c0911048afad949affa36d5c3951e3159dbea19, value: 200000
+ scriptPubKey : 00209e1be07558ea5cc8e02ed1d80c0911048afad949affa36d5c3951e3159dbea19, value: 0.00200000
redeemScript : OP_CHECKSIGVERIFY <0x30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01>
ad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01
diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki
index 793c244..8bc1197 100644
--- a/bip-0151.mediawiki
+++ b/bip-0151.mediawiki
@@ -85,7 +85,7 @@ a 64 bit nonce and a 64 bit counter into 64 bytes of output. This output is used
Poly1305, also by Daniel Bernstein [4], is a one-time Carter-Wegman MAC that computes a 128 bit integrity tag given a message and a single-use
256 bit secret key.
-The chacha20-poly1305@openssh.com specified and defined by openssh [5] combines these two primitives into an authenticated encryption mode. The construction used is based on that proposed for TLS by Adam Langley [6], but differs in the layout of data passed to the MAC and in the addition of encyption of the packet lengths.
+The chacha20-poly1305@openssh.com specified and defined by openssh [5] combines these two primitives into an authenticated encryption mode. The construction used is based on that proposed for TLS by Adam Langley [6], but differs in the layout of data passed to the MAC and in the addition of encryption of the packet lengths.
<code>K_1</code> must be used to only encrypt the payload size of the encrypted message to avoid leaking information by revealing the message size.
diff --git a/bip-0152.mediawiki b/bip-0152.mediawiki
index 8200714..fad1746 100644
--- a/bip-0152.mediawiki
+++ b/bip-0152.mediawiki
@@ -211,7 +211,7 @@ There are several design goals for the Short ID calculation:
SipHash is a secure, fast, and simple 64-bit MAC designed for network traffic authentication and collision-resistant hash tables. We truncate the output from SipHash-2-4 to 48 bits (see next section) in order to minimize space. The resulting 48-bit hash is certainly not large enough to avoid intentionally created individual collisons, but by using the block hash as a key to SipHash, an attacker cannot predict what keys will be used once their transactions are actually included in a relayed block. We mix in a per-connection 64-bit nonce to obtain independent short IDs on every connection, so that even block creators cannot control where collisions occur, and random collisions only ever affect a small number of connections at any given time. The mixing is done using SHA256(block_header || nonce), which is slow compared to SipHash, but only done once per block. It also adds the ability for nodes to choose the nonce in a better than random way to minimize collisions, though that is not necessary for correct behaviour. Conversely, nodes can also abuse this ability to increase their ability to introduce collisions in the blocks they relay themselves. However, they can already cause more problems by simply refusing to relay blocks. That is inevitable, and this design only seeks to prevent network-wide misbehavior.
-====Random collision probabilty====
+====Random collision probability====
Thanks to the block-header-based SipHash keys, we can assume that the only collisions on links between honest nodes are random ones.
diff --git a/bip-0155.mediawiki b/bip-0155.mediawiki
index 3e7b0d8..0ec6801 100644
--- a/bip-0155.mediawiki
+++ b/bip-0155.mediawiki
@@ -117,6 +117,11 @@ The list of reserved network IDs is as follows:
| <code>CJDNS</code>
| 16
| Cjdns overlay network address
+|-
+| <code>0x07</code>
+| <code>YGGDRASIL</code>
+| 16
+| Yggdrasil overlay network address
|}
Clients are RECOMMENDED to gossip addresses from all known networks even if they are currently not connected to some of them. That could help multi-homed nodes and make it more difficult for an observer to tell which networks a node is connected to.
@@ -184,6 +189,10 @@ I2P addresses MUST be sent with the <code>I2P</code> network ID, with the decode
Cjdns addresses are simply IPv6 addresses in the <code>fc00::/8</code> range<ref>[https://github.com/cjdelisle/cjdns/blob/6e46fa41f5647d6b414612d9d63626b0b952746b/doc/Whitepaper.md#pulling-it-all-together Cjdns whitepaper: Pulling It All Together]</ref>. They MUST be sent with the <code>CJDNS</code> network ID.
+==Appendix E: Yggdrasil address encoding==
+
+Yggdrasil addresses are simply IPv6 addresses in the <code>0200::/7</code> range<ref>[https://yggdrasil-network.github.io/faq.html#will-yggdrasil-conflict-with-my-network-routing Yggdrasil FAQ]</ref>. They MUST be sent with the <code>YGGDRASIL</code> network ID.
+
==References==
<references/>
diff --git a/bip-0158.mediawiki b/bip-0158.mediawiki
index 8887d32..e69de4a 100644
--- a/bip-0158.mediawiki
+++ b/bip-0158.mediawiki
@@ -39,9 +39,6 @@ that is designed to reduce the filter size for regular wallets.
''CompactSize'' is a compact encoding of unsigned integers used in the Bitcoin
P2P protocol.
-''Data pushes'' are byte vectors pushed to the stack according to the rules of
-Bitcoin script.
-
''Bit streams'' are readable and writable streams of individual bits. The
following functions are used in the pseudocode in this document:
* <code>new_bit_stream</code> instantiates a new writable bit stream
@@ -312,6 +309,8 @@ complete serialization of a filter is:
* <code>N</code>, encoded as a <code>CompactSize</code>
* The bytes of the compressed filter itself
+A zero element filter MUST be written as one byte containing zeroes.
+
==== Signaling ====
This BIP allocates a new service bit:
diff --git a/bip-0158/gentestvectors.go b/bip-0158/gentestvectors.go
index 3435eb3..e51b984 100644
--- a/bip-0158/gentestvectors.go
+++ b/bip-0158/gentestvectors.go
@@ -207,7 +207,7 @@ func main() {
prevOutputScripts, err := fetchPrevOutputScripts(client, block)
if err != nil {
- fmt.Println("Couldn't fetch prev output scipts: ", err)
+ fmt.Println("Couldn't fetch prev output scripts: ", err)
return
}
diff --git a/bip-0173.mediawiki b/bip-0173.mediawiki
index 1fdd8be..7087fff 100644
--- a/bip-0173.mediawiki
+++ b/bip-0173.mediawiki
@@ -11,6 +11,7 @@
Created: 2017-03-20
License: BSD-2-Clause
Replaces: 142
+ Superseded-By: 350
</pre>
==Introduction==
@@ -403,3 +404,12 @@ separator).
This document is inspired by the [https://rusty.ozlabs.org/?p=578 address proposal] by Rusty Russell, the
[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2014-February/004402.html base32] proposal by Mark Friedenbach, and had input from Luke Dashjr,
Johnson Lau, Eric Lombrozo, Peter Todd, and various other reviewers.
+
+==Disclosures (added 2024)==
+
+Due to an oversight in the design of bech32, this checksum scheme is not always
+robust against
+[[https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb|the insertion
+and deletion of fewer than 5 consecutive characters]]. Due to this weakness,
+[[bip-0350.mediawiki|BIP-350]] proposes using the scheme described in this BIP
+only for Native Segwit v0 outputs.
diff --git a/bip-0174.mediawiki b/bip-0174.mediawiki
index f4c0807..95a5573 100644
--- a/bip-0174.mediawiki
+++ b/bip-0174.mediawiki
@@ -2,7 +2,7 @@
BIP: 174
Layer: Applications
Title: Partially Signed Bitcoin Transaction Format
- Author: Andrew Chow <achow101@gmail.com>
+ Author: Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0174
Status: Final
@@ -633,7 +633,7 @@ values are valid, then it does not matter which is chosen as either way the tran
===Proprietary Use Type===
For all global, per-input, and per-output maps, the type <tt>0xFC</tt> is reserved for proprietary use.
-The proprietary use type requires keys that follow the type with a compact size unsigned integer representing the length of the string identifer, followed by the string identifier, then a subtype, and finally any key data.
+The proprietary use type requires keys that follow the type with a compact size unsigned integer representing the length of the string identifier, followed by the string identifier, then a subtype, and finally any key data.
The identifier can be any variable length string that software can use to identify whether the particular data in the proprietary type can be used by it.
It can also be the empty string although this is not recommended.
@@ -800,7 +800,7 @@ A MIME type name will be added to this document once one has been registered.
==Extensibility==
The Partially Signed Transaction format can be extended in the future by adding
-new types for key-value pairs. Backwards compatibilty will still be maintained as those new
+new types for key-value pairs. Backwards compatibility will still be maintained as those new
types will be ignored and passed-through by signers which do not know about them.
===Version Numbers===
diff --git a/bip-0174/build.sh b/bip-0174/build.sh
new file mode 100755
index 0000000..2de1e56
--- /dev/null
+++ b/bip-0174/build.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+pdflatex -output-format=pdf coinjoin-workflow.tex && \
+inkscape --with-gui --export-text-to-path \
+ --export-plain-svg=coinjoin-workflow.svg coinjoin-workflow.pdf && \
+pdflatex -output-format=pdf multisig-workflow.tex && \
+inkscape --with-gui --export-text-to-path \
+ --export-plain-svg=multisig-workflow.svg multisig-workflow.pdf && \
+echo '"success"'
diff --git a/bip-0174/coinjoin-workflow.svg b/bip-0174/coinjoin-workflow.svg
index 4c2a041..3b6b952 100644
--- a/bip-0174/coinjoin-workflow.svg
+++ b/bip-0174/coinjoin-workflow.svg
@@ -1,8 +1,54 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="420.819pt" height="118.266pt"
- viewBox="0 0 420.819 118.266" style="background-color:white" version="1.1">
-<defs>
-<g>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="420.819pt"
+ height="122.694pt"
+ viewBox="0 0 420.819 122.694"
+ version="1.2"
+ id="svg1044"
+ sodipodi:docname="coinjoin-workflow.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="640"
+ inkscape:window-height="480"
+ id="namedview1046"
+ showgrid="false"
+ inkscape:zoom="0.50080914"
+ inkscape:cx="280.546"
+ inkscape:cy="81.796"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg1044" />
+<defs id="defs109">
+<g id="g104">
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
@@ -107,7 +153,7 @@
</symbol>
</g>
<clipPath id="clip1">
- <path d="M 19 53 L 128 53 L 128 118.265625 L 19 118.265625 Z M 19 53 "/>
+ <path d="M 19 57 L 128 57 L 128 122.695312 L 19 122.695312 Z M 19 57 "/>
</clipPath>
</defs>
<g id="surface1">
@@ -376,281 +422,1133 @@
<use xlink:href="#glyph0-9" x="387.534513" y="49.823"/>
<use xlink:href="#glyph0-26" x="391.353178" y="49.823"/>
</g>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 112.644531 64.734375 L 34.269531 64.734375 C 32.070312 64.734375 30.285156 66.515625 30.285156 68.71875 L 30.285156 110.5625 C 30.285156 112.761719 32.070312 114.546875 34.269531 114.546875 L 112.644531 114.546875 C 114.84375 114.546875 116.628906 112.761719 116.628906 110.5625 L 116.628906 68.71875 C 116.628906 66.515625 114.84375 64.734375 112.644531 64.734375 Z M 112.644531 64.734375 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 112.644531 69.160156 L 34.269531 69.160156 C 32.070312 69.160156 30.285156 70.945312 30.285156 73.144531 L 30.285156 114.988281 C 30.285156 117.191406 32.070312 118.976562 34.269531 118.976562 L 112.644531 118.976562 C 114.84375 118.976562 116.628906 117.191406 116.628906 114.988281 L 116.628906 73.144531 C 116.628906 70.945312 114.84375 69.160156 112.644531 69.160156 Z M 112.644531 69.160156 "/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
-<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.187531 24.905625 L -39.187469 24.905625 C -41.386687 24.905625 -43.171844 23.124375 -43.171844 20.92125 L -43.171844 -20.9225 C -43.171844 -23.121719 -41.386687 -24.906875 -39.187469 -24.906875 L 39.187531 -24.906875 C 41.38675 -24.906875 43.171906 -23.121719 43.171906 -20.9225 L 43.171906 20.92125 C 43.171906 23.124375 41.38675 24.905625 39.187531 24.905625 Z M 39.187531 24.905625 " transform="matrix(1,0,0,-1,73.457,89.64)"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="37.094" y="75.167"/>
- <use xlink:href="#glyph0-2" x="43.736065" y="75.167"/>
- <use xlink:href="#glyph0-3" x="46.116131" y="75.167"/>
- <use xlink:href="#glyph0-4" x="48.496196" y="75.167"/>
- <use xlink:href="#glyph0-5" x="52.924571" y="75.167"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-5" x="60.670493" y="75.167"/>
- <use xlink:href="#glyph0-32" x="65.098869" y="75.167"/>
- <use xlink:href="#glyph0-8" x="69.692623" y="75.167"/>
- <use xlink:href="#glyph0-6" x="73.290118" y="75.167"/>
- <use xlink:href="#glyph0-7" x="76.694339" y="75.167"/>
- <use xlink:href="#glyph0-4" x="81.482364" y="75.167"/>
- <use xlink:href="#glyph0-8" x="85.91074" y="75.167"/>
- <use xlink:href="#glyph0-9" x="89.508235" y="75.167"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-8" x="96.644445" y="75.167"/>
- <use xlink:href="#glyph0-15" x="100.24194" y="75.167"/>
- <use xlink:href="#glyph0-5" x="105.389616" y="75.167"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-17" x="36.852" y="87.122"/>
- <use xlink:href="#glyph0-5" x="41.999675" y="87.122"/>
- <use xlink:href="#glyph0-8" x="46.428051" y="87.122"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="49.746593" y="87.122"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="56.275085" y="87.122"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-6" x="60.987395" y="87.122"/>
- <use xlink:href="#glyph0-33" x="64.391615" y="87.122"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-9" x="72.579876" y="87.122"/>
- <use xlink:href="#glyph0-5" x="76.398541" y="87.122"/>
- <use xlink:href="#glyph0-6" x="80.826916" y="87.122"/>
- <use xlink:href="#glyph0-3" x="84.231137" y="87.122"/>
- <use xlink:href="#glyph0-7" x="86.611202" y="87.122"/>
- <use xlink:href="#glyph0-2" x="91.399228" y="87.122"/>
- <use xlink:href="#glyph0-3" x="93.779293" y="87.122"/>
- <use xlink:href="#glyph0-31" x="96.159358" y="87.122"/>
- <use xlink:href="#glyph0-5" x="100.4901" y="87.122"/>
- <use xlink:href="#glyph0-25" x="104.918476" y="87.122"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-8" x="41.217" y="99.077"/>
- <use xlink:href="#glyph0-6" x="44.814495" y="99.077"/>
- <use xlink:href="#glyph0-7" x="48.218715" y="99.077"/>
- <use xlink:href="#glyph0-17" x="53.006741" y="99.077"/>
- <use xlink:href="#glyph0-9" x="58.154416" y="99.077"/>
- <use xlink:href="#glyph0-7" x="61.973081" y="99.077"/>
- <use xlink:href="#glyph0-4" x="66.761106" y="99.077"/>
- <use xlink:href="#glyph0-8" x="71.189482" y="99.077"/>
- <use xlink:href="#glyph0-3" x="74.786977" y="99.077"/>
- <use xlink:href="#glyph0-16" x="77.167042" y="99.077"/>
- <use xlink:href="#glyph0-17" x="82.148342" y="99.077"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-7" x="90.613563" y="99.077"/>
- <use xlink:href="#glyph0-17" x="95.401589" y="99.077"/>
- <use xlink:href="#glyph0-25" x="100.549264" y="99.077"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-27" x="45.604" y="111.032"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-6" x="50.472723" y="111.032"/>
- <use xlink:href="#glyph0-16" x="53.876943" y="111.032"/>
- <use xlink:href="#glyph0-7" x="58.858243" y="111.032"/>
- <use xlink:href="#glyph0-25" x="63.646269" y="111.032"/>
- <use xlink:href="#glyph0-4" x="68.793944" y="111.032"/>
- <use xlink:href="#glyph0-7" x="73.22232" y="111.032"/>
- <use xlink:href="#glyph0-9" x="78.010345" y="111.032"/>
- <use xlink:href="#glyph0-8" x="81.82901" y="111.032"/>
- <use xlink:href="#glyph0-9" x="85.426505" y="111.032"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="92.562715" y="111.032"/>
- <use xlink:href="#glyph0-8" x="94.94278" y="111.032"/>
- <use xlink:href="#glyph0-26" x="98.540275" y="111.032"/>
-</g>
-<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -63.098187 -24.906875 L 63.097125 -24.906875 L 63.097125 24.905625 L -63.098187 24.905625 Z M -63.098187 -24.906875 " transform="matrix(1,0,0,-1,213.731,89.64)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="157.539" y="80.176"/>
- <use xlink:href="#glyph0-2" x="164.181065" y="80.176"/>
- <use xlink:href="#glyph0-3" x="166.561131" y="80.176"/>
- <use xlink:href="#glyph0-4" x="168.941196" y="80.176"/>
- <use xlink:href="#glyph0-5" x="173.369571" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-9" x="181.115493" y="80.176"/>
- <use xlink:href="#glyph0-3" x="184.934157" y="80.176"/>
- <use xlink:href="#glyph0-30" x="187.314223" y="80.176"/>
- <use xlink:href="#glyph0-17" x="192.295523" y="80.176"/>
- <use xlink:href="#glyph0-9" x="197.443198" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-8" x="204.589371" y="80.176"/>
- <use xlink:href="#glyph0-15" x="208.186866" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-5" x="213.324579" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-8" x="221.080463" y="80.176"/>
- <use xlink:href="#glyph0-6" x="224.677958" y="80.176"/>
- <use xlink:href="#glyph0-7" x="228.082178" y="80.176"/>
- <use xlink:href="#glyph0-17" x="232.870204" y="80.176"/>
- <use xlink:href="#glyph0-9" x="238.017879" y="80.176"/>
- <use xlink:href="#glyph0-7" x="241.836544" y="80.176"/>
- <use xlink:href="#glyph0-4" x="246.624569" y="80.176"/>
- <use xlink:href="#glyph0-8" x="251.052945" y="80.176"/>
- <use xlink:href="#glyph0-3" x="254.65044" y="80.176"/>
- <use xlink:href="#glyph0-16" x="257.030505" y="80.176"/>
- <use xlink:href="#glyph0-17" x="262.011805" y="80.176"/>
- <use xlink:href="#glyph0-29" x="267.15948" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-7" x="172.331" y="92.131"/>
- <use xlink:href="#glyph0-25" x="177.119026" y="92.131"/>
- <use xlink:href="#glyph0-25" x="182.266701" y="92.131"/>
- <use xlink:href="#glyph0-9" x="187.414376" y="92.131"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="194.550587" y="92.131"/>
- <use xlink:href="#glyph0-5" x="199.698262" y="92.131"/>
- <use xlink:href="#glyph0-6" x="204.126638" y="92.131"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-9" x="210.848404" y="92.131"/>
- <use xlink:href="#glyph0-3" x="214.667069" y="92.131"/>
- <use xlink:href="#glyph0-30" x="217.047134" y="92.131"/>
- <use xlink:href="#glyph0-17" x="222.028434" y="92.131"/>
- <use xlink:href="#glyph0-7" x="227.176109" y="92.131"/>
- <use xlink:href="#glyph0-8" x="231.964135" y="92.131"/>
- <use xlink:href="#glyph0-20" x="235.56163" y="92.131"/>
- <use xlink:href="#glyph0-6" x="240.709305" y="92.131"/>
- <use xlink:href="#glyph0-5" x="244.113526" y="92.131"/>
- <use xlink:href="#glyph0-9" x="248.541901" y="92.131"/>
- <use xlink:href="#glyph0-29" x="252.360566" y="92.131"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-7" x="164.409" y="104.086"/>
- <use xlink:href="#glyph0-17" x="169.197026" y="104.086"/>
- <use xlink:href="#glyph0-25" x="174.344701" y="104.086"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-24" x="182.809922" y="104.086"/>
- <use xlink:href="#glyph0-17" x="188.150872" y="104.086"/>
- <use xlink:href="#glyph0-7" x="193.298547" y="104.086"/>
- <use xlink:href="#glyph0-2" x="198.086573" y="104.086"/>
- <use xlink:href="#glyph0-3" x="200.466638" y="104.086"/>
- <use xlink:href="#glyph0-31" x="202.846703" y="104.086"/>
- <use xlink:href="#glyph0-5" x="207.177446" y="104.086"/>
- <use xlink:href="#glyph0-9" x="211.605821" y="104.086"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="218.742032" y="104.086"/>
- <use xlink:href="#glyph0-5" x="223.889707" y="104.086"/>
- <use xlink:href="#glyph0-6" x="228.318083" y="104.086"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="235.049812" y="104.086"/>
- <use xlink:href="#glyph0-17" x="237.429877" y="104.086"/>
- <use xlink:href="#glyph0-19" x="242.577552" y="104.086"/>
- <use xlink:href="#glyph0-20" x="247.725228" y="104.086"/>
- <use xlink:href="#glyph0-8" x="252.872903" y="104.086"/>
- <use xlink:href="#glyph0-9" x="256.470398" y="104.086"/>
- <use xlink:href="#glyph0-26" x="260.289062" y="104.086"/>
-</g>
-<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -63.09775 -24.906875 L 63.097563 -24.906875 L 63.097563 24.905625 L -63.09775 24.905625 Z M -63.09775 -24.906875 " transform="matrix(1,0,0,-1,354.004,89.64)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-12" x="299.556" y="80.176"/>
- <use xlink:href="#glyph0-16" x="306.198065" y="80.176"/>
- <use xlink:href="#glyph0-27" x="311.179365" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-9" x="319.644587" y="80.176"/>
- <use xlink:href="#glyph0-3" x="323.463251" y="80.176"/>
- <use xlink:href="#glyph0-30" x="325.843316" y="80.176"/>
- <use xlink:href="#glyph0-17" x="330.824616" y="80.176"/>
- <use xlink:href="#glyph0-9" x="335.972292" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-8" x="343.118465" y="80.176"/>
- <use xlink:href="#glyph0-15" x="346.71596" y="80.176"/>
- <use xlink:href="#glyph0-5" x="351.863635" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-8" x="359.609557" y="80.176"/>
- <use xlink:href="#glyph0-6" x="363.207051" y="80.176"/>
- <use xlink:href="#glyph0-7" x="366.611272" y="80.176"/>
- <use xlink:href="#glyph0-17" x="371.399297" y="80.176"/>
- <use xlink:href="#glyph0-9" x="376.546973" y="80.176"/>
- <use xlink:href="#glyph0-7" x="380.365637" y="80.176"/>
- <use xlink:href="#glyph0-4" x="385.153663" y="80.176"/>
- <use xlink:href="#glyph0-8" x="389.582039" y="80.176"/>
- <use xlink:href="#glyph0-3" x="393.179533" y="80.176"/>
- <use xlink:href="#glyph0-16" x="395.559599" y="80.176"/>
- <use xlink:href="#glyph0-17" x="400.540899" y="80.176"/>
- <use xlink:href="#glyph0-29" x="405.688574" y="80.176"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-7" x="313.42" y="92.131"/>
- <use xlink:href="#glyph0-25" x="318.208026" y="92.131"/>
- <use xlink:href="#glyph0-25" x="323.355701" y="92.131"/>
- <use xlink:href="#glyph0-9" x="328.503376" y="92.131"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="335.639587" y="92.131"/>
- <use xlink:href="#glyph0-3" x="340.787262" y="92.131"/>
- <use xlink:href="#glyph0-9" x="343.167327" y="92.131"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-9" x="350.3135" y="92.131"/>
- <use xlink:href="#glyph0-3" x="354.132165" y="92.131"/>
- <use xlink:href="#glyph0-30" x="356.51223" y="92.131"/>
- <use xlink:href="#glyph0-17" x="361.49353" y="92.131"/>
- <use xlink:href="#glyph0-7" x="366.641205" y="92.131"/>
- <use xlink:href="#glyph0-8" x="371.429231" y="92.131"/>
- <use xlink:href="#glyph0-20" x="375.026726" y="92.131"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-6" x="380.164439" y="92.131"/>
- <use xlink:href="#glyph0-5" x="383.568659" y="92.131"/>
- <use xlink:href="#glyph0-9" x="387.997035" y="92.131"/>
- <use xlink:href="#glyph0-29" x="391.815699" y="92.131"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-7" x="305.499" y="104.086"/>
- <use xlink:href="#glyph0-17" x="310.287026" y="104.086"/>
- <use xlink:href="#glyph0-25" x="315.434701" y="104.086"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-24" x="323.899922" y="104.086"/>
- <use xlink:href="#glyph0-17" x="329.240872" y="104.086"/>
- <use xlink:href="#glyph0-7" x="334.388547" y="104.086"/>
- <use xlink:href="#glyph0-2" x="339.176573" y="104.086"/>
- <use xlink:href="#glyph0-3" x="341.556638" y="104.086"/>
- <use xlink:href="#glyph0-31" x="343.936703" y="104.086"/>
- <use xlink:href="#glyph0-5" x="348.267446" y="104.086"/>
- <use xlink:href="#glyph0-9" x="352.695821" y="104.086"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="359.832032" y="104.086"/>
- <use xlink:href="#glyph0-3" x="364.979707" y="104.086"/>
- <use xlink:href="#glyph0-9" x="367.359772" y="104.086"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="374.505945" y="104.086"/>
- <use xlink:href="#glyph0-17" x="376.88601" y="104.086"/>
- <use xlink:href="#glyph0-19" x="382.033686" y="104.086"/>
- <use xlink:href="#glyph0-20" x="387.181361" y="104.086"/>
- <use xlink:href="#glyph0-8" x="392.329037" y="104.086"/>
- <use xlink:href="#glyph0-9" x="395.926531" y="104.086"/>
- <use xlink:href="#glyph0-26" x="399.745196" y="104.086"/>
-</g>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -76.777875 29.734563 L -68.695844 29.734563 " transform="matrix(1,0,0,-1,213.731,59.133)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 150.234375 29.398438 C 148.695312 29.109375 146.191406 28.242188 144.457031 27.234375 L 144.457031 31.566406 C 146.191406 30.554688 148.695312 29.6875 150.234375 29.398438 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 63.495563 29.734563 L 71.577594 29.734563 " transform="matrix(1,0,0,-1,213.731,59.133)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 290.511719 29.398438 C 288.96875 29.109375 286.464844 28.242188 284.730469 27.234375 L 284.730469 31.566406 C 286.464844 30.554688 288.96875 29.6875 290.511719 29.398438 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 140.276813 3.652531 L 140.276813 -0.00371875 " transform="matrix(1,0,0,-1,213.731,59.133)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 354.007812 64.335938 C 354.296875 62.792969 355.160156 60.289062 356.171875 58.558594 L 351.839844 58.558594 C 352.851562 60.289062 353.71875 62.792969 354.007812 64.335938 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 76.780719 -30.507625 L 68.694781 -30.507625 " transform="matrix(1,0,0,-1,213.731,59.133)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 277.226562 89.640625 C 278.769531 89.929688 281.273438 90.796875 283.003906 91.808594 L 283.003906 87.472656 C 281.273438 88.484375 278.769531 89.351562 277.226562 89.640625 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -63.496625 -30.507625 L -91.504437 -30.507625 " transform="matrix(1,0,0,-1,213.731,59.133)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 117.027344 89.640625 C 118.566406 89.929688 121.070312 90.796875 122.804688 91.808594 L 122.804688 87.472656 C 121.070312 88.484375 118.566406 89.351562 117.027344 89.640625 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.187531 24.907844 L -39.187469 24.907844 C -41.386687 24.907844 -43.171844 23.122688 -43.171844 20.923469 L -43.171844 -20.920281 C -43.171844 -23.123406 -41.386687 -24.908562 -39.187469 -24.908562 L 39.187531 -24.908562 C 41.38675 -24.908562 43.171906 -23.123406 43.171906 -20.920281 L 43.171906 20.923469 C 43.171906 23.122688 41.38675 24.907844 39.187531 24.907844 Z M 39.187531 24.907844 " transform="matrix(1,0,0,-1,73.457,94.068)"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="37.094" y="79.595"/>
+ <use xlink:href="#glyph0-2" x="43.736065" y="79.595"/>
+ <use xlink:href="#glyph0-3" x="46.116131" y="79.595"/>
+ <use xlink:href="#glyph0-4" x="48.496196" y="79.595"/>
+ <use xlink:href="#glyph0-5" x="52.924571" y="79.595"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="60.670493" y="79.595"/>
+ <use xlink:href="#glyph0-32" x="65.098869" y="79.595"/>
+ <use xlink:href="#glyph0-8" x="69.692623" y="79.595"/>
+ <use xlink:href="#glyph0-6" x="73.290118" y="79.595"/>
+ <use xlink:href="#glyph0-7" x="76.694339" y="79.595"/>
+ <use xlink:href="#glyph0-4" x="81.482364" y="79.595"/>
+ <use xlink:href="#glyph0-8" x="85.91074" y="79.595"/>
+ <use xlink:href="#glyph0-9" x="89.508235" y="79.595"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use
+ xlink:href="#glyph0-8"
+ x="96.644445"
+ y="79.595"
+ id="use583" />
+ <use
+ xlink:href="#glyph0-15"
+ x="100.24194"
+ y="79.595"
+ id="use585" />
+ <use
+ xlink:href="#glyph0-5"
+ x="105.389616"
+ y="79.595"
+ id="use587" />
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use
+ xlink:href="#glyph0-17"
+ x="36.852"
+ y="91.55"
+ id="use591" />
+ <use
+ xlink:href="#glyph0-5"
+ x="41.999675"
+ y="91.55"
+ id="use593" />
+ <use
+ xlink:href="#glyph0-8"
+ x="46.428051"
+ y="91.55"
+ id="use595" />
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use
+ xlink:href="#glyph0-14"
+ x="49.746593"
+ y="91.55"
+ id="use599" />
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use
+ xlink:href="#glyph0-16"
+ x="56.275085"
+ y="91.55"
+ id="use603" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g611">
+ <use
+ xlink:href="#glyph0-6"
+ x="60.987395"
+ y="91.55"
+ id="use607" />
+ <use
+ xlink:href="#glyph0-33"
+ x="64.391615"
+ y="91.55"
+ id="use609" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g633">
+ <use
+ xlink:href="#glyph0-9"
+ x="72.579876"
+ y="91.55"
+ id="use613" />
+ <use
+ xlink:href="#glyph0-5"
+ x="76.398541"
+ y="91.55"
+ id="use615" />
+ <use
+ xlink:href="#glyph0-6"
+ x="80.826916"
+ y="91.55"
+ id="use617" />
+ <use
+ xlink:href="#glyph0-3"
+ x="84.231137"
+ y="91.55"
+ id="use619" />
+ <use
+ xlink:href="#glyph0-7"
+ x="86.611202"
+ y="91.55"
+ id="use621" />
+ <use
+ xlink:href="#glyph0-2"
+ x="91.399228"
+ y="91.55"
+ id="use623" />
+ <use
+ xlink:href="#glyph0-3"
+ x="93.779293"
+ y="91.55"
+ id="use625" />
+ <use
+ xlink:href="#glyph0-31"
+ x="96.159358"
+ y="91.55"
+ id="use627" />
+ <use
+ xlink:href="#glyph0-5"
+ x="100.4901"
+ y="91.55"
+ id="use629" />
+ <use
+ xlink:href="#glyph0-25"
+ x="104.918476"
+ y="91.55"
+ id="use631" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g657">
+ <use
+ xlink:href="#glyph0-8"
+ x="41.217"
+ y="103.505"
+ id="use635" />
+ <use
+ xlink:href="#glyph0-6"
+ x="44.814495"
+ y="103.505"
+ id="use637" />
+ <use
+ xlink:href="#glyph0-7"
+ x="48.218715"
+ y="103.505"
+ id="use639" />
+ <use
+ xlink:href="#glyph0-17"
+ x="53.006741"
+ y="103.505"
+ id="use641" />
+ <use
+ xlink:href="#glyph0-9"
+ x="58.154416"
+ y="103.505"
+ id="use643" />
+ <use
+ xlink:href="#glyph0-7"
+ x="61.973081"
+ y="103.505"
+ id="use645" />
+ <use
+ xlink:href="#glyph0-4"
+ x="66.761106"
+ y="103.505"
+ id="use647" />
+ <use
+ xlink:href="#glyph0-8"
+ x="71.189482"
+ y="103.505"
+ id="use649" />
+ <use
+ xlink:href="#glyph0-3"
+ x="74.786977"
+ y="103.505"
+ id="use651" />
+ <use
+ xlink:href="#glyph0-16"
+ x="77.167042"
+ y="103.505"
+ id="use653" />
+ <use
+ xlink:href="#glyph0-17"
+ x="82.148342"
+ y="103.505"
+ id="use655" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g665">
+ <use
+ xlink:href="#glyph0-7"
+ x="90.613563"
+ y="103.505"
+ id="use659" />
+ <use
+ xlink:href="#glyph0-17"
+ x="95.401589"
+ y="103.505"
+ id="use661" />
+ <use
+ xlink:href="#glyph0-25"
+ x="100.549264"
+ y="103.505"
+ id="use663" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g669">
+ <use
+ xlink:href="#glyph0-27"
+ x="45.604"
+ y="115.46"
+ id="use667" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g689">
+ <use
+ xlink:href="#glyph0-6"
+ x="50.472723"
+ y="115.46"
+ id="use671" />
+ <use
+ xlink:href="#glyph0-16"
+ x="53.876943"
+ y="115.46"
+ id="use673" />
+ <use
+ xlink:href="#glyph0-7"
+ x="58.858243"
+ y="115.46"
+ id="use675" />
+ <use
+ xlink:href="#glyph0-25"
+ x="63.646269"
+ y="115.46"
+ id="use677" />
+ <use
+ xlink:href="#glyph0-4"
+ x="68.793944"
+ y="115.46"
+ id="use679" />
+ <use
+ xlink:href="#glyph0-7"
+ x="73.22232"
+ y="115.46"
+ id="use681" />
+ <use
+ xlink:href="#glyph0-9"
+ x="78.010345"
+ y="115.46"
+ id="use683" />
+ <use
+ xlink:href="#glyph0-8"
+ x="81.82901"
+ y="115.46"
+ id="use685" />
+ <use
+ xlink:href="#glyph0-9"
+ x="85.426505"
+ y="115.46"
+ id="use687" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g697">
+ <use
+ xlink:href="#glyph0-3"
+ x="92.562715"
+ y="115.46"
+ id="use691" />
+ <use
+ xlink:href="#glyph0-8"
+ x="94.94278"
+ y="115.46"
+ id="use693" />
+ <use
+ xlink:href="#glyph0-26"
+ x="98.540275"
+ y="115.46"
+ id="use695" />
+</g>
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -63.098187 -24.908562 L 63.097125 -24.908562 L 63.097125 24.907844 L -63.098187 24.907844 Z M -63.098187 -24.908562 "
+ transform="matrix(1,0,0,-1,213.731,94.068)"
+ id="path699" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g711">
+ <use
+ xlink:href="#glyph0-1"
+ x="157.539"
+ y="84.604"
+ id="use701" />
+ <use
+ xlink:href="#glyph0-2"
+ x="164.181065"
+ y="84.604"
+ id="use703" />
+ <use
+ xlink:href="#glyph0-3"
+ x="166.561131"
+ y="84.604"
+ id="use705" />
+ <use
+ xlink:href="#glyph0-4"
+ x="168.941196"
+ y="84.604"
+ id="use707" />
+ <use
+ xlink:href="#glyph0-5"
+ x="173.369571"
+ y="84.604"
+ id="use709" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g723">
+ <use
+ xlink:href="#glyph0-9"
+ x="181.115493"
+ y="84.604"
+ id="use713" />
+ <use
+ xlink:href="#glyph0-3"
+ x="184.934157"
+ y="84.604"
+ id="use715" />
+ <use
+ xlink:href="#glyph0-30"
+ x="187.314223"
+ y="84.604"
+ id="use717" />
+ <use
+ xlink:href="#glyph0-17"
+ x="192.295523"
+ y="84.604"
+ id="use719" />
+ <use
+ xlink:href="#glyph0-9"
+ x="197.443198"
+ y="84.604"
+ id="use721" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g729">
+ <use
+ xlink:href="#glyph0-8"
+ x="204.589371"
+ y="84.604"
+ id="use725" />
+ <use
+ xlink:href="#glyph0-15"
+ x="208.186866"
+ y="84.604"
+ id="use727" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g733">
+ <use
+ xlink:href="#glyph0-5"
+ x="213.324579"
+ y="84.604"
+ id="use731" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g759">
+ <use
+ xlink:href="#glyph0-8"
+ x="221.080463"
+ y="84.604"
+ id="use735" />
+ <use
+ xlink:href="#glyph0-6"
+ x="224.677958"
+ y="84.604"
+ id="use737" />
+ <use
+ xlink:href="#glyph0-7"
+ x="228.082178"
+ y="84.604"
+ id="use739" />
+ <use
+ xlink:href="#glyph0-17"
+ x="232.870204"
+ y="84.604"
+ id="use741" />
+ <use
+ xlink:href="#glyph0-9"
+ x="238.017879"
+ y="84.604"
+ id="use743" />
+ <use
+ xlink:href="#glyph0-7"
+ x="241.836544"
+ y="84.604"
+ id="use745" />
+ <use
+ xlink:href="#glyph0-4"
+ x="246.624569"
+ y="84.604"
+ id="use747" />
+ <use
+ xlink:href="#glyph0-8"
+ x="251.052945"
+ y="84.604"
+ id="use749" />
+ <use
+ xlink:href="#glyph0-3"
+ x="254.65044"
+ y="84.604"
+ id="use751" />
+ <use
+ xlink:href="#glyph0-16"
+ x="257.030505"
+ y="84.604"
+ id="use753" />
+ <use
+ xlink:href="#glyph0-17"
+ x="262.011805"
+ y="84.604"
+ id="use755" />
+ <use
+ xlink:href="#glyph0-29"
+ x="267.15948"
+ y="84.604"
+ id="use757" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g769">
+ <use
+ xlink:href="#glyph0-7"
+ x="172.331"
+ y="96.559"
+ id="use761" />
+ <use
+ xlink:href="#glyph0-25"
+ x="177.119026"
+ y="96.559"
+ id="use763" />
+ <use
+ xlink:href="#glyph0-25"
+ x="182.266701"
+ y="96.559"
+ id="use765" />
+ <use
+ xlink:href="#glyph0-9"
+ x="187.414376"
+ y="96.559"
+ id="use767" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g777">
+ <use
+ xlink:href="#glyph0-15"
+ x="194.550587"
+ y="96.559"
+ id="use771" />
+ <use
+ xlink:href="#glyph0-5"
+ x="199.698262"
+ y="96.559"
+ id="use773" />
+ <use
+ xlink:href="#glyph0-6"
+ x="204.126638"
+ y="96.559"
+ id="use775" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g801">
+ <use
+ xlink:href="#glyph0-9"
+ x="210.848404"
+ y="96.559"
+ id="use779" />
+ <use
+ xlink:href="#glyph0-3"
+ x="214.667069"
+ y="96.559"
+ id="use781" />
+ <use
+ xlink:href="#glyph0-30"
+ x="217.047134"
+ y="96.559"
+ id="use783" />
+ <use
+ xlink:href="#glyph0-17"
+ x="222.028434"
+ y="96.559"
+ id="use785" />
+ <use
+ xlink:href="#glyph0-7"
+ x="227.176109"
+ y="96.559"
+ id="use787" />
+ <use
+ xlink:href="#glyph0-8"
+ x="231.964135"
+ y="96.559"
+ id="use789" />
+ <use
+ xlink:href="#glyph0-20"
+ x="235.56163"
+ y="96.559"
+ id="use791" />
+ <use
+ xlink:href="#glyph0-6"
+ x="240.709305"
+ y="96.559"
+ id="use793" />
+ <use
+ xlink:href="#glyph0-5"
+ x="244.113526"
+ y="96.559"
+ id="use795" />
+ <use
+ xlink:href="#glyph0-9"
+ x="248.541901"
+ y="96.559"
+ id="use797" />
+ <use
+ xlink:href="#glyph0-29"
+ x="252.360566"
+ y="96.559"
+ id="use799" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g809">
+ <use
+ xlink:href="#glyph0-7"
+ x="164.409"
+ y="108.514"
+ id="use803" />
+ <use
+ xlink:href="#glyph0-17"
+ x="169.197026"
+ y="108.514"
+ id="use805" />
+ <use
+ xlink:href="#glyph0-25"
+ x="174.344701"
+ y="108.514"
+ id="use807" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g827">
+ <use
+ xlink:href="#glyph0-24"
+ x="182.809922"
+ y="108.514"
+ id="use811" />
+ <use
+ xlink:href="#glyph0-17"
+ x="188.150872"
+ y="108.514"
+ id="use813" />
+ <use
+ xlink:href="#glyph0-7"
+ x="193.298547"
+ y="108.514"
+ id="use815" />
+ <use
+ xlink:href="#glyph0-2"
+ x="198.086573"
+ y="108.514"
+ id="use817" />
+ <use
+ xlink:href="#glyph0-3"
+ x="200.466638"
+ y="108.514"
+ id="use819" />
+ <use
+ xlink:href="#glyph0-31"
+ x="202.846703"
+ y="108.514"
+ id="use821" />
+ <use
+ xlink:href="#glyph0-5"
+ x="207.177446"
+ y="108.514"
+ id="use823" />
+ <use
+ xlink:href="#glyph0-9"
+ x="211.605821"
+ y="108.514"
+ id="use825" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g835">
+ <use
+ xlink:href="#glyph0-15"
+ x="218.742032"
+ y="108.514"
+ id="use829" />
+ <use
+ xlink:href="#glyph0-5"
+ x="223.889707"
+ y="108.514"
+ id="use831" />
+ <use
+ xlink:href="#glyph0-6"
+ x="228.318083"
+ y="108.514"
+ id="use833" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g851">
+ <use
+ xlink:href="#glyph0-3"
+ x="235.049812"
+ y="108.514"
+ id="use837" />
+ <use
+ xlink:href="#glyph0-17"
+ x="237.429877"
+ y="108.514"
+ id="use839" />
+ <use
+ xlink:href="#glyph0-19"
+ x="242.577552"
+ y="108.514"
+ id="use841" />
+ <use
+ xlink:href="#glyph0-20"
+ x="247.725228"
+ y="108.514"
+ id="use843" />
+ <use
+ xlink:href="#glyph0-8"
+ x="252.872903"
+ y="108.514"
+ id="use845" />
+ <use
+ xlink:href="#glyph0-9"
+ x="256.470398"
+ y="108.514"
+ id="use847" />
+ <use
+ xlink:href="#glyph0-26"
+ x="260.289062"
+ y="108.514"
+ id="use849" />
+</g>
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -63.09775 -24.908562 L 63.097563 -24.908562 L 63.097563 24.907844 L -63.09775 24.907844 Z M -63.09775 -24.908562 "
+ transform="matrix(1,0,0,-1,354.004,94.068)"
+ id="path853" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g861">
+ <use
+ xlink:href="#glyph0-12"
+ x="299.556"
+ y="84.604"
+ id="use855" />
+ <use
+ xlink:href="#glyph0-16"
+ x="306.198065"
+ y="84.604"
+ id="use857" />
+ <use
+ xlink:href="#glyph0-27"
+ x="311.179365"
+ y="84.604"
+ id="use859" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g873">
+ <use
+ xlink:href="#glyph0-9"
+ x="319.644587"
+ y="84.604"
+ id="use863" />
+ <use
+ xlink:href="#glyph0-3"
+ x="323.463251"
+ y="84.604"
+ id="use865" />
+ <use
+ xlink:href="#glyph0-30"
+ x="325.843316"
+ y="84.604"
+ id="use867" />
+ <use
+ xlink:href="#glyph0-17"
+ x="330.824616"
+ y="84.604"
+ id="use869" />
+ <use
+ xlink:href="#glyph0-9"
+ x="335.972292"
+ y="84.604"
+ id="use871" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g881">
+ <use
+ xlink:href="#glyph0-8"
+ x="343.118465"
+ y="84.604"
+ id="use875" />
+ <use
+ xlink:href="#glyph0-15"
+ x="346.71596"
+ y="84.604"
+ id="use877" />
+ <use
+ xlink:href="#glyph0-5"
+ x="351.863635"
+ y="84.604"
+ id="use879" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g907">
+ <use
+ xlink:href="#glyph0-8"
+ x="359.609557"
+ y="84.604"
+ id="use883" />
+ <use
+ xlink:href="#glyph0-6"
+ x="363.207051"
+ y="84.604"
+ id="use885" />
+ <use
+ xlink:href="#glyph0-7"
+ x="366.611272"
+ y="84.604"
+ id="use887" />
+ <use
+ xlink:href="#glyph0-17"
+ x="371.399297"
+ y="84.604"
+ id="use889" />
+ <use
+ xlink:href="#glyph0-9"
+ x="376.546973"
+ y="84.604"
+ id="use891" />
+ <use
+ xlink:href="#glyph0-7"
+ x="380.365637"
+ y="84.604"
+ id="use893" />
+ <use
+ xlink:href="#glyph0-4"
+ x="385.153663"
+ y="84.604"
+ id="use895" />
+ <use
+ xlink:href="#glyph0-8"
+ x="389.582039"
+ y="84.604"
+ id="use897" />
+ <use
+ xlink:href="#glyph0-3"
+ x="393.179533"
+ y="84.604"
+ id="use899" />
+ <use
+ xlink:href="#glyph0-16"
+ x="395.559599"
+ y="84.604"
+ id="use901" />
+ <use
+ xlink:href="#glyph0-17"
+ x="400.540899"
+ y="84.604"
+ id="use903" />
+ <use
+ xlink:href="#glyph0-29"
+ x="405.688574"
+ y="84.604"
+ id="use905" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g917">
+ <use
+ xlink:href="#glyph0-7"
+ x="313.42"
+ y="96.559"
+ id="use909" />
+ <use
+ xlink:href="#glyph0-25"
+ x="318.208026"
+ y="96.559"
+ id="use911" />
+ <use
+ xlink:href="#glyph0-25"
+ x="323.355701"
+ y="96.559"
+ id="use913" />
+ <use
+ xlink:href="#glyph0-9"
+ x="328.503376"
+ y="96.559"
+ id="use915" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g925">
+ <use
+ xlink:href="#glyph0-15"
+ x="335.639587"
+ y="96.559"
+ id="use919" />
+ <use
+ xlink:href="#glyph0-3"
+ x="340.787262"
+ y="96.559"
+ id="use921" />
+ <use
+ xlink:href="#glyph0-9"
+ x="343.167327"
+ y="96.559"
+ id="use923" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g941">
+ <use
+ xlink:href="#glyph0-9"
+ x="350.3135"
+ y="96.559"
+ id="use927" />
+ <use
+ xlink:href="#glyph0-3"
+ x="354.132165"
+ y="96.559"
+ id="use929" />
+ <use
+ xlink:href="#glyph0-30"
+ x="356.51223"
+ y="96.559"
+ id="use931" />
+ <use
+ xlink:href="#glyph0-17"
+ x="361.49353"
+ y="96.559"
+ id="use933" />
+ <use
+ xlink:href="#glyph0-7"
+ x="366.641205"
+ y="96.559"
+ id="use935" />
+ <use
+ xlink:href="#glyph0-8"
+ x="371.429231"
+ y="96.559"
+ id="use937" />
+ <use
+ xlink:href="#glyph0-20"
+ x="375.026726"
+ y="96.559"
+ id="use939" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g951">
+ <use
+ xlink:href="#glyph0-6"
+ x="380.164439"
+ y="96.559"
+ id="use943" />
+ <use
+ xlink:href="#glyph0-5"
+ x="383.568659"
+ y="96.559"
+ id="use945" />
+ <use
+ xlink:href="#glyph0-9"
+ x="387.997035"
+ y="96.559"
+ id="use947" />
+ <use
+ xlink:href="#glyph0-29"
+ x="391.815699"
+ y="96.559"
+ id="use949" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g959">
+ <use
+ xlink:href="#glyph0-7"
+ x="305.499"
+ y="108.514"
+ id="use953" />
+ <use
+ xlink:href="#glyph0-17"
+ x="310.287026"
+ y="108.514"
+ id="use955" />
+ <use
+ xlink:href="#glyph0-25"
+ x="315.434701"
+ y="108.514"
+ id="use957" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g977">
+ <use
+ xlink:href="#glyph0-24"
+ x="323.899922"
+ y="108.514"
+ id="use961" />
+ <use
+ xlink:href="#glyph0-17"
+ x="329.240872"
+ y="108.514"
+ id="use963" />
+ <use
+ xlink:href="#glyph0-7"
+ x="334.388547"
+ y="108.514"
+ id="use965" />
+ <use
+ xlink:href="#glyph0-2"
+ x="339.176573"
+ y="108.514"
+ id="use967" />
+ <use
+ xlink:href="#glyph0-3"
+ x="341.556638"
+ y="108.514"
+ id="use969" />
+ <use
+ xlink:href="#glyph0-31"
+ x="343.936703"
+ y="108.514"
+ id="use971" />
+ <use
+ xlink:href="#glyph0-5"
+ x="348.267446"
+ y="108.514"
+ id="use973" />
+ <use
+ xlink:href="#glyph0-9"
+ x="352.695821"
+ y="108.514"
+ id="use975" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g985">
+ <use
+ xlink:href="#glyph0-15"
+ x="359.832032"
+ y="108.514"
+ id="use979" />
+ <use
+ xlink:href="#glyph0-3"
+ x="364.979707"
+ y="108.514"
+ id="use981" />
+ <use
+ xlink:href="#glyph0-9"
+ x="367.359772"
+ y="108.514"
+ id="use983" />
+</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1001">
+ <use
+ xlink:href="#glyph0-3"
+ x="374.505945"
+ y="108.514"
+ id="use987" />
+ <use
+ xlink:href="#glyph0-17"
+ x="376.88601"
+ y="108.514"
+ id="use989" />
+ <use
+ xlink:href="#glyph0-19"
+ x="382.033686"
+ y="108.514"
+ id="use991" />
+ <use
+ xlink:href="#glyph0-20"
+ x="387.181361"
+ y="108.514"
+ id="use993" />
+ <use
+ xlink:href="#glyph0-8"
+ x="392.329037"
+ y="108.514"
+ id="use995" />
+ <use
+ xlink:href="#glyph0-9"
+ x="395.926531"
+ y="108.514"
+ id="use997" />
+ <use
+ xlink:href="#glyph0-26"
+ x="399.745196"
+ y="108.514"
+ id="use999" />
+</g>
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -76.777875 31.948563 L -68.320844 31.948563 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1003" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.055213 0.0012025 L 2.1724 1.477765 L 3.480994 0.0012025 L 2.1724 -1.479266 Z M 6.055213 0.0012025 "
+ transform="matrix(1,0,0,-1,142.2651,29.39964)"
+ id="path1005" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 63.495563 31.948563 L 71.952594 31.948563 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1007" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.05342 0.0012025 L 2.170608 1.477765 L 3.479201 0.0012025 L 2.170608 -1.479266 Z M 6.05342 0.0012025 "
+ transform="matrix(1,0,0,-1,282.54033,29.39964)"
+ id="path1009" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 140.276813 5.866531 L 140.276813 -2.5905 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1011" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.054396 0.0015925 L 2.171584 1.478155 L 3.480177 0.0015925 L 2.171584 -1.478876 Z M 6.054396 0.0015925 "
+ transform="matrix(0,1,1,0,354.00622,60.79326)"
+ id="path1013" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 76.780719 -32.723312 L 68.323688 -32.723312 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1015" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.056275 0.0014125 L 2.173463 1.477975 L 3.482056 0.0014125 L 2.173463 -1.479056 Z M 6.056275 0.0014125 "
+ transform="matrix(-1,0,0,1,285.1969,94.0689)"
+ id="path1017" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -63.496625 -32.723312 L -91.879437 -32.723312 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1019" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.054734 0.0014125 L 2.171921 1.477975 L 3.480515 0.0014125 L 2.171921 -1.479056 Z M 6.054734 0.0014125 "
+ transform="matrix(-1,0,0,1,124.99614,94.0689)"
+ id="path1021" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -76.777875 31.948563 L -68.711469 31.948563 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1023" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.402869 0.0012025 L 0.645056 2.540265 L 2.852088 0.0012025 L 0.645056 -2.541766 Z M 7.402869 0.0012025 "
+ transform="matrix(1,0,0,-1,142.2651,29.39964)"
+ id="path1025" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 63.495563 31.948563 L 71.561969 31.948563 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1027" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.401076 0.0012025 L 0.643264 2.540265 L 2.854201 0.0012025 L 0.643264 -2.541766 Z M 7.401076 0.0012025 "
+ transform="matrix(1,0,0,-1,282.54033,29.39964)"
+ id="path1029" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 140.276813 5.866531 L 140.276813 -2.199875 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1031" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.402052 0.0015925 L 0.64424 2.540655 L 2.855177 0.0015925 L 0.64424 -2.541376 Z M 7.402052 0.0015925 "
+ transform="matrix(0,1,1,0,354.00622,60.79326)"
+ id="path1033" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 76.780719 -32.723312 L 68.710406 -32.723312 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1035" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.403931 0.0014125 L 0.642213 2.540475 L 2.85315 0.0014125 L 0.642213 -2.541556 Z M 7.403931 0.0014125 "
+ transform="matrix(-1,0,0,1,285.1969,94.0689)"
+ id="path1037" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -63.496625 -32.723312 L -91.488812 -32.723312 "
+ transform="matrix(1,0,0,-1,213.731,61.347)"
+ id="path1039" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.40239 0.0014125 L 0.644577 2.540475 L 2.855515 0.0014125 L 0.644577 -2.541556 Z M 7.40239 0.0014125 "
+ transform="matrix(-1,0,0,1,124.99614,94.0689)"
+ id="path1041" />
</g>
</svg>
diff --git a/bip-0174/coinjoin-workflow.tex b/bip-0174/coinjoin-workflow.tex
index e0516ff..a325321 100644
--- a/bip-0174/coinjoin-workflow.tex
+++ b/bip-0174/coinjoin-workflow.tex
@@ -7,7 +7,7 @@
\usepackage{lmodern}
\renewcommand*\familydefault{\sfdefault}
\usepackage{tikz}
-\usetikzlibrary{shapes,arrows}
+\usetikzlibrary{shapes,arrows.meta}
\tikzset{>=latex}
\begin{document}
% \sffamily{}
@@ -22,7 +22,7 @@
rounded corners]
\begin{tikzpicture}[auto]
% outlining the flowchart on a grid
- \matrix[column sep=3ex,row sep=2ex]{
+ \matrix[column sep=3ex,row sep=3ex]{
\node [block_center] (0alice1)
{Alice creates a PSBT with only her inputs
with UTXOs filled in.\\Sends it to Bob.};
@@ -49,7 +49,13 @@
\\
};% end matrix
% connecting nodes with paths
- \draw[line width = 1pt, ->]
+ \draw [ultra thick, draw=black, -{Stealth[length=8pt]}]
+ (0alice1) edge (1bob1)
+ (1bob1) edge (2carol1)
+ (2carol1) edge (3bob2)
+ (3bob2) edge (4alice1)
+ (4alice1) edge (5alice2);
+ \draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}]
(0alice1) edge (1bob1)
(1bob1) edge (2carol1)
(2carol1) edge (3bob2)
diff --git a/bip-0174/multisig-workflow.svg b/bip-0174/multisig-workflow.svg
index 8abe4c5..2d873b0 100644
--- a/bip-0174/multisig-workflow.svg
+++ b/bip-0174/multisig-workflow.svg
@@ -1,6 +1,47 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375.988pt" height="411.906pt"
- viewBox="0 0 375.988 411.906" style="background-color:white" version="1.1">
+ viewBox="0 0 375.988 411.906" version="1.2"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg1424"
+ sodipodi:docname="multisig-workflow.svg"
+ inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ <metadata
+ id="metadata1428">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="640"
+ inkscape:window-height="480"
+ id="namedview1426"
+ showgrid="false"
+ inkscape:zoom="0.42970968"
+ inkscape:cx="250.65867"
+ inkscape:cy="274.604"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg1424" />
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
@@ -192,277 +233,931 @@
<use xlink:href="#glyph0-20" x="211.977264" y="25.914"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="215.011872" y="25.914"/>
- <use xlink:href="#glyph0-8" x="218.416092" y="25.914"/>
- <use xlink:href="#glyph0-21" x="223.397392" y="25.914"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-10" x="155.2" y="37.869"/>
-</g>
+ <use
+ xlink:href="#glyph0-14"
+ x="215.011872"
+ y="25.914"
+ id="use221" />
+ <use
+ xlink:href="#glyph0-8"
+ x="218.416092"
+ y="25.914"
+ id="use223" />
+ <use
+ xlink:href="#glyph0-21"
+ x="223.397392"
+ y="25.914"
+ id="use225" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g231">
+ <use
+ xlink:href="#glyph0-10"
+ x="155.2"
+ y="37.869"
+ id="use229" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-22" x="163.305571" y="37.869"/>
- <use xlink:href="#glyph0-23" x="168.286871" y="37.869"/>
- <use xlink:href="#glyph0-8" x="171.607406" y="37.869"/>
- <use xlink:href="#glyph0-20" x="176.588706" y="37.869"/>
- <use xlink:href="#glyph0-23" x="179.633277" y="37.869"/>
- <use xlink:href="#glyph0-24" x="182.953811" y="37.869"/>
-</g>
+ <use
+ xlink:href="#glyph0-23"
+ x="168.286871"
+ y="37.869"
+ id="use235" />
+ <use
+ xlink:href="#glyph0-8"
+ x="171.607406"
+ y="37.869"
+ id="use237" />
+ <use
+ xlink:href="#glyph0-20"
+ x="176.588706"
+ y="37.869"
+ id="use239" />
+ <use
+ xlink:href="#glyph0-23"
+ x="179.633277"
+ y="37.869"
+ id="use241" />
+ <use
+ xlink:href="#glyph0-24"
+ x="182.953811"
+ y="37.869"
+ id="use243" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-25" x="191.262619" y="37.869"/>
- <use xlink:href="#glyph0-26" x="199.979894" y="37.869"/>
- <use xlink:href="#glyph0-2" x="205.12757" y="37.869"/>
- <use xlink:href="#glyph0-18" x="207.507635" y="37.869"/>
- <use xlink:href="#glyph0-3" x="211.10513" y="37.869"/>
- <use xlink:href="#glyph0-16" x="213.485195" y="37.869"/>
- <use xlink:href="#glyph0-3" x="217.30386" y="37.869"/>
- <use xlink:href="#glyph0-27" x="219.683925" y="37.869"/>
- <use xlink:href="#glyph0-28" x="224.665225" y="37.869"/>
-</g>
-<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.623594 -19.705344 L 55.626406 -19.705344 L 55.626406 19.704812 L -55.623594 19.704812 Z M -55.623594 -19.705344 " transform="matrix(1,0,0,-1,191.315,74.697)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="141.128" y="65.232"/>
- <use xlink:href="#glyph0-2" x="147.770065" y="65.232"/>
- <use xlink:href="#glyph0-3" x="150.150131" y="65.232"/>
- <use xlink:href="#glyph0-4" x="152.530196" y="65.232"/>
+ <use
+ xlink:href="#glyph0-26"
+ x="199.979894"
+ y="37.869"
+ id="use249" />
+ <use
+ xlink:href="#glyph0-2"
+ x="205.12757"
+ y="37.869"
+ id="use251" />
+ <use
+ xlink:href="#glyph0-18"
+ x="207.507635"
+ y="37.869"
+ id="use253" />
+ <use
+ xlink:href="#glyph0-3"
+ x="211.10513"
+ y="37.869"
+ id="use255" />
+ <use
+ xlink:href="#glyph0-16"
+ x="213.485195"
+ y="37.869"
+ id="use257" />
+ <use
+ xlink:href="#glyph0-3"
+ x="217.30386"
+ y="37.869"
+ id="use259" />
+ <use
+ xlink:href="#glyph0-27"
+ x="219.683925"
+ y="37.869"
+ id="use261" />
+ <use
+ xlink:href="#glyph0-28"
+ x="224.665225"
+ y="37.869"
+ id="use263" />
+ </g>
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -55.623594 -19.705344 L 55.626406 -19.705344 L 55.626406 19.704812 L -55.623594 19.704812 Z M -55.623594 -19.705344 "
+ transform="matrix(1,0,0,-1,191.315,74.697)"
+ id="path267" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g279">
+ <use
+ xlink:href="#glyph0-1"
+ x="141.128"
+ y="65.232"
+ id="use269" />
+ <use
+ xlink:href="#glyph0-2"
+ x="147.770065"
+ y="65.232"
+ id="use271" />
+ <use
+ xlink:href="#glyph0-3"
+ x="150.150131"
+ y="65.232"
+ id="use273" />
+ <use
+ xlink:href="#glyph0-4"
+ x="152.530196"
+ y="65.232"
+ id="use275" />
<use xlink:href="#glyph0-5" x="156.958571" y="65.232"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-26" x="164.704493" y="65.232"/>
- <use xlink:href="#glyph0-16" x="169.852168" y="65.232"/>
- <use xlink:href="#glyph0-5" x="173.670833" y="65.232"/>
- <use xlink:href="#glyph0-16" x="178.099209" y="65.232"/>
-</g>
+ <use
+ xlink:href="#glyph0-26"
+ x="164.704493"
+ y="65.232"
+ id="use281" />
+ <use
+ xlink:href="#glyph0-16"
+ x="169.852168"
+ y="65.232"
+ id="use283" />
+ <use
+ xlink:href="#glyph0-5"
+ x="173.670833"
+ y="65.232"
+ id="use285" />
+ <use
+ xlink:href="#glyph0-16"
+ x="178.099209"
+ y="65.232"
+ id="use287" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-10" x="185.245382" y="65.232"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-20" x="193.350953" y="65.232"/>
- <use xlink:href="#glyph0-26" x="196.395523" y="65.232"/>
- <use xlink:href="#glyph0-2" x="201.543199" y="65.232"/>
- <use xlink:href="#glyph0-2" x="203.923264" y="65.232"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-11" x="209.620875" y="65.232"/>
- <use xlink:href="#glyph0-8" x="214.76855" y="65.232"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g303">
+ <use
+ xlink:href="#glyph0-20"
+ x="193.350953"
+ y="65.232"
+ id="use295" />
+ <use
+ xlink:href="#glyph0-26"
+ x="196.395524"
+ y="65.232"
+ id="use297" />
+ <use
+ xlink:href="#glyph0-2"
+ x="201.543199"
+ y="65.232"
+ id="use299" />
+ <use
+ xlink:href="#glyph0-2"
+ x="203.923264"
+ y="65.232"
+ id="use301" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g309">
+ <use
+ xlink:href="#glyph0-11"
+ x="209.620875"
+ y="65.232"
+ id="use305" />
+ <use
+ xlink:href="#glyph0-8"
+ x="214.76855"
+ y="65.232"
+ id="use307" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-12" x="220.028803" y="65.232"/>
- <use xlink:href="#glyph0-5" x="225.176479" y="65.232"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="232.9224" y="65.232"/>
- <use xlink:href="#glyph0-8" x="236.519895" y="65.232"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-4" x="143.342" y="77.187"/>
- <use xlink:href="#glyph0-14" x="147.770376" y="77.187"/>
- <use xlink:href="#glyph0-5" x="151.174596" y="77.187"/>
- <use xlink:href="#glyph0-10" x="155.602972" y="77.187"/>
- <use xlink:href="#glyph0-18" x="160.390997" y="77.187"/>
- <use xlink:href="#glyph0-5" x="163.988492" y="77.187"/>
-</g>
+ <use
+ xlink:href="#glyph0-5"
+ x="225.176479"
+ y="65.232"
+ id="use313" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g321">
+ <use
+ xlink:href="#glyph0-18"
+ x="232.9224"
+ y="65.232"
+ id="use317" />
+ <use
+ xlink:href="#glyph0-8"
+ x="236.519895"
+ y="65.232"
+ id="use319" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g335">
+ <use
+ xlink:href="#glyph0-4"
+ x="143.342"
+ y="77.187"
+ id="use323" />
+ <use
+ xlink:href="#glyph0-14"
+ x="147.770376"
+ y="77.187"
+ id="use325" />
+ <use
+ xlink:href="#glyph0-5"
+ x="151.174596"
+ y="77.187"
+ id="use327" />
+ <use
+ xlink:href="#glyph0-10"
+ x="155.602972"
+ y="77.187"
+ id="use329" />
+ <use
+ xlink:href="#glyph0-18"
+ x="160.390997"
+ y="77.187"
+ id="use331" />
+ <use
+ xlink:href="#glyph0-5"
+ x="163.988492"
+ y="77.187"
+ id="use333" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-10" x="171.734414" y="77.187"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-29" x="179.839985" y="77.187"/>
- <use xlink:href="#glyph0-30" x="186.20509" y="77.187"/>
- <use xlink:href="#glyph0-7" x="191.740311" y="77.187"/>
- <use xlink:href="#glyph0-31" x="198.382376" y="77.187"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="208.49043" y="77.187"/>
- <use xlink:href="#glyph0-3" x="215.297875" y="77.187"/>
- <use xlink:href="#glyph0-18" x="217.67794" y="77.187"/>
- <use xlink:href="#glyph0-17" x="221.275435" y="77.187"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-10" x="229.740656" y="77.187"/>
- <use xlink:href="#glyph0-2" x="234.528682" y="77.187"/>
- <use xlink:href="#glyph0-2" x="236.908747" y="77.187"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g349">
+ <use
+ xlink:href="#glyph0-29"
+ x="179.839985"
+ y="77.187"
+ id="use341" />
+ <use
+ xlink:href="#glyph0-30"
+ x="186.20509"
+ y="77.187"
+ id="use343" />
+ <use
+ xlink:href="#glyph0-7"
+ x="191.740311"
+ y="77.187"
+ id="use345" />
+ <use
+ xlink:href="#glyph0-31"
+ x="198.382376"
+ y="77.187"
+ id="use347" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g359">
+ <use
+ xlink:href="#glyph0-15"
+ x="208.49043"
+ y="77.187"
+ id="use351" />
+ <use
+ xlink:href="#glyph0-3"
+ x="215.297875"
+ y="77.187"
+ id="use353" />
+ <use
+ xlink:href="#glyph0-18"
+ x="217.67794"
+ y="77.187"
+ id="use355" />
+ <use
+ xlink:href="#glyph0-17"
+ x="221.275435"
+ y="77.187"
+ id="use357" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g367">
+ <use
+ xlink:href="#glyph0-10"
+ x="229.740656"
+ y="77.187"
+ id="use361" />
+ <use
+ xlink:href="#glyph0-2"
+ x="234.528682"
+ y="77.187"
+ id="use363" />
+ <use
+ xlink:href="#glyph0-2"
+ x="236.908747"
+ y="77.187"
+ id="use365" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="145.065" y="89.143"/>
<use xlink:href="#glyph0-11" x="147.445065" y="89.143"/>
<use xlink:href="#glyph0-19" x="152.592741" y="89.143"/>
<use xlink:href="#glyph0-26" x="157.740416" y="89.143"/>
- <use xlink:href="#glyph0-18" x="162.888091" y="89.143"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-32" x="169.803132" y="89.143"/>
- <use xlink:href="#glyph0-31" x="176.65242" y="89.143"/>
- <use xlink:href="#glyph0-33" x="183.432965" y="89.143"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-34" x="189.796078" y="89.143"/>
- <use xlink:href="#glyph0-16" x="197.129548" y="89.143"/>
-</g>
+ <use
+ xlink:href="#glyph0-18"
+ x="162.888091"
+ y="89.143"
+ id="use377" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g387">
+ <use
+ xlink:href="#glyph0-32"
+ x="169.803132"
+ y="89.143"
+ id="use381" />
+ <use
+ xlink:href="#glyph0-31"
+ x="176.65242"
+ y="89.143"
+ id="use383" />
+ <use
+ xlink:href="#glyph0-33"
+ x="183.432965"
+ y="89.143"
+ id="use385" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g393">
+ <use
+ xlink:href="#glyph0-34"
+ x="189.796078"
+ y="89.143"
+ id="use389" />
+ <use
+ xlink:href="#glyph0-16"
+ x="197.129548"
+ y="89.143"
+ id="use391" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-35" x="204.275721" y="89.143"/>
- <use xlink:href="#glyph0-2" x="209.61667" y="89.143"/>
- <use xlink:href="#glyph0-2" x="211.996736" y="89.143"/>
- <use xlink:href="#glyph0-5" x="214.376801" y="89.143"/>
- <use xlink:href="#glyph0-12" x="218.805176" y="89.143"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="227.270398" y="89.143"/>
+ <use
+ xlink:href="#glyph0-2"
+ x="209.61667"
+ y="89.143"
+ id="use397" />
+ <use
+ xlink:href="#glyph0-2"
+ x="211.996736"
+ y="89.143"
+ id="use399" />
+ <use
+ xlink:href="#glyph0-5"
+ x="214.376801"
+ y="89.143"
+ id="use401" />
+ <use
+ xlink:href="#glyph0-12"
+ x="218.805176"
+ y="89.143"
+ id="use403" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g413">
+ <use
+ xlink:href="#glyph0-3"
+ x="227.270398"
+ y="89.143"
+ id="use407" />
<use xlink:href="#glyph0-11" x="229.650463" y="89.143"/>
<use xlink:href="#glyph0-28" x="234.798138" y="89.143"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.623594 -6.781125 L 55.626406 -6.781125 L 55.626406 6.781375 L -55.623594 6.781375 Z M -55.623594 -6.781125 " transform="matrix(1,0,0,-1,191.315,113.047)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-29" x="153.512" y="116.506"/>
- <use xlink:href="#glyph0-30" x="159.877105" y="116.506"/>
- <use xlink:href="#glyph0-7" x="165.412326" y="116.506"/>
- <use xlink:href="#glyph0-31" x="172.054391" y="116.506"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-12" x="182.152482" y="116.506"/>
- <use xlink:href="#glyph0-3" x="187.300158" y="116.506"/>
- <use xlink:href="#glyph0-16" x="189.680223" y="116.506"/>
- <use xlink:href="#glyph0-18" x="193.498888" y="116.506"/>
- <use xlink:href="#glyph0-14" x="197.096382" y="116.506"/>
- <use xlink:href="#glyph0-3" x="200.500603" y="116.506"/>
- <use xlink:href="#glyph0-9" x="202.880668" y="116.506"/>
- <use xlink:href="#glyph0-26" x="208.028343" y="116.506"/>
- <use xlink:href="#glyph0-18" x="213.176019" y="116.506"/>
- <use xlink:href="#glyph0-5" x="216.773514" y="116.506"/>
- <use xlink:href="#glyph0-12" x="221.201889" y="116.506"/>
- <use xlink:href="#glyph0-28" x="226.349565" y="116.506"/>
+ <use
+ xlink:href="#glyph0-29"
+ x="153.512"
+ y="116.506"
+ id="use417" />
+ <use
+ xlink:href="#glyph0-30"
+ x="159.877105"
+ y="116.506"
+ id="use419" />
+ <use
+ xlink:href="#glyph0-7"
+ x="165.412326"
+ y="116.506"
+ id="use421" />
+ <use
+ xlink:href="#glyph0-31"
+ x="172.054391"
+ y="116.506"
+ id="use423" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g451">
+ <use
+ xlink:href="#glyph0-12"
+ x="182.152482"
+ y="116.506"
+ id="use427" />
+ <use
+ xlink:href="#glyph0-3"
+ x="187.300158"
+ y="116.506"
+ id="use429" />
+ <use
+ xlink:href="#glyph0-16"
+ x="189.680223"
+ y="116.506"
+ id="use431" />
+ <use
+ xlink:href="#glyph0-18"
+ x="193.498888"
+ y="116.506"
+ id="use433" />
+ <use
+ xlink:href="#glyph0-14"
+ x="197.096382"
+ y="116.506"
+ id="use435" />
+ <use
+ xlink:href="#glyph0-3"
+ x="200.500603"
+ y="116.506"
+ id="use437" />
+ <use
+ xlink:href="#glyph0-9"
+ x="202.880668"
+ y="116.506"
+ id="use439" />
+ <use
+ xlink:href="#glyph0-26"
+ x="208.028343"
+ y="116.506"
+ id="use441" />
+ <use
+ xlink:href="#glyph0-18"
+ x="213.176019"
+ y="116.506"
+ id="use443" />
+ <use
+ xlink:href="#glyph0-5"
+ x="216.773514"
+ y="116.506"
+ id="use445" />
+ <use
+ xlink:href="#glyph0-12"
+ x="221.201889"
+ y="116.506"
+ id="use447" />
+ <use
+ xlink:href="#glyph0-28"
+ x="226.349565"
+ y="116.506"
+ id="use449" />
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.625625 -12.75925 L 55.624375 -12.75925 L 55.624375 12.756375 L -55.625625 12.756375 Z M -55.625625 -12.75925 " transform="matrix(1,0,0,-1,65.985,151.397)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="21.555" y="148.879"/>
- <use xlink:href="#glyph0-2" x="28.197065" y="148.879"/>
- <use xlink:href="#glyph0-3" x="30.577131" y="148.879"/>
- <use xlink:href="#glyph0-4" x="32.957196" y="148.879"/>
- <use xlink:href="#glyph0-5" x="37.385571" y="148.879"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="45.131493" y="148.879"/>
- <use xlink:href="#glyph0-3" x="48.950157" y="148.879"/>
- <use xlink:href="#glyph0-27" x="51.330223" y="148.879"/>
- <use xlink:href="#glyph0-11" x="56.311523" y="148.879"/>
- <use xlink:href="#glyph0-16" x="61.459198" y="148.879"/>
-</g>
+ <use
+ xlink:href="#glyph0-2"
+ x="28.197065"
+ y="148.879"
+ id="use457" />
+ <use
+ xlink:href="#glyph0-3"
+ x="30.577131"
+ y="148.879"
+ id="use459" />
+ <use
+ xlink:href="#glyph0-4"
+ x="32.957196"
+ y="148.879"
+ id="use461" />
+ <use
+ xlink:href="#glyph0-5"
+ x="37.385571"
+ y="148.879"
+ id="use463" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g477">
+ <use
+ xlink:href="#glyph0-16"
+ x="45.131493"
+ y="148.879"
+ id="use467" />
+ <use
+ xlink:href="#glyph0-3"
+ x="48.950157"
+ y="148.879"
+ id="use469" />
+ <use
+ xlink:href="#glyph0-27"
+ x="51.330223"
+ y="148.879"
+ id="use471" />
+ <use
+ xlink:href="#glyph0-11"
+ x="56.311523"
+ y="148.879"
+ id="use473" />
+ <use
+ xlink:href="#glyph0-16"
+ x="61.459198"
+ y="148.879"
+ id="use475" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-18" x="68.595408" y="148.879"/>
- <use xlink:href="#glyph0-17" x="72.192903" y="148.879"/>
- <use xlink:href="#glyph0-5" x="77.340579" y="148.879"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-29" x="85.096463" y="148.879"/>
- <use xlink:href="#glyph0-30" x="91.461568" y="148.879"/>
- <use xlink:href="#glyph0-7" x="96.996789" y="148.879"/>
- <use xlink:href="#glyph0-31" x="103.638854" y="148.879"/>
-</g>
+ <use
+ xlink:href="#glyph0-17"
+ x="72.192903"
+ y="148.879"
+ id="use481" />
+ <use
+ xlink:href="#glyph0-5"
+ x="77.340579"
+ y="148.879"
+ id="use483" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g495">
+ <use
+ xlink:href="#glyph0-29"
+ x="85.096463"
+ y="148.879"
+ id="use487" />
+ <use
+ xlink:href="#glyph0-30"
+ x="91.461568"
+ y="148.879"
+ id="use489" />
+ <use
+ xlink:href="#glyph0-7"
+ x="96.996789"
+ y="148.879"
+ id="use491" />
+ <use
+ xlink:href="#glyph0-31"
+ x="103.638854"
+ y="148.879"
+ id="use493" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-15" x="33.773" y="160.834"/>
- <use xlink:href="#glyph0-3" x="40.580445" y="160.834"/>
- <use xlink:href="#glyph0-18" x="42.96051" y="160.834"/>
- <use xlink:href="#glyph0-17" x="46.558005" y="160.834"/>
-</g>
+ <use
+ xlink:href="#glyph0-3"
+ x="40.580445"
+ y="160.834"
+ id="use499" />
+ <use
+ xlink:href="#glyph0-18"
+ x="42.96051"
+ y="160.834"
+ id="use501" />
+ <use
+ xlink:href="#glyph0-17"
+ x="46.558005"
+ y="160.834"
+ id="use503" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-17" x="55.023226" y="160.834"/>
<use xlink:href="#glyph0-5" x="60.170901" y="160.834"/>
<use xlink:href="#glyph0-14" x="64.599277" y="160.834"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="71.321043" y="160.834"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-10" x="77.859498" y="160.834"/>
- <use xlink:href="#glyph0-2" x="82.647523" y="160.834"/>
- <use xlink:href="#glyph0-2" x="85.027588" y="160.834"/>
- <use xlink:href="#glyph0-5" x="87.407653" y="160.834"/>
- <use xlink:href="#glyph0-18" x="91.836029" y="160.834"/>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g517">
+ <use
+ xlink:href="#glyph0-15"
+ x="71.321043"
+ y="160.834"
+ id="use515" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g531">
+ <use
+ xlink:href="#glyph0-10"
+ x="77.859498"
+ y="160.834"
+ id="use519" />
+ <use
+ xlink:href="#glyph0-2"
+ x="82.647523"
+ y="160.834"
+ id="use521" />
+ <use
+ xlink:href="#glyph0-2"
+ x="85.027588"
+ y="160.834"
+ id="use523" />
+ <use
+ xlink:href="#glyph0-5"
+ x="87.407653"
+ y="160.834"
+ id="use525" />
+ <use
+ xlink:href="#glyph0-18"
+ x="91.836029"
+ y="160.834"
+ id="use527" />
<use xlink:href="#glyph0-28" x="95.433524" y="160.834"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.623594 -12.75925 L 55.626406 -12.75925 L 55.626406 12.756375 L -55.623594 12.756375 Z M -55.623594 -12.75925 " transform="matrix(1,0,0,-1,191.315,151.397)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-7" x="148.628" y="148.879"/>
- <use xlink:href="#glyph0-8" x="155.270065" y="148.879"/>
- <use xlink:href="#glyph0-9" x="160.251365" y="148.879"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="168.716587" y="148.879"/>
- <use xlink:href="#glyph0-3" x="172.535251" y="148.879"/>
- <use xlink:href="#glyph0-27" x="174.915316" y="148.879"/>
- <use xlink:href="#glyph0-11" x="179.896616" y="148.879"/>
- <use xlink:href="#glyph0-16" x="185.044292" y="148.879"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g541">
+ <use
+ xlink:href="#glyph0-7"
+ x="148.628"
+ y="148.879"
+ id="use535" />
+ <use
+ xlink:href="#glyph0-8"
+ x="155.270065"
+ y="148.879"
+ id="use537" />
+ <use
+ xlink:href="#glyph0-9"
+ x="160.251365"
+ y="148.879"
+ id="use539" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g553">
+ <use
+ xlink:href="#glyph0-16"
+ x="168.716587"
+ y="148.879"
+ id="use543" />
+ <use
+ xlink:href="#glyph0-3"
+ x="172.535251"
+ y="148.879"
+ id="use545" />
+ <use
+ xlink:href="#glyph0-27"
+ x="174.915316"
+ y="148.879"
+ id="use547" />
+ <use
+ xlink:href="#glyph0-11"
+ x="179.896616"
+ y="148.879"
+ id="use549" />
+ <use
+ xlink:href="#glyph0-16"
+ x="185.044292"
+ y="148.879"
+ id="use551" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-18" x="192.190465" y="148.879"/>
- <use xlink:href="#glyph0-17" x="195.78796" y="148.879"/>
- <use xlink:href="#glyph0-5" x="200.935635" y="148.879"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-29" x="208.681557" y="148.879"/>
- <use xlink:href="#glyph0-30" x="215.046662" y="148.879"/>
- <use xlink:href="#glyph0-7" x="220.581882" y="148.879"/>
- <use xlink:href="#glyph0-31" x="227.223948" y="148.879"/>
-</g>
+ <use
+ xlink:href="#glyph0-17"
+ x="195.78796"
+ y="148.879"
+ id="use557" />
+ <use
+ xlink:href="#glyph0-5"
+ x="200.935635"
+ y="148.879"
+ id="use559" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g571">
+ <use
+ xlink:href="#glyph0-29"
+ x="208.681557"
+ y="148.879"
+ id="use563" />
+ <use
+ xlink:href="#glyph0-30"
+ x="215.046662"
+ y="148.879"
+ id="use565" />
+ <use
+ xlink:href="#glyph0-7"
+ x="220.581882"
+ y="148.879"
+ id="use567" />
+ <use
+ xlink:href="#glyph0-31"
+ x="227.223948"
+ y="148.879"
+ id="use569" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-15" x="148.988" y="160.834"/>
- <use xlink:href="#glyph0-3" x="155.795445" y="160.834"/>
- <use xlink:href="#glyph0-18" x="158.17551" y="160.834"/>
- <use xlink:href="#glyph0-17" x="161.773005" y="160.834"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-17" x="170.238226" y="160.834"/>
- <use xlink:href="#glyph0-3" x="175.385901" y="160.834"/>
- <use xlink:href="#glyph0-16" x="177.765966" y="160.834"/>
-</g>
+ <use
+ xlink:href="#glyph0-3"
+ x="155.795445"
+ y="160.834"
+ id="use575" />
+ <use
+ xlink:href="#glyph0-18"
+ x="158.17551"
+ y="160.834"
+ id="use577" />
+ <use
+ xlink:href="#glyph0-17"
+ x="161.773005"
+ y="160.834"
+ id="use579" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g589">
+ <use
+ xlink:href="#glyph0-17"
+ x="170.238226"
+ y="160.834"
+ id="use583" />
+ <use
+ xlink:href="#glyph0-3"
+ x="175.385901"
+ y="160.834"
+ id="use585" />
+ <use
+ xlink:href="#glyph0-16"
+ x="177.765966"
+ y="160.834"
+ id="use587" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-30" x="184.912139" y="160.834"/>
- <use xlink:href="#glyph0-29" x="190.44736" y="160.834"/>
- <use xlink:href="#glyph0-36" x="196.812465" y="160.834"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="206.772076" y="160.834"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-10" x="213.300568" y="160.834"/>
- <use xlink:href="#glyph0-2" x="218.088594" y="160.834"/>
- <use xlink:href="#glyph0-2" x="220.468659" y="160.834"/>
- <use xlink:href="#glyph0-5" x="222.848724" y="160.834"/>
+ <use
+ xlink:href="#glyph0-29"
+ x="190.44736"
+ y="160.834"
+ id="use593" />
+ <use
+ xlink:href="#glyph0-36"
+ x="196.812465"
+ y="160.834"
+ id="use595" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g601">
+ <use
+ xlink:href="#glyph0-15"
+ x="206.772076"
+ y="160.834"
+ id="use599" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g615">
+ <use
+ xlink:href="#glyph0-10"
+ x="213.300568"
+ y="160.834"
+ id="use603" />
+ <use
+ xlink:href="#glyph0-2"
+ x="218.088594"
+ y="160.834"
+ id="use605" />
+ <use
+ xlink:href="#glyph0-2"
+ x="220.468659"
+ y="160.834"
+ id="use607" />
+ <use
+ xlink:href="#glyph0-5"
+ x="222.848724"
+ y="160.834"
+ id="use609" />
<use xlink:href="#glyph0-18" x="227.2771" y="160.834"/>
<use xlink:href="#glyph0-28" x="230.874594" y="160.834"/>
</g>
-<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.624469 -19.704563 L 55.625531 -19.704563 L 55.625531 19.705594 L -55.624469 19.705594 Z M -55.624469 -19.704563 " transform="matrix(1,0,0,-1,316.644,151.397)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-13" x="271.522" y="141.932"/>
- <use xlink:href="#glyph0-10" x="277.887105" y="141.932"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="282.396178" y="141.932"/>
- <use xlink:href="#glyph0-8" x="285.800398" y="141.932"/>
- <use xlink:href="#glyph0-2" x="290.781698" y="141.932"/>
-</g>
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -55.624469 -19.704563 L 55.625531 -19.704563 L 55.625531 19.705594 L -55.624469 19.705594 Z M -55.624469 -19.704563 "
+ transform="matrix(1,0,0,-1,316.644,151.397)"
+ id="path617" />
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g623">
+ <use
+ xlink:href="#glyph0-13"
+ x="271.522"
+ y="141.932"
+ id="use619" />
+ <use
+ xlink:href="#glyph0-10"
+ x="277.887105"
+ y="141.932"
+ id="use621" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g631">
+ <use
+ xlink:href="#glyph0-14"
+ x="282.396178"
+ y="141.932"
+ id="use625" />
+ <use
+ xlink:href="#glyph0-8"
+ x="285.800398"
+ y="141.932"
+ id="use627" />
+ <use
+ xlink:href="#glyph0-2"
+ x="290.781698"
+ y="141.932"
+ id="use629" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-16" x="296.479309" y="141.932"/>
- <use xlink:href="#glyph0-3" x="300.297974" y="141.932"/>
- <use xlink:href="#glyph0-27" x="302.678039" y="141.932"/>
- <use xlink:href="#glyph0-11" x="307.659339" y="141.932"/>
- <use xlink:href="#glyph0-16" x="312.807014" y="141.932"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="319.953187" y="141.932"/>
- <use xlink:href="#glyph0-17" x="323.550682" y="141.932"/>
- <use xlink:href="#glyph0-5" x="328.698358" y="141.932"/>
-</g>
+ <use
+ xlink:href="#glyph0-3"
+ x="300.297974"
+ y="141.932"
+ id="use635" />
+ <use
+ xlink:href="#glyph0-27"
+ x="302.678039"
+ y="141.932"
+ id="use637" />
+ <use
+ xlink:href="#glyph0-11"
+ x="307.659339"
+ y="141.932"
+ id="use639" />
+ <use
+ xlink:href="#glyph0-16"
+ x="312.807014"
+ y="141.932"
+ id="use641" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g651">
+ <use
+ xlink:href="#glyph0-18"
+ x="319.953187"
+ y="141.932"
+ id="use645" />
+ <use
+ xlink:href="#glyph0-17"
+ x="323.550682"
+ y="141.932"
+ id="use647" />
+ <use
+ xlink:href="#glyph0-5"
+ x="328.698358"
+ y="141.932"
+ id="use649" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-29" x="336.444279" y="141.932"/>
- <use xlink:href="#glyph0-30" x="342.809384" y="141.932"/>
- <use xlink:href="#glyph0-7" x="348.344605" y="141.932"/>
- <use xlink:href="#glyph0-31" x="354.98667" y="141.932"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="279.824" y="153.888"/>
- <use xlink:href="#glyph0-3" x="286.631445" y="153.888"/>
- <use xlink:href="#glyph0-18" x="289.01151" y="153.888"/>
- <use xlink:href="#glyph0-17" x="292.609005" y="153.888"/>
-</g>
+ <use
+ xlink:href="#glyph0-30"
+ x="342.809384"
+ y="141.932"
+ id="use655" />
+ <use
+ xlink:href="#glyph0-7"
+ x="348.344605"
+ y="141.932"
+ id="use657" />
+ <use
+ xlink:href="#glyph0-31"
+ x="354.98667"
+ y="141.932"
+ id="use659" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g671">
+ <use
+ xlink:href="#glyph0-15"
+ x="279.824"
+ y="153.888"
+ id="use663" />
+ <use
+ xlink:href="#glyph0-3"
+ x="286.631445"
+ y="153.888"
+ id="use665" />
+ <use
+ xlink:href="#glyph0-18"
+ x="289.01151"
+ y="153.888"
+ id="use667" />
+ <use
+ xlink:href="#glyph0-17"
+ x="292.609005"
+ y="153.888"
+ id="use669" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-10" x="301.074226" y="153.888"/>
</g>
@@ -471,397 +1166,1381 @@
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="313.608173" y="153.888"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-21" x="318.599435" y="153.888"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-21" x="318.589473" y="153.888"/>
<use xlink:href="#glyph0-19" x="326.504759" y="153.888"/>
<use xlink:href="#glyph0-2" x="331.652434" y="153.888"/>
<use xlink:href="#glyph0-5" x="334.032499" y="153.888"/>
- <use xlink:href="#glyph0-18" x="338.460875" y="153.888"/>
- <use xlink:href="#glyph0-5" x="342.05837" y="153.888"/>
- <use xlink:href="#glyph0-2" x="346.486745" y="153.888"/>
- <use xlink:href="#glyph0-37" x="348.866811" y="153.888"/>
-</g>
+ <use
+ xlink:href="#glyph0-18"
+ x="338.460875"
+ y="153.888"
+ id="use691" />
+ <use
+ xlink:href="#glyph0-5"
+ x="342.05837"
+ y="153.888"
+ id="use693" />
+ <use
+ xlink:href="#glyph0-2"
+ x="346.486745"
+ y="153.888"
+ id="use695" />
+ <use
+ xlink:href="#glyph0-37"
+ x="348.866811"
+ y="153.888"
+ id="use697" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-8" x="267.882" y="165.843"/>
<use xlink:href="#glyph0-38" x="272.8633" y="165.843"/>
- <use xlink:href="#glyph0-3" x="280.97186" y="165.843"/>
- <use xlink:href="#glyph0-11" x="283.351925" y="165.843"/>
- <use xlink:href="#glyph0-5" x="288.499601" y="165.843"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="296.245522" y="165.843"/>
- <use xlink:href="#glyph0-3" x="300.064187" y="165.843"/>
- <use xlink:href="#glyph0-27" x="302.444252" y="165.843"/>
- <use xlink:href="#glyph0-11" x="307.425552" y="165.843"/>
+ <use
+ xlink:href="#glyph0-3"
+ x="280.97186"
+ y="165.843"
+ id="use705" />
+ <use
+ xlink:href="#glyph0-11"
+ x="283.351925"
+ y="165.843"
+ id="use707" />
+ <use
+ xlink:href="#glyph0-5"
+ x="288.499601"
+ y="165.843"
+ id="use709" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g727">
+ <use
+ xlink:href="#glyph0-16"
+ x="296.245522"
+ y="165.843"
+ id="use713" />
+ <use
+ xlink:href="#glyph0-3"
+ x="300.064187"
+ y="165.843"
+ id="use715" />
+ <use
+ xlink:href="#glyph0-27"
+ x="302.444252"
+ y="165.843"
+ id="use717" />
+ <use
+ xlink:href="#glyph0-11"
+ x="307.425552"
+ y="165.843"
+ id="use719" />
<use xlink:href="#glyph0-3" x="312.573227" y="165.843"/>
<use xlink:href="#glyph0-11" x="314.953292" y="165.843"/>
<use xlink:href="#glyph0-27" x="320.100968" y="165.843"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-21" x="328.409776" y="165.843"/>
- <use xlink:href="#glyph0-10" x="336.325062" y="165.843"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-10" x="336.315099" y="165.843"/>
<use xlink:href="#glyph0-4" x="341.103125" y="165.843"/>
- <use xlink:href="#glyph0-17" x="345.531501" y="165.843"/>
- <use xlink:href="#glyph0-3" x="350.679176" y="165.843"/>
- <use xlink:href="#glyph0-11" x="353.059241" y="165.843"/>
- <use xlink:href="#glyph0-5" x="358.206917" y="165.843"/>
+ <use
+ xlink:href="#glyph0-17"
+ x="345.531501"
+ y="165.843"
+ id="use737" />
+ <use
+ xlink:href="#glyph0-3"
+ x="350.679176"
+ y="165.843"
+ id="use739" />
+ <use
+ xlink:href="#glyph0-11"
+ x="353.059241"
+ y="165.843"
+ id="use741" />
+ <use
+ xlink:href="#glyph0-5"
+ x="358.206917"
+ y="165.843"
+ id="use743" />
<use xlink:href="#glyph0-28" x="362.635292" y="165.843"/>
</g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.623594 -12.759375 L 55.626406 -12.759375 L 55.626406 12.75625 L -55.623594 12.75625 Z M -55.623594 -12.759375 " transform="matrix(1,0,0,-1,191.315,195.725)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-29" x="169.328" y="193.206"/>
- <use xlink:href="#glyph0-30" x="175.693105" y="193.206"/>
- <use xlink:href="#glyph0-7" x="181.228326" y="193.206"/>
- <use xlink:href="#glyph0-31" x="187.870391" y="193.206"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="193.824041" y="193.206"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g759">
+ <use
+ xlink:href="#glyph0-29"
+ x="169.328"
+ y="193.206"
+ id="use751" />
+ <use
+ xlink:href="#glyph0-30"
+ x="175.693105"
+ y="193.206"
+ id="use753" />
+ <use
+ xlink:href="#glyph0-7"
+ x="181.228326"
+ y="193.206"
+ id="use755" />
+ <use
+ xlink:href="#glyph0-31"
+ x="187.870391"
+ y="193.206"
+ id="use757" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g763">
+ <use
+ xlink:href="#glyph0-16"
+ x="193.824041"
+ y="193.206"
+ id="use761" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-10" x="200.960251" y="193.206"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="205.469324" y="193.206"/>
- <use xlink:href="#glyph0-5" x="208.873544" y="193.206"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="154.84" y="205.161"/>
- <use xlink:href="#glyph0-5" x="158.24422" y="205.161"/>
- <use xlink:href="#glyph0-18" x="162.672596" y="205.161"/>
- <use xlink:href="#glyph0-26" x="166.270091" y="205.161"/>
- <use xlink:href="#glyph0-14" x="171.417766" y="205.161"/>
- <use xlink:href="#glyph0-11" x="174.821987" y="205.161"/>
- <use xlink:href="#glyph0-5" x="179.969662" y="205.161"/>
- <use xlink:href="#glyph0-12" x="184.398038" y="205.161"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g773">
+ <use
+ xlink:href="#glyph0-14"
+ x="205.469324"
+ y="193.206"
+ id="use769" />
+ <use
+ xlink:href="#glyph0-5"
+ x="208.873544"
+ y="193.206"
+ id="use771" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g791">
+ <use
+ xlink:href="#glyph0-14"
+ x="154.84"
+ y="205.161"
+ id="use775" />
+ <use
+ xlink:href="#glyph0-5"
+ x="158.24422"
+ y="205.161"
+ id="use777" />
+ <use
+ xlink:href="#glyph0-18"
+ x="162.672596"
+ y="205.161"
+ id="use779" />
+ <use
+ xlink:href="#glyph0-26"
+ x="166.270091"
+ y="205.161"
+ id="use781" />
+ <use
+ xlink:href="#glyph0-14"
+ x="171.417766"
+ y="205.161"
+ id="use783" />
+ <use
+ xlink:href="#glyph0-11"
+ x="174.821987"
+ y="205.161"
+ id="use785" />
+ <use
+ xlink:href="#glyph0-5"
+ x="179.969662"
+ y="205.161"
+ id="use787" />
+ <use
+ xlink:href="#glyph0-12"
+ x="184.398038"
+ y="205.161"
+ id="use789" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-18" x="192.863259" y="205.161"/>
- <use xlink:href="#glyph0-8" x="196.460754" y="205.161"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="204.7596" y="205.161"/>
- <use xlink:href="#glyph0-2" x="211.401665" y="205.161"/>
- <use xlink:href="#glyph0-3" x="213.78173" y="205.161"/>
- <use xlink:href="#glyph0-4" x="216.161796" y="205.161"/>
- <use xlink:href="#glyph0-5" x="220.590171" y="205.161"/>
- <use xlink:href="#glyph0-28" x="225.018547" y="205.161"/>
-</g>
+ <use
+ xlink:href="#glyph0-8"
+ x="196.460754"
+ y="205.161"
+ id="use795" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g811">
+ <use
+ xlink:href="#glyph0-1"
+ x="204.7596"
+ y="205.161"
+ id="use799" />
+ <use
+ xlink:href="#glyph0-2"
+ x="211.401665"
+ y="205.161"
+ id="use801" />
+ <use
+ xlink:href="#glyph0-3"
+ x="213.78173"
+ y="205.161"
+ id="use803" />
+ <use
+ xlink:href="#glyph0-4"
+ x="216.161796"
+ y="205.161"
+ id="use805" />
+ <use
+ xlink:href="#glyph0-5"
+ x="220.590171"
+ y="205.161"
+ id="use807" />
+ <use
+ xlink:href="#glyph0-28"
+ x="225.018547"
+ y="205.161"
+ id="use809" />
+ </g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.623594 -19.701906 L 55.626406 -19.701906 L 55.626406 19.704344 L -55.623594 19.704344 Z M -55.623594 -19.701906 " transform="matrix(1,0,0,-1,191.315,240.052)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="150.246" y="230.588"/>
- <use xlink:href="#glyph0-2" x="156.888065" y="230.588"/>
- <use xlink:href="#glyph0-3" x="159.268131" y="230.588"/>
- <use xlink:href="#glyph0-4" x="161.648196" y="230.588"/>
- <use xlink:href="#glyph0-5" x="166.076571" y="230.588"/>
- <use xlink:href="#glyph0-16" x="170.504947" y="230.588"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-4" x="177.641157" y="230.588"/>
- <use xlink:href="#glyph0-8" x="182.069533" y="230.588"/>
- <use xlink:href="#glyph0-21" x="187.050833" y="230.588"/>
- <use xlink:href="#glyph0-9" x="194.966119" y="230.588"/>
- <use xlink:href="#glyph0-3" x="200.113794" y="230.588"/>
- <use xlink:href="#glyph0-11" x="202.493859" y="230.588"/>
- <use xlink:href="#glyph0-5" x="207.641535" y="230.588"/>
- <use xlink:href="#glyph0-16" x="212.069911" y="230.588"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g827">
+ <use
+ xlink:href="#glyph0-1"
+ x="150.246"
+ y="230.588"
+ id="use815" />
+ <use
+ xlink:href="#glyph0-2"
+ x="156.888065"
+ y="230.588"
+ id="use817" />
+ <use
+ xlink:href="#glyph0-3"
+ x="159.268131"
+ y="230.588"
+ id="use819" />
+ <use
+ xlink:href="#glyph0-4"
+ x="161.648196"
+ y="230.588"
+ id="use821" />
+ <use
+ xlink:href="#glyph0-5"
+ x="166.076571"
+ y="230.588"
+ id="use823" />
+ <use
+ xlink:href="#glyph0-16"
+ x="170.504947"
+ y="230.588"
+ id="use825" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g845">
+ <use
+ xlink:href="#glyph0-4"
+ x="177.641157"
+ y="230.588"
+ id="use829" />
+ <use
+ xlink:href="#glyph0-8"
+ x="182.069533"
+ y="230.588"
+ id="use831" />
+ <use
+ xlink:href="#glyph0-21"
+ x="187.050833"
+ y="230.588"
+ id="use833" />
+ <use
+ xlink:href="#glyph0-9"
+ x="194.966119"
+ y="230.588"
+ id="use835" />
+ <use
+ xlink:href="#glyph0-3"
+ x="200.113794"
+ y="230.588"
+ id="use837" />
+ <use
+ xlink:href="#glyph0-11"
+ x="202.493859"
+ y="230.588"
+ id="use839" />
+ <use
+ xlink:href="#glyph0-5"
+ x="207.641535"
+ y="230.588"
+ id="use841" />
+ <use
+ xlink:href="#glyph0-16"
+ x="212.069911"
+ y="230.588"
+ id="use843" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-18" x="219.206121" y="230.588"/>
- <use xlink:href="#glyph0-17" x="222.803616" y="230.588"/>
- <use xlink:href="#glyph0-5" x="227.951291" y="230.588"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-29" x="153.304" y="242.543"/>
- <use xlink:href="#glyph0-30" x="159.669105" y="242.543"/>
- <use xlink:href="#glyph0-7" x="165.204326" y="242.543"/>
- <use xlink:href="#glyph0-31" x="171.846391" y="242.543"/>
-</g>
+ <use
+ xlink:href="#glyph0-17"
+ x="222.803616"
+ y="230.588"
+ id="use849" />
+ <use
+ xlink:href="#glyph0-5"
+ x="227.951291"
+ y="230.588"
+ id="use851" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g863">
+ <use
+ xlink:href="#glyph0-29"
+ x="153.304"
+ y="242.543"
+ id="use855" />
+ <use
+ xlink:href="#glyph0-30"
+ x="159.669105"
+ y="242.543"
+ id="use857" />
+ <use
+ xlink:href="#glyph0-7"
+ x="165.204326"
+ y="242.543"
+ id="use859" />
+ <use
+ xlink:href="#glyph0-31"
+ x="171.846391"
+ y="242.543"
+ id="use861" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-16" x="177.800041" y="242.543"/>
- <use xlink:href="#glyph0-28" x="181.618705" y="242.543"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="189.367616" y="242.543"/>
- <use xlink:href="#glyph0-2" x="196.009681" y="242.543"/>
- <use xlink:href="#glyph0-2" x="198.389746" y="242.543"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="204.087357" y="242.543"/>
- <use xlink:href="#glyph0-11" x="206.467422" y="242.543"/>
+ <use
+ xlink:href="#glyph0-28"
+ x="181.618705"
+ y="242.543"
+ id="use867" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g877">
+ <use
+ xlink:href="#glyph0-1"
+ x="189.367616"
+ y="242.543"
+ id="use871" />
+ <use
+ xlink:href="#glyph0-2"
+ x="196.009681"
+ y="242.543"
+ id="use873" />
+ <use
+ xlink:href="#glyph0-2"
+ x="198.389746"
+ y="242.543"
+ id="use875" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g891">
+ <use
+ xlink:href="#glyph0-3"
+ x="204.087357"
+ y="242.543"
+ id="use879" />
+ <use
+ xlink:href="#glyph0-11"
+ x="206.467422"
+ y="242.543"
+ id="use881" />
<use xlink:href="#glyph0-19" x="211.615098" y="242.543"/>
<use xlink:href="#glyph0-26" x="216.762773" y="242.543"/>
- <use xlink:href="#glyph0-18" x="221.910449" y="242.543"/>
- <use xlink:href="#glyph0-16" x="225.507944" y="242.543"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-11" x="143.896" y="254.498"/>
- <use xlink:href="#glyph0-8" x="149.043675" y="254.498"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-15" x="153.746023" y="254.498"/>
-</g>
+ <use
+ xlink:href="#glyph0-18"
+ x="221.910449"
+ y="242.543"
+ id="use887" />
+ <use
+ xlink:href="#glyph0-16"
+ x="225.507944"
+ y="242.543"
+ id="use889" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g897">
+ <use
+ xlink:href="#glyph0-11"
+ x="143.896"
+ y="254.498"
+ id="use893" />
+ <use
+ xlink:href="#glyph0-8"
+ x="149.043675"
+ y="254.498"
+ id="use895" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g901">
+ <use
+ xlink:href="#glyph0-15"
+ x="153.746023"
+ y="254.498"
+ id="use899" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-17" x="163.871013" y="254.498"/>
<use xlink:href="#glyph0-10" x="169.018688" y="254.498"/>
- <use xlink:href="#glyph0-39" x="173.806714" y="254.498"/>
- <use xlink:href="#glyph0-5" x="178.400469" y="254.498"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-24" x="186.156353" y="254.498"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="194.455199" y="254.498"/>
- <use xlink:href="#glyph0-3" x="198.273863" y="254.498"/>
+ <use
+ xlink:href="#glyph0-39"
+ x="173.806714"
+ y="254.498"
+ id="use907" />
+ <use
+ xlink:href="#glyph0-5"
+ x="178.400469"
+ y="254.498"
+ id="use909" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g915">
+ <use
+ xlink:href="#glyph0-24"
+ x="186.156353"
+ y="254.498"
+ id="use913" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g939">
+ <use
+ xlink:href="#glyph0-16"
+ x="194.455199"
+ y="254.498"
+ id="use917" />
+ <use
+ xlink:href="#glyph0-3"
+ x="198.273863"
+ y="254.498"
+ id="use919" />
<use xlink:href="#glyph0-27" x="200.653928" y="254.498"/>
<use xlink:href="#glyph0-11" x="205.635228" y="254.498"/>
- <use xlink:href="#glyph0-10" x="210.782904" y="254.498"/>
- <use xlink:href="#glyph0-18" x="215.570929" y="254.498"/>
- <use xlink:href="#glyph0-26" x="219.168424" y="254.498"/>
- <use xlink:href="#glyph0-14" x="224.3161" y="254.498"/>
- <use xlink:href="#glyph0-5" x="227.72032" y="254.498"/>
- <use xlink:href="#glyph0-16" x="232.148696" y="254.498"/>
- <use xlink:href="#glyph0-28" x="235.96736" y="254.498"/>
-</g>
+ <use
+ xlink:href="#glyph0-10"
+ x="210.782904"
+ y="254.498"
+ id="use925" />
+ <use
+ xlink:href="#glyph0-18"
+ x="215.570929"
+ y="254.498"
+ id="use927" />
+ <use
+ xlink:href="#glyph0-26"
+ x="219.168424"
+ y="254.498"
+ id="use929" />
+ <use
+ xlink:href="#glyph0-14"
+ x="224.3161"
+ y="254.498"
+ id="use931" />
+ <use
+ xlink:href="#glyph0-5"
+ x="227.72032"
+ y="254.498"
+ id="use933" />
+ <use
+ xlink:href="#glyph0-16"
+ x="232.148696"
+ y="254.498"
+ id="use935" />
+ <use
+ xlink:href="#glyph0-28"
+ x="235.96736"
+ y="254.498"
+ id="use937" />
+ </g>
<path style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -55.623594 -31.660406 L 55.626406 -31.660406 L 55.626406 31.659906 L -55.623594 31.659906 Z M -55.623594 -31.660406 " transform="matrix(1,0,0,-1,191.315,303.281)"/>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="154.972" y="281.862"/>
- <use xlink:href="#glyph0-2" x="161.614065" y="281.862"/>
- <use xlink:href="#glyph0-3" x="163.994131" y="281.862"/>
- <use xlink:href="#glyph0-4" x="166.374196" y="281.862"/>
- <use xlink:href="#glyph0-5" x="170.802571" y="281.862"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-35" x="178.548493" y="281.862"/>
- <use xlink:href="#glyph0-11" x="183.889443" y="281.862"/>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g953">
+ <use
+ xlink:href="#glyph0-1"
+ x="154.972"
+ y="281.862"
+ id="use943" />
+ <use
+ xlink:href="#glyph0-2"
+ x="161.614065"
+ y="281.862"
+ id="use945" />
+ <use
+ xlink:href="#glyph0-3"
+ x="163.994131"
+ y="281.862"
+ id="use947" />
+ <use
+ xlink:href="#glyph0-4"
+ x="166.374196"
+ y="281.862"
+ id="use949" />
+ <use
+ xlink:href="#glyph0-5"
+ x="170.802571"
+ y="281.862"
+ id="use951" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g971">
+ <use
+ xlink:href="#glyph0-35"
+ x="178.548493"
+ y="281.862"
+ id="use955" />
+ <use
+ xlink:href="#glyph0-11"
+ x="183.889443"
+ y="281.862"
+ id="use957" />
<use xlink:href="#glyph0-10" x="189.037118" y="281.862"/>
<use xlink:href="#glyph0-2" x="193.825144" y="281.862"/>
- <use xlink:href="#glyph0-3" x="196.205209" y="281.862"/>
- <use xlink:href="#glyph0-40" x="198.585274" y="281.862"/>
- <use xlink:href="#glyph0-5" x="202.916016" y="281.862"/>
- <use xlink:href="#glyph0-16" x="207.344392" y="281.862"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="214.480602" y="281.862"/>
- <use xlink:href="#glyph0-17" x="218.078097" y="281.862"/>
- <use xlink:href="#glyph0-5" x="223.225773" y="281.862"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use
+ xlink:href="#glyph0-3"
+ x="196.205209"
+ y="281.862"
+ id="use963" />
+ <use
+ xlink:href="#glyph0-40"
+ x="198.585274"
+ y="281.862"
+ id="use965" />
+ <use
+ xlink:href="#glyph0-5"
+ x="202.916016"
+ y="281.862"
+ id="use967" />
+ <use
+ xlink:href="#glyph0-16"
+ x="207.344392"
+ y="281.862"
+ id="use969" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g979">
+ <use
+ xlink:href="#glyph0-18"
+ x="214.480602"
+ y="281.862"
+ id="use973" />
+ <use
+ xlink:href="#glyph0-17"
+ x="218.078097"
+ y="281.862"
+ id="use975" />
+ <use
+ xlink:href="#glyph0-5"
+ x="223.225773"
+ y="281.862"
+ id="use977" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g989">
<use xlink:href="#glyph0-29" x="142.969" y="293.817"/>
<use xlink:href="#glyph0-30" x="149.334105" y="293.817"/>
- <use xlink:href="#glyph0-7" x="154.869326" y="293.817"/>
- <use xlink:href="#glyph0-31" x="161.511391" y="293.817"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-9" x="171.609482" y="293.817"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-37" x="176.478205" y="293.817"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-4" x="184.399468" y="293.817"/>
- <use xlink:href="#glyph0-14" x="188.827844" y="293.817"/>
+ <use
+ xlink:href="#glyph0-7"
+ x="154.869326"
+ y="293.817"
+ id="use985" />
+ <use
+ xlink:href="#glyph0-31"
+ x="161.511391"
+ y="293.817"
+ id="use987" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g993">
+ <use
+ xlink:href="#glyph0-9"
+ x="171.609482"
+ y="293.817"
+ id="use991" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g997">
+ <use
+ xlink:href="#glyph0-37"
+ x="176.478205"
+ y="293.817"
+ id="use995" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1007">
+ <use
+ xlink:href="#glyph0-4"
+ x="184.399468"
+ y="293.817"
+ id="use999" />
+ <use
+ xlink:href="#glyph0-14"
+ x="188.827844"
+ y="293.817"
+ id="use1001" />
<use xlink:href="#glyph0-5" x="192.232064" y="293.817"/>
<use xlink:href="#glyph0-10" x="196.66044" y="293.817"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="201.438503" y="293.817"/>
- <use xlink:href="#glyph0-3" x="205.035998" y="293.817"/>
- <use xlink:href="#glyph0-11" x="207.416063" y="293.817"/>
- <use xlink:href="#glyph0-27" x="212.563739" y="293.817"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-5" x="220.872547" y="293.817"/>
- <use xlink:href="#glyph0-10" x="225.300923" y="293.817"/>
- <use xlink:href="#glyph0-4" x="230.088948" y="293.817"/>
- <use xlink:href="#glyph0-17" x="234.517324" y="293.817"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="145.944" y="305.772"/>
- <use xlink:href="#glyph0-11" x="148.324065" y="305.772"/>
- <use xlink:href="#glyph0-19" x="153.471741" y="305.772"/>
- <use xlink:href="#glyph0-26" x="158.619416" y="305.772"/>
- <use xlink:href="#glyph0-18" x="163.767091" y="305.772"/>
- <use xlink:href="#glyph0-41" x="167.364586" y="305.772"/>
- <use xlink:href="#glyph0-16" x="170.132197" y="305.772"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-35" x="177.268407" y="305.772"/>
- <use xlink:href="#glyph0-11" x="182.609357" y="305.772"/>
- <use xlink:href="#glyph0-10" x="187.757032" y="305.772"/>
- <use xlink:href="#glyph0-2" x="192.545058" y="305.772"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="198.242669" y="305.772"/>
- <use xlink:href="#glyph0-4" x="202.061333" y="305.772"/>
- <use xlink:href="#glyph0-14" x="206.489709" y="305.772"/>
- <use xlink:href="#glyph0-3" x="209.893929" y="305.772"/>
- <use xlink:href="#glyph0-19" x="212.273995" y="305.772"/>
- <use xlink:href="#glyph0-18" x="217.42167" y="305.772"/>
- <use xlink:href="#glyph0-30" x="221.019165" y="305.772"/>
- <use xlink:href="#glyph0-3" x="226.554385" y="305.772"/>
- <use xlink:href="#glyph0-27" x="228.934451" y="305.772"/>
- <use xlink:href="#glyph0-28" x="233.915751" y="305.772"/>
-</g>
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1017">
+ <use
+ xlink:href="#glyph0-18"
+ x="201.438503"
+ y="293.817"
+ id="use1009" />
+ <use
+ xlink:href="#glyph0-3"
+ x="205.035998"
+ y="293.817"
+ id="use1011" />
+ <use
+ xlink:href="#glyph0-11"
+ x="207.416063"
+ y="293.817"
+ id="use1013" />
+ <use
+ xlink:href="#glyph0-27"
+ x="212.563739"
+ y="293.817"
+ id="use1015" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1027">
+ <use
+ xlink:href="#glyph0-5"
+ x="220.872547"
+ y="293.817"
+ id="use1019" />
+ <use
+ xlink:href="#glyph0-10"
+ x="225.300923"
+ y="293.817"
+ id="use1021" />
+ <use
+ xlink:href="#glyph0-4"
+ x="230.088948"
+ y="293.817"
+ id="use1023" />
+ <use
+ xlink:href="#glyph0-17"
+ x="234.517324"
+ y="293.817"
+ id="use1025" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1043">
+ <use
+ xlink:href="#glyph0-3"
+ x="145.944"
+ y="305.772"
+ id="use1029" />
+ <use
+ xlink:href="#glyph0-11"
+ x="148.324065"
+ y="305.772"
+ id="use1031" />
+ <use
+ xlink:href="#glyph0-19"
+ x="153.471741"
+ y="305.772"
+ id="use1033" />
+ <use
+ xlink:href="#glyph0-26"
+ x="158.619416"
+ y="305.772"
+ id="use1035" />
+ <use
+ xlink:href="#glyph0-18"
+ x="163.767091"
+ y="305.772"
+ id="use1037" />
+ <use
+ xlink:href="#glyph0-41"
+ x="167.364586"
+ y="305.772"
+ id="use1039" />
+ <use
+ xlink:href="#glyph0-16"
+ x="170.132197"
+ y="305.772"
+ id="use1041" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1053">
+ <use
+ xlink:href="#glyph0-35"
+ x="177.268407"
+ y="305.772"
+ id="use1045" />
+ <use
+ xlink:href="#glyph0-11"
+ x="182.609357"
+ y="305.772"
+ id="use1047" />
+ <use
+ xlink:href="#glyph0-10"
+ x="187.757032"
+ y="305.772"
+ id="use1049" />
+ <use
+ xlink:href="#glyph0-2"
+ x="192.545058"
+ y="305.772"
+ id="use1051" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1075">
+ <use
+ xlink:href="#glyph0-16"
+ x="198.242669"
+ y="305.772"
+ id="use1055" />
+ <use
+ xlink:href="#glyph0-4"
+ x="202.061333"
+ y="305.772"
+ id="use1057" />
+ <use
+ xlink:href="#glyph0-14"
+ x="206.489709"
+ y="305.772"
+ id="use1059" />
+ <use
+ xlink:href="#glyph0-3"
+ x="209.893929"
+ y="305.772"
+ id="use1061" />
+ <use
+ xlink:href="#glyph0-19"
+ x="212.273995"
+ y="305.772"
+ id="use1063" />
+ <use
+ xlink:href="#glyph0-18"
+ x="217.42167"
+ y="305.772"
+ id="use1065" />
+ <use
+ xlink:href="#glyph0-30"
+ x="221.019165"
+ y="305.772"
+ id="use1067" />
+ <use
+ xlink:href="#glyph0-3"
+ x="226.554385"
+ y="305.772"
+ id="use1069" />
+ <use
+ xlink:href="#glyph0-27"
+ x="228.934451"
+ y="305.772"
+ id="use1071" />
+ <use
+ xlink:href="#glyph0-28"
+ x="233.915751"
+ y="305.772"
+ id="use1073" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-34" x="155.118" y="317.727"/>
<use xlink:href="#glyph0-11" x="162.45147" y="317.727"/>
<use xlink:href="#glyph0-5" x="167.599145" y="317.727"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="175.345067" y="317.727"/>
- <use xlink:href="#glyph0-3" x="179.163731" y="317.727"/>
- <use xlink:href="#glyph0-27" x="181.543797" y="317.727"/>
- <use xlink:href="#glyph0-11" x="186.525097" y="317.727"/>
- <use xlink:href="#glyph0-10" x="191.672772" y="317.727"/>
- <use xlink:href="#glyph0-18" x="196.460797" y="317.727"/>
- <use xlink:href="#glyph0-26" x="200.058292" y="317.727"/>
- <use xlink:href="#glyph0-14" x="205.205968" y="317.727"/>
- <use xlink:href="#glyph0-5" x="208.610188" y="317.727"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-20" x="216.35611" y="317.727"/>
- <use xlink:href="#glyph0-8" x="219.40068" y="317.727"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="224.103027" y="317.727"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-5" x="144.906" y="329.682"/>
- <use xlink:href="#glyph0-10" x="149.334376" y="329.682"/>
- <use xlink:href="#glyph0-4" x="154.122401" y="329.682"/>
- <use xlink:href="#glyph0-17" x="158.550777" y="329.682"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="167.015998" y="329.682"/>
- <use xlink:href="#glyph0-11" x="169.396063" y="329.682"/>
- <use xlink:href="#glyph0-19" x="174.543739" y="329.682"/>
- <use xlink:href="#glyph0-26" x="179.691414" y="329.682"/>
- <use xlink:href="#glyph0-18" x="184.83909" y="329.682"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1103">
+ <use
+ xlink:href="#glyph0-16"
+ x="175.345067"
+ y="317.727"
+ id="use1085" />
+ <use
+ xlink:href="#glyph0-3"
+ x="179.163731"
+ y="317.727"
+ id="use1087" />
+ <use
+ xlink:href="#glyph0-27"
+ x="181.543797"
+ y="317.727"
+ id="use1089" />
+ <use
+ xlink:href="#glyph0-11"
+ x="186.525097"
+ y="317.727"
+ id="use1091" />
+ <use
+ xlink:href="#glyph0-10"
+ x="191.672772"
+ y="317.727"
+ id="use1093" />
+ <use
+ xlink:href="#glyph0-18"
+ x="196.460797"
+ y="317.727"
+ id="use1095" />
+ <use
+ xlink:href="#glyph0-26"
+ x="200.058292"
+ y="317.727"
+ id="use1097" />
+ <use
+ xlink:href="#glyph0-14"
+ x="205.205968"
+ y="317.727"
+ id="use1099" />
+ <use
+ xlink:href="#glyph0-5"
+ x="208.610188"
+ y="317.727"
+ id="use1101" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1109">
+ <use
+ xlink:href="#glyph0-20"
+ x="216.35611"
+ y="317.727"
+ id="use1105" />
+ <use
+ xlink:href="#glyph0-8"
+ x="219.40068"
+ y="317.727"
+ id="use1107" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1113">
+ <use
+ xlink:href="#glyph0-14"
+ x="224.103027"
+ y="317.727"
+ id="use1111" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1123">
+ <use
+ xlink:href="#glyph0-5"
+ x="144.906"
+ y="329.682"
+ id="use1115" />
+ <use
+ xlink:href="#glyph0-10"
+ x="149.334376"
+ y="329.682"
+ id="use1117" />
+ <use
+ xlink:href="#glyph0-4"
+ x="154.122401"
+ y="329.682"
+ id="use1119" />
+ <use
+ xlink:href="#glyph0-17"
+ x="158.550777"
+ y="329.682"
+ id="use1121" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1135">
+ <use
+ xlink:href="#glyph0-3"
+ x="167.015998"
+ y="329.682"
+ id="use1125" />
+ <use
+ xlink:href="#glyph0-11"
+ x="169.396063"
+ y="329.682"
+ id="use1127" />
+ <use
+ xlink:href="#glyph0-19"
+ x="174.543739"
+ y="329.682"
+ id="use1129" />
+ <use
+ xlink:href="#glyph0-26"
+ x="179.691414"
+ y="329.682"
+ id="use1131" />
+ <use
+ xlink:href="#glyph0-18"
+ x="184.83909"
+ y="329.682"
+ id="use1133" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="191.75413" y="329.682"/>
<use xlink:href="#glyph0-16" x="194.134195" y="329.682"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-12" x="201.280368" y="329.682"/>
- <use xlink:href="#glyph0-14" x="206.428044" y="329.682"/>
- <use xlink:href="#glyph0-8" x="209.832264" y="329.682"/>
- <use xlink:href="#glyph0-19" x="214.813564" y="329.682"/>
- <use xlink:href="#glyph0-19" x="219.96124" y="329.682"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-5" x="225.377905" y="329.682"/>
- <use xlink:href="#glyph0-12" x="229.806281" y="329.682"/>
- <use xlink:href="#glyph0-28" x="234.953956" y="329.682"/>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1153">
+ <use
+ xlink:href="#glyph0-12"
+ x="201.280368"
+ y="329.682"
+ id="use1143" />
+ <use
+ xlink:href="#glyph0-14"
+ x="206.428044"
+ y="329.682"
+ id="use1145" />
+ <use
+ xlink:href="#glyph0-8"
+ x="209.832264"
+ y="329.682"
+ id="use1147" />
+ <use
+ xlink:href="#glyph0-19"
+ x="214.813564"
+ y="329.682"
+ id="use1149" />
+ <use
+ xlink:href="#glyph0-19"
+ x="219.96124"
+ y="329.682"
+ id="use1151" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1161">
+ <use
+ xlink:href="#glyph0-5"
+ x="225.377905"
+ y="329.682"
+ id="use1155" />
+ <use
+ xlink:href="#glyph0-12"
+ x="229.806281"
+ y="329.682"
+ id="use1157" />
+ <use
+ xlink:href="#glyph0-28"
+ x="234.953956"
+ y="329.682"
+ id="use1159" />
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 230.5 346.804688 L 152.128906 346.804688 C 149.925781 346.804688 148.144531 348.589844 148.144531 350.792969 L 148.144531 404.203125 C 148.144531 406.402344 149.925781 408.1875 152.128906 408.1875 L 230.5 408.1875 C 232.703125 408.1875 234.488281 406.402344 234.488281 404.203125 L 234.488281 350.792969 C 234.488281 348.589844 232.703125 346.804688 230.5 346.804688 Z M 230.5 346.804688 "/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 39.185 30.692312 L -39.186094 30.692312 C -41.389219 30.692312 -43.170469 28.907156 -43.170469 26.704031 L -43.170469 -26.706125 C -43.170469 -28.905344 -41.389219 -30.6905 -39.186094 -30.6905 L 39.185 -30.6905 C 41.388125 -30.6905 43.173281 -28.905344 43.173281 -26.706125 L 43.173281 26.704031 C 43.173281 28.907156 41.388125 30.692312 39.185 30.692312 Z M 39.185 30.692312 " transform="matrix(1,0,0,-1,191.315,377.497)"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-1" x="154.951" y="357.046"/>
- <use xlink:href="#glyph0-2" x="161.593065" y="357.046"/>
- <use xlink:href="#glyph0-3" x="163.973131" y="357.046"/>
- <use xlink:href="#glyph0-4" x="166.353196" y="357.046"/>
- <use xlink:href="#glyph0-5" x="170.781571" y="357.046"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-5" x="178.527493" y="357.046"/>
- <use xlink:href="#glyph0-42" x="182.955869" y="357.046"/>
- <use xlink:href="#glyph0-18" x="187.549623" y="357.046"/>
- <use xlink:href="#glyph0-14" x="191.147118" y="357.046"/>
- <use xlink:href="#glyph0-10" x="194.551339" y="357.046"/>
- <use xlink:href="#glyph0-4" x="199.339364" y="357.046"/>
- <use xlink:href="#glyph0-18" x="203.76774" y="357.046"/>
- <use xlink:href="#glyph0-16" x="207.365235" y="357.046"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="214.501445" y="357.046"/>
- <use xlink:href="#glyph0-17" x="218.09894" y="357.046"/>
- <use xlink:href="#glyph0-5" x="223.246616" y="357.046"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-11" x="154.709" y="369.001"/>
- <use xlink:href="#glyph0-5" x="159.856675" y="369.001"/>
- <use xlink:href="#glyph0-18" x="164.285051" y="369.001"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1179">
+ <use
+ xlink:href="#glyph0-1"
+ x="154.951"
+ y="357.046"
+ id="use1169" />
+ <use
+ xlink:href="#glyph0-2"
+ x="161.593065"
+ y="357.046"
+ id="use1171" />
+ <use
+ xlink:href="#glyph0-3"
+ x="163.973131"
+ y="357.046"
+ id="use1173" />
+ <use
+ xlink:href="#glyph0-4"
+ x="166.353196"
+ y="357.046"
+ id="use1175" />
+ <use
+ xlink:href="#glyph0-5"
+ x="170.781571"
+ y="357.046"
+ id="use1177" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1197">
+ <use
+ xlink:href="#glyph0-5"
+ x="178.527493"
+ y="357.046"
+ id="use1181" />
+ <use
+ xlink:href="#glyph0-42"
+ x="182.955869"
+ y="357.046"
+ id="use1183" />
+ <use
+ xlink:href="#glyph0-18"
+ x="187.549623"
+ y="357.046"
+ id="use1185" />
+ <use
+ xlink:href="#glyph0-14"
+ x="191.147118"
+ y="357.046"
+ id="use1187" />
+ <use
+ xlink:href="#glyph0-10"
+ x="194.551339"
+ y="357.046"
+ id="use1189" />
+ <use
+ xlink:href="#glyph0-4"
+ x="199.339364"
+ y="357.046"
+ id="use1191" />
+ <use
+ xlink:href="#glyph0-18"
+ x="203.76774"
+ y="357.046"
+ id="use1193" />
+ <use
+ xlink:href="#glyph0-16"
+ x="207.365235"
+ y="357.046"
+ id="use1195" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1205">
+ <use
+ xlink:href="#glyph0-18"
+ x="214.501445"
+ y="357.046"
+ id="use1199" />
+ <use
+ xlink:href="#glyph0-17"
+ x="218.09894"
+ y="357.046"
+ id="use1201" />
+ <use
+ xlink:href="#glyph0-5"
+ x="223.246616"
+ y="357.046"
+ id="use1203" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1213">
+ <use
+ xlink:href="#glyph0-11"
+ x="154.709"
+ y="369.001"
+ id="use1207" />
+ <use
+ xlink:href="#glyph0-5"
+ x="159.856675"
+ y="369.001"
+ id="use1209" />
+ <use
+ xlink:href="#glyph0-18"
+ x="164.285051"
+ y="369.001"
+ id="use1211" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-15" x="167.603593" y="369.001"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-8" x="174.132085" y="369.001"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="178.844395" y="369.001"/>
- <use xlink:href="#glyph0-43" x="182.248615" y="369.001"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-16" x="190.436876" y="369.001"/>
- <use xlink:href="#glyph0-5" x="194.255541" y="369.001"/>
- <use xlink:href="#glyph0-14" x="198.683916" y="369.001"/>
- <use xlink:href="#glyph0-3" x="202.088137" y="369.001"/>
- <use xlink:href="#glyph0-10" x="204.468202" y="369.001"/>
- <use xlink:href="#glyph0-2" x="209.256228" y="369.001"/>
- <use xlink:href="#glyph0-3" x="211.636293" y="369.001"/>
- <use xlink:href="#glyph0-40" x="214.016358" y="369.001"/>
- <use xlink:href="#glyph0-5" x="218.3471" y="369.001"/>
- <use xlink:href="#glyph0-12" x="222.775476" y="369.001"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="159.075" y="380.956"/>
- <use xlink:href="#glyph0-14" x="162.672495" y="380.956"/>
- <use xlink:href="#glyph0-10" x="166.076715" y="380.956"/>
- <use xlink:href="#glyph0-11" x="170.864741" y="380.956"/>
- <use xlink:href="#glyph0-16" x="176.012416" y="380.956"/>
- <use xlink:href="#glyph0-10" x="179.831081" y="380.956"/>
- <use xlink:href="#glyph0-4" x="184.619106" y="380.956"/>
- <use xlink:href="#glyph0-18" x="189.047482" y="380.956"/>
- <use xlink:href="#glyph0-3" x="192.644977" y="380.956"/>
- <use xlink:href="#glyph0-8" x="195.025042" y="380.956"/>
- <use xlink:href="#glyph0-11" x="200.006342" y="380.956"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-10" x="208.471563" y="380.956"/>
- <use xlink:href="#glyph0-11" x="213.259589" y="380.956"/>
- <use xlink:href="#glyph0-12" x="218.407264" y="380.956"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1221">
+ <use
+ xlink:href="#glyph0-8"
+ x="174.132085"
+ y="369.001"
+ id="use1219" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1227">
+ <use
+ xlink:href="#glyph0-14"
+ x="178.844395"
+ y="369.001"
+ id="use1223" />
+ <use
+ xlink:href="#glyph0-43"
+ x="182.248615"
+ y="369.001"
+ id="use1225" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1249">
+ <use
+ xlink:href="#glyph0-16"
+ x="190.436876"
+ y="369.001"
+ id="use1229" />
+ <use
+ xlink:href="#glyph0-5"
+ x="194.255541"
+ y="369.001"
+ id="use1231" />
+ <use
+ xlink:href="#glyph0-14"
+ x="198.683916"
+ y="369.001"
+ id="use1233" />
+ <use
+ xlink:href="#glyph0-3"
+ x="202.088137"
+ y="369.001"
+ id="use1235" />
+ <use
+ xlink:href="#glyph0-10"
+ x="204.468202"
+ y="369.001"
+ id="use1237" />
+ <use
+ xlink:href="#glyph0-2"
+ x="209.256228"
+ y="369.001"
+ id="use1239" />
+ <use
+ xlink:href="#glyph0-3"
+ x="211.636293"
+ y="369.001"
+ id="use1241" />
+ <use
+ xlink:href="#glyph0-40"
+ x="214.016358"
+ y="369.001"
+ id="use1243" />
+ <use
+ xlink:href="#glyph0-5"
+ x="218.3471"
+ y="369.001"
+ id="use1245" />
+ <use
+ xlink:href="#glyph0-12"
+ x="222.775476"
+ y="369.001"
+ id="use1247" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1273">
+ <use
+ xlink:href="#glyph0-18"
+ x="159.075"
+ y="380.956"
+ id="use1251" />
+ <use
+ xlink:href="#glyph0-14"
+ x="162.672495"
+ y="380.956"
+ id="use1253" />
+ <use
+ xlink:href="#glyph0-10"
+ x="166.076715"
+ y="380.956"
+ id="use1255" />
+ <use
+ xlink:href="#glyph0-11"
+ x="170.864741"
+ y="380.956"
+ id="use1257" />
+ <use
+ xlink:href="#glyph0-16"
+ x="176.012416"
+ y="380.956"
+ id="use1259" />
+ <use
+ xlink:href="#glyph0-10"
+ x="179.831081"
+ y="380.956"
+ id="use1261" />
+ <use
+ xlink:href="#glyph0-4"
+ x="184.619106"
+ y="380.956"
+ id="use1263" />
+ <use
+ xlink:href="#glyph0-18"
+ x="189.047482"
+ y="380.956"
+ id="use1265" />
+ <use
+ xlink:href="#glyph0-3"
+ x="192.644977"
+ y="380.956"
+ id="use1267" />
+ <use
+ xlink:href="#glyph0-8"
+ x="195.025042"
+ y="380.956"
+ id="use1269" />
+ <use
+ xlink:href="#glyph0-11"
+ x="200.006342"
+ y="380.956"
+ id="use1271" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1281">
+ <use
+ xlink:href="#glyph0-10"
+ x="208.471563"
+ y="380.956"
+ id="use1275" />
+ <use
+ xlink:href="#glyph0-11"
+ x="213.259589"
+ y="380.956"
+ id="use1277" />
+ <use
+ xlink:href="#glyph0-12"
+ x="218.407264"
+ y="380.956"
+ id="use1279" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-9" x="164.845" y="392.911"/>
</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-14" x="169.713723" y="392.911"/>
- <use xlink:href="#glyph0-8" x="173.117943" y="392.911"/>
- <use xlink:href="#glyph0-10" x="178.099243" y="392.911"/>
- <use xlink:href="#glyph0-12" x="182.887269" y="392.911"/>
- <use xlink:href="#glyph0-4" x="188.034944" y="392.911"/>
- <use xlink:href="#glyph0-10" x="192.46332" y="392.911"/>
- <use xlink:href="#glyph0-16" x="197.251345" y="392.911"/>
- <use xlink:href="#glyph0-18" x="201.07001" y="392.911"/>
- <use xlink:href="#glyph0-16" x="204.667505" y="392.911"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-3" x="211.803715" y="392.911"/>
- <use xlink:href="#glyph0-18" x="214.18378" y="392.911"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="159.532" y="404.866"/>
- <use xlink:href="#glyph0-8" x="163.129495" y="404.866"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-18" x="171.428341" y="404.866"/>
- <use xlink:href="#glyph0-17" x="175.025836" y="404.866"/>
- <use xlink:href="#glyph0-5" x="180.173511" y="404.866"/>
-</g>
-<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
- <use xlink:href="#glyph0-11" x="187.919432" y="404.866"/>
- <use xlink:href="#glyph0-5" x="193.067108" y="404.866"/>
- <use xlink:href="#glyph0-18" x="197.495484" y="404.866"/>
-</g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1305">
+ <use
+ xlink:href="#glyph0-14"
+ x="169.713723"
+ y="392.911"
+ id="use1287" />
+ <use
+ xlink:href="#glyph0-8"
+ x="173.117943"
+ y="392.911"
+ id="use1289" />
+ <use
+ xlink:href="#glyph0-10"
+ x="178.099243"
+ y="392.911"
+ id="use1291" />
+ <use
+ xlink:href="#glyph0-12"
+ x="182.887269"
+ y="392.911"
+ id="use1293" />
+ <use
+ xlink:href="#glyph0-4"
+ x="188.034944"
+ y="392.911"
+ id="use1295" />
+ <use
+ xlink:href="#glyph0-10"
+ x="192.46332"
+ y="392.911"
+ id="use1297" />
+ <use
+ xlink:href="#glyph0-16"
+ x="197.251345"
+ y="392.911"
+ id="use1299" />
+ <use
+ xlink:href="#glyph0-18"
+ x="201.07001"
+ y="392.911"
+ id="use1301" />
+ <use
+ xlink:href="#glyph0-16"
+ x="204.667505"
+ y="392.911"
+ id="use1303" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1311">
+ <use
+ xlink:href="#glyph0-3"
+ x="211.803715"
+ y="392.911"
+ id="use1307" />
+ <use
+ xlink:href="#glyph0-18"
+ x="214.18378"
+ y="392.911"
+ id="use1309" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1317">
+ <use
+ xlink:href="#glyph0-18"
+ x="159.532"
+ y="404.866"
+ id="use1313" />
+ <use
+ xlink:href="#glyph0-8"
+ x="163.129495"
+ y="404.866"
+ id="use1315" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1325">
+ <use
+ xlink:href="#glyph0-18"
+ x="171.428341"
+ y="404.866"
+ id="use1319" />
+ <use
+ xlink:href="#glyph0-17"
+ x="175.025836"
+ y="404.866"
+ id="use1321" />
+ <use
+ xlink:href="#glyph0-5"
+ x="180.173511"
+ y="404.866"
+ id="use1323" />
+ </g>
+ <g
+ style="fill:rgb(0%,0%,0%);fill-opacity:1;"
+ id="g1333">
+ <use
+ xlink:href="#glyph0-11"
+ x="187.919432"
+ y="404.866"
+ id="use1327" />
+ <use
+ xlink:href="#glyph0-5"
+ x="193.067108"
+ y="404.866"
+ id="use1329" />
+ <use
+ xlink:href="#glyph0-18"
+ x="197.495484"
+ y="404.866"
+ id="use1331" />
+ </g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-15" x="200.823988" y="404.866"/>
</g>
@@ -873,23 +2552,173 @@
<use xlink:href="#glyph0-43" x="215.459048" y="404.866"/>
<use xlink:href="#glyph0-28" x="220.329763" y="404.866"/>
</g>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -56.022031 92.906125 L -125.330625 92.906125 L -125.330625 72.913937 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 65.984375 138.238281 C 66.273438 136.699219 67.140625 134.195312 68.152344 132.460938 L 63.816406 132.460938 C 64.828125 134.195312 65.695312 136.699219 65.984375 138.238281 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 162.429562 L 0.00140625 156.562375 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.316406 54.59375 C 191.605469 53.050781 192.46875 50.546875 193.480469 48.8125 L 189.148438 48.8125 C 190.160156 50.546875 191.027344 53.050781 191.316406 54.59375 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 111.156125 L 0.00140625 105.285031 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.316406 105.867188 C 191.605469 104.324219 192.46875 101.820312 193.480469 100.089844 L 189.148438 100.089844 C 190.160156 101.820312 191.027344 104.324219 191.316406 105.867188 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 85.730344 L 0.00140625 72.913937 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.316406 138.238281 C 191.605469 136.699219 192.46875 134.195312 193.480469 132.460938 L 189.148438 132.460938 C 190.160156 134.195312 191.027344 136.699219 191.316406 138.238281 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 -2.925906 L 0.00140625 -8.797 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.316406 219.949219 C 191.605469 218.410156 192.46875 215.90625 193.480469 214.171875 L 189.148438 214.171875 C 190.160156 215.90625 191.027344 218.410156 191.316406 219.949219 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 -54.20325 L 0.00140625 -60.070438 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.316406 271.226562 C 191.605469 269.683594 192.46875 267.179688 193.480469 265.445312 L 189.148438 265.445312 C 190.160156 267.179688 191.027344 269.683594 191.316406 271.226562 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 -129.386844 L 0.00140625 -135.257938 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.316406 346.410156 C 191.605469 344.867188 192.46875 342.363281 193.480469 340.632812 L 189.148438 340.632812 C 190.160156 342.363281 191.027344 344.867188 191.316406 346.410156 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -125.330625 41.402219 L -125.330625 32.6405 L 0.00140625 32.6405 L 0.00140625 23.386594 M 125.329531 34.453 L 125.329531 32.6405 L 0.00140625 32.6405 L 0.00140625 23.386594 M 56.024844 92.906125 L 125.329531 92.906125 L 125.329531 79.85925 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 316.644531 131.292969 C 316.933594 129.753906 317.800781 127.25 318.8125 125.515625 L 314.480469 125.515625 C 315.492188 127.25 316.355469 129.753906 316.644531 131.292969 "/>
-<path style="fill:none;stroke-width:0.99628;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 41.402219 L 0.00140625 28.585812 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 191.316406 182.566406 C 191.605469 181.027344 192.46875 178.523438 193.480469 176.789062 L 189.148438 176.789062 C 190.160156 178.523438 191.027344 181.027344 191.316406 182.566406 "/>
+<path style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -56.022031 92.906125 L -125.330625 92.906125 L -125.330625 72.538937 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
+<path style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 6.054429 0.000445 L 2.171616 1.477007 L 3.48021 0.000445 L 2.171616 -1.480024 Z M 6.054429 0.000445 " transform="matrix(0,1,1,0,65.98393,130.26979)"/>
+<path style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00140625 162.429562 L 0.00140625 156.187375 " transform="matrix(1,0,0,-1,191.315,205.953)"/>
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.053411 0.00140625 L 2.170599 1.477969 L 3.479193 0.00140625 L 2.170599 -1.479062 Z M 6.053411 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,46.62237)"
+ id="path1357" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 111.156125 L 0.00140625 104.913937 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1359" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.056245 0.00140625 L 2.173433 1.477969 L 3.482026 0.00140625 L 2.173433 -1.479062 Z M 6.056245 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,97.89688)"
+ id="path1361" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 85.730344 L 0.00140625 72.538937 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1363" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.054429 0.00140625 L 2.171616 1.477969 L 3.48021 0.00140625 L 2.171616 -1.479062 Z M 6.054429 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,130.26979)"
+ id="path1365" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 -2.925906 L 0.00140625 -9.172 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1367" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.055156 0.00140625 L 2.172344 1.477969 L 3.480938 0.00140625 L 2.172344 -1.479062 Z M 6.055156 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,211.98)"
+ id="path1369" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 -54.20325 L 0.00140625 -60.445438 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1371" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.054094 0.00140625 L 2.171281 1.477969 L 3.479875 0.00140625 L 2.171281 -1.479062 Z M 6.054094 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,263.2545)"
+ id="path1373" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 -129.386844 L 0.00140625 -135.629031 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1375" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.056464 0.00140625 L 2.173651 1.477969 L 3.478339 0.00140625 L 2.173651 -1.479062 Z M 6.056464 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,338.43963)"
+ id="path1377" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -56.022031 92.906125 L -125.330625 92.906125 L -125.330625 72.929562 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1379" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.402085 0.000445 L 0.644273 2.539507 L 2.85521 0.000445 L 0.644273 -2.542524 Z M 7.402085 0.000445 "
+ transform="matrix(0,1,1,0,65.98393,130.26979)"
+ id="path1381" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 162.429562 L 0.00140625 156.578 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1383" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.401068 0.00140625 L 0.643255 2.540469 L 2.854193 0.00140625 L 0.643255 -2.541562 Z M 7.401068 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,46.62237)"
+ id="path1385" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 111.156125 L 0.00140625 105.300656 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1387" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.403901 0.00140625 L 0.642183 2.540469 L 2.85312 0.00140625 L 0.642183 -2.541562 Z M 7.403901 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,97.89688)"
+ id="path1389" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 85.730344 L 0.00140625 72.929562 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1391" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.402085 0.00140625 L 0.644273 2.540469 L 2.85521 0.00140625 L 0.644273 -2.541562 Z M 7.402085 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,130.26979)"
+ id="path1393" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 -2.925906 L 0.00140625 -8.781375 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1395" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.402813 0.00140625 L 0.645 2.540469 L 2.852031 0.00140625 L 0.645 -2.541562 Z M 7.402813 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,211.98)"
+ id="path1397" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 -54.20325 L 0.00140625 -60.054813 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1399" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.40175 0.00140625 L 0.643938 2.540469 L 2.854875 0.00140625 L 0.643938 -2.541562 Z M 7.40175 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,263.2545)"
+ id="path1401" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 -129.386844 L 0.00140625 -135.242313 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1403" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.40412 0.00140625 L 0.642401 2.540469 L 2.853339 0.00140625 L 0.642401 -2.541562 Z M 7.40412 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,338.43963)"
+ id="path1405" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -125.330625 41.402219 L -125.330625 32.6405 L 0.00140625 32.6405 L 0.00140625 23.386594 M 125.329531 34.453 L 125.329531 32.6405 L 0.00140625 32.6405 L 0.00140625 23.386594 M 56.024844 92.906125 L 125.329531 92.906125 L 125.329531 79.48425 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1407" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.055376 -0.00153875 L 2.172564 1.47893 L 3.481158 -0.00153875 L 2.172564 -1.478101 Z M 6.055376 -0.00153875 "
+ transform="matrix(0,1,1,0,316.64607,123.32353)"
+ id="path1409" />
+ <path
+ style="fill:none;stroke-width:1.59404;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 41.402219 L 0.00140625 28.210812 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1411" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:1.34497;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 6.054314 0.00140625 L 2.171501 1.477969 L 3.480095 0.00140625 L 2.171501 -1.479062 Z M 6.054314 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,174.59803)"
+ id="path1413" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M -125.330625 41.402219 L -125.330625 32.6405 L 0.00140625 32.6405 L 0.00140625 23.386594 M 125.329531 34.453 L 125.329531 32.6405 L 0.00140625 32.6405 L 0.00140625 23.386594 M 56.024844 92.906125 L 125.329531 92.906125 L 125.329531 79.874875 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1415" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.403033 -0.00153875 L 0.64522 2.54143 L 2.852251 -0.00153875 L 0.64522 -2.540601 Z M 7.403033 -0.00153875 "
+ transform="matrix(0,1,1,0,316.64607,123.32353)"
+ id="path1417" />
+ <path
+ style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(100%,100%,100%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 0.00140625 41.402219 L 0.00140625 28.601437 "
+ transform="matrix(1,0,0,-1,191.315,205.953)"
+ id="path1419" />
+ <path
+ style="fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;"
+ d="M 7.40197 0.00140625 L 0.644158 2.540469 L 2.855095 0.00140625 L 0.644158 -2.541562 Z M 7.40197 0.00140625 "
+ transform="matrix(0,1,1,0,191.315,174.59803)"
+ id="path1421" />
</g>
</svg>
diff --git a/bip-0174/multisig-workflow.tex b/bip-0174/multisig-workflow.tex
index 2b8744d..d2250cf 100644
--- a/bip-0174/multisig-workflow.tex
+++ b/bip-0174/multisig-workflow.tex
@@ -7,7 +7,7 @@
\usepackage{lmodern}
\renewcommand*\familydefault{\sfdefault}
\usepackage{tikz}
-\usetikzlibrary{shapes,arrows}
+\usetikzlibrary{shapes,arrows.meta}
\tikzset{>=latex}
%\pgfdeclarelayer{bg} % declare background layer
%\pgfsetlayers{bg,main} % set order of layers
@@ -83,7 +83,15 @@
};% end matrix
% connecting nodes with paths
% \begin{pgfonlayer}{bg}
- \draw[line width = 1pt, ->]
+ \draw [ultra thick, draw=black, -{Stealth[length=8pt]}]
+ (R1) edge (R2)
+ (R2) edge (R3)
+ (R3) -| (R4C1)
+ (R3) edge (R4C2)
+ (R5) edge (R6)
+ (R6) edge (R7)
+ (R7) edge (stop);
+ \draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}]
(R1) edge (R2)
(R2) edge (R3)
(R3) -| (R4C1)
@@ -92,7 +100,12 @@
(R6) edge (R7)
(R7) edge (stop);
% circumvent missing arrow
- \draw[line width = 1pt, ->]
+ \draw [ultra thick, draw=black, -{Stealth[length=8pt]}]
+ (R4C1) |-+(0,-2.2em)-| (R5)
+ (R4C2) edge (R5)
+ (R4C3) |-+(0,-2.2em)-| (R5)
+ (R3) -| (R4C3);
+ \draw [thin, white, -{Stealth[color=black, fill=white, length=8pt]}]
(R4C1) |-+(0,-2.2em)-| (R5)
(R4C2) edge (R5)
(R4C3) |-+(0,-2.2em)-| (R5)
diff --git a/bip-0176.mediawiki b/bip-0176.mediawiki
index 60311c4..2f5ee9f 100644
--- a/bip-0176.mediawiki
+++ b/bip-0176.mediawiki
@@ -16,7 +16,7 @@ Bits is presented here as the standard term for 100 (one hundred) satoshis or 1/
== Motivation ==
The bitcoin price has grown over the years and once the price is past $10,000 USD or so, bitcoin amounts under $10 USD start having enough decimal places that it's difficult to tell whether the user is off by a factor of 10 or not. Switching the denomination to "bits" makes comprehension easier. For example, when BTC is $15,000 USD, $10.05 is a somewhat confusing 0.00067 BTC, versus 670 bits, which is a lot clearer.
-Additonally, reverse comparisons are easier as 59 bits being $1 is easier to comprehend for most people than 0.000059 BTC being $1. Similar comparisons can be made to other currencies: 1 yen being 0.8 bits, 1 won being 0.07 bits and so on.
+Additionally, reverse comparisons are easier as 59 bits being $1 is easier to comprehend for most people than 0.000059 BTC being $1. Similar comparisons can be made to other currencies: 1 yen being 0.8 bits, 1 won being 0.07 bits and so on.
Potential benefits of utilizing "bits" include:
diff --git a/bip-0197.mediawiki b/bip-0197.mediawiki
index 427ff22..2cac042 100644
--- a/bip-0197.mediawiki
+++ b/bip-0197.mediawiki
@@ -79,7 +79,7 @@ The Seizable Collateral script takes the following form:
==Compatibility==
-BIP 197 is compatible with [ERC 1850](https://github.com/ethereum/EIPs/pull/1850) for [atomic loans](https://arxiv.org/pdf/1901.05117.pdf) with Ethereum. Can be extended in the future to be compatible with other HTLC and smart contract compatible chains.
+BIP 197 is compatible with [https://github.com/ethereum/EIPs/pull/1850 ERC 1850] for [https://arxiv.org/pdf/1901.05117.pdf atomic loans] with Ethereum. Can be extended in the future to be compatible with other HTLC and smart contract compatible chains.
==Motivation==
diff --git a/bip-0300.mediawiki b/bip-0300.mediawiki
index ab81c32..e5048e7 100644
--- a/bip-0300.mediawiki
+++ b/bip-0300.mediawiki
@@ -290,7 +290,7 @@ For example: if there are two sidechains, and we wish to upvote the 7th bundle o
The version number allows us to shrink the upvote vector in many cases.
Version 0x00 omits the upvote vector entirely (ie, 6 bytes for the whole M4) and sets this block's M4 equal to the previous block's M4.
Version 0x01 uses one byte per sidechain, and can be used while all ACKed withdrawals have an index under 256 (ie, 99.99%+ of the time).
-Version 0x02 uses a full two bytes per sidechain (each encoded in little endian), but it always works no matter how many withdrawl proposals exist.
+Version 0x02 uses a full two bytes per sidechain (each encoded in little endian), but it always works no matter how many withdrawal proposals exist.
Version 0x03 omits the upvote vector, and instead upvotes only those withdrawals that are leading their rivals by at least 50 votes.
If a sidechain has no pending bundles, then it is skipped over when M4 is created and parsed.
@@ -465,7 +465,7 @@ M2: 1 get, 1 delete, 1 create
M3: 3 get, 1 delete, 2 create, 2 hash
for each coinbase output: search for prior M3 for this sidechain
lookup if M3 was ever rejected or paid in the past
- for each prior proposed withdrawl: (included in 1 get+delete+create)
+ for each prior proposed withdrawal: (included in 1 get+delete+create)
M4: 1 get
+ for every proposed withdraw, 1 get, 1 delete, 1 create, 1 add
v0 needs to read and parse previous block
diff --git a/bip-0310.mediawiki b/bip-0310.mediawiki
index 257e92a..34522be 100644
--- a/bip-0310.mediawiki
+++ b/bip-0310.mediawiki
@@ -190,7 +190,7 @@ send the mask, in this case a default full mask is used.
* '''"version-rolling.mask"''' (REQUIRED, ''TMask'')
::- Bits set to 1 are allowed to be changed by the miner. If a miner changes bits with mask value 0, the server will reject the submit.
-::- The server SHOULD return the largest mask possible (as many bits set to 1 as possible). This can be useful in a mining proxy setup when a proxy needs to negotiate the best mask for its future clients. There is a [Draft BIP](https://github.com/bitcoin/bips/pull/661/files) describing available nVersion bits. The server SHOULD pick a mask that preferably covers all bits specified in the BIP.
+::- The server SHOULD return the largest mask possible (as many bits set to 1 as possible). This can be useful in a mining proxy setup when a proxy needs to negotiate the best mask for its future clients. There is a [https://github.com/bitcoin/bips/pull/661/files Draft BIP] describing available nVersion bits. The server SHOULD pick a mask that preferably covers all bits specified in the BIP.
* '''"version-rolling.min-bit-count"''' (REQUIRED, ''TMask'')
::- The miner also provides a minimum number of bits that it needs for efficient version rolling in hardware. Note that this parameter provides important diagnostic information to the pool server. If the requested bit count exceeds the limit of the pool server, the miner always has the chance to operate in a degraded mode without using full hashing power. The pool server SHOULD NOT terminate miner connection if this rare mismatch case occurs.
@@ -276,7 +276,7 @@ Miner provides additional text-based information.
Currently, there is a similar protocol feature '''mining.capabilities''' that
was intended for various protocol extensions. However, '''mining.configure'''
is incompatible with this feature as it requires a server response confirming
-all accepted/negotatied extensions. The reason why we made it incompatible is
+all accepted/negotiated extensions. The reason why we made it incompatible is
that '''mining.capabilities''' request has no associated response.
diff --git a/bip-0322.mediawiki b/bip-0322.mediawiki
index 55a751f..911d3c8 100644
--- a/bip-0322.mediawiki
+++ b/bip-0322.mediawiki
@@ -80,8 +80,6 @@ A full signature consists of the base64-encoding of the <code>to_sign</code> tra
A signer may construct a proof of funds, demonstrating control of a set of UTXOs, by constructing a full signature as above, with the following modifications.
-* <code>message_challenge</code> is unused and shall be set to <code>OP_TRUE</code>
-* Similarly, <code>message_signature</code> is then empty.
* All outputs that the signer wishes to demonstrate control of are included as additional inputs of <code>to_sign</code>, and their witness and scriptSig data should be set as though these outputs were actually being spent.
Unlike an ordinary signature, validators of a proof of funds need access to the current UTXO set, to learn that the claimed inputs exist on the blockchain, and to learn their scriptPubKeys.
diff --git a/bip-0324/test_sage_decoding.py b/bip-0324/test_sage_decoding.py
index c26c334..1ec5fdf 100644
--- a/bip-0324/test_sage_decoding.py
+++ b/bip-0324/test_sage_decoding.py
@@ -5,8 +5,8 @@ Instructions:
* Clone the SwiftEC repository, and enter the directory:
git clone https://github.com/Jchavezsaab/SwiftEC
- git checkout 5320a25035d91addde29d14164cce684b56a12ed
cd SwiftEC
+ git checkout 5320a25035d91addde29d14164cce684b56a12ed
* Generate parameters for the secp256k1 curve:
diff --git a/bip-0327.mediawiki b/bip-0327.mediawiki
index 07b40f5..b5600ab 100644
--- a/bip-0327.mediawiki
+++ b/bip-0327.mediawiki
@@ -123,7 +123,7 @@ This is by design: All algorithms in this proposal handle multiple signers who (
and applications are not required to check for duplicate individual public keys.
In fact, applications are recommended to omit checks for duplicate individual public keys in order to simplify error handling.
Moreover, it is often impossible to tell at key aggregation which signer is to blame for the duplicate, i.e., which signer came up with an individual public key honestly and which disruptive signer copied it.
-In contrast, MuSig2 is designed to identify disruptive signers at signing time (see [[#identifiying-disruptive-signers|Identifiying Disruptive Signers]]).
+In contrast, MuSig2 is designed to identify disruptive signers at signing time (see [[#identifying-disruptive-signers|Identifying Disruptive Signers]]).
While the algorithms in this proposal are able to handle duplicate individual public keys, there are scenarios where applications may choose to abort when encountering duplicates.
For example, we can imagine a scenario where a single entity creates a MuSig2 setup with multiple signing devices.
@@ -211,7 +211,7 @@ The bit can be obtained with ''GetPlainPubkey(keyagg_ctx)[0] & 1''.
The following specification of the algorithms has been written with a focus on clarity.
As a result, the specified algorithms are not always optimal in terms of computation and space.
-In particular, some values are recomputed but can be cached in actual implementations (see [[#signing-flow|Signing Flow]]).
+In particular, some values are recomputed but can be cached in actual implementations (see [[#general-signing-flow|General Signing Flow]]).
=== Notation ===
@@ -367,7 +367,7 @@ Algorithm ''ApplyTweak(keyagg_ctx, tweak, is_xonly_t)'':
Algorithm ''NonceGen(sk, pk, aggpk, m, extra_in)'':
* Inputs:
** The secret signing key ''sk'': a 32-byte array (optional argument)
-** The individual public key ''pk'': a 33-byte array (see [[#modifications-to-nonce-generation|Modifications to Nonce Generation]] for the reason that this argument is mandatory)
+** The individual public key ''pk'': a 33-byte array (see [[#signing-with-tweaked-individual-keys|Signing with Tweaked Individual Keys]] for the reason that this argument is mandatory)
** The x-only aggregate public key ''aggpk'': a 32-byte array (optional argument)
** The message ''m'': a byte array (optional argument)<ref name="mlen">In theory, the allowed message size is restricted because SHA256 accepts byte strings only up to size of 2^61-1 bytes (and because of the 8-byte length encoding).</ref>
** The auxiliary input ''extra_in'': a byte array with ''0 &le; len(extra_in) &le; 2<sup>32</sup>-1'' (optional argument)
@@ -465,7 +465,7 @@ Algorithm ''Sign(secnonce, sk, session_ctx)'':
* Fail if ''pk &ne; secnonce[64:97]''
* Let ''a = GetSessionKeyAggCoeff(session_ctx, P)''; fail if that fails<ref>Failing ''Sign'' when ''GetSessionKeyAggCoeff(session_ctx, P)'' fails is not necessary for unforgeability. It merely indicates to the caller that the scheme is not being used correctly.</ref>
* Let ''g = 1'' if ''has_even_y(Q)'', otherwise let ''g = -1 mod n''
-* <div id="Sign negation"></div>Let ''d = g⋅gacc⋅d' mod n'' (See [[negation-of-the-secret-key-when-signing|Negation Of The Secret Key When Signing]])
+* <div id="Sign negation"></div>Let ''d = g⋅gacc⋅d' mod n'' (See [[#negation-of-the-secret-key-when-signing|Negation Of The Secret Key When Signing]])
* Let ''s = (k<sub>1</sub> + b⋅k<sub>2</sub> + e⋅a⋅d) mod n''
* Let ''psig = bytes(32, s)''
* Let ''pubnonce = cbytes(k<sub>1</sub>'⋅G) || cbytes(k<sub>2</sub>'⋅G)''
diff --git a/bip-0330.mediawiki b/bip-0330.mediawiki
index c24ea42..996f74e 100644
--- a/bip-0330.mediawiki
+++ b/bip-0330.mediawiki
@@ -210,7 +210,7 @@ The reconcildiff message is used by reconciliation initiator to announce transac
| uint32[] || ask_shortids || The short IDs that the sender did not have.
|}
-Upon receipt a "reconcildiff" message with ''success=1'' (reconciliation success), a node sends an "inv" message for the transactions requested by 32-bit IDs (first vector) containing their wtxids (with parent transactions occuring before their dependencies).
+Upon receipt a "reconcildiff" message with ''success=1'' (reconciliation success), a node sends an "inv" message for the transactions requested by 32-bit IDs (first vector) containing their wtxids (with parent transactions occurring before their dependencies).
If ''success=0'' (reconciliation failure), receiver should announce all transactions from the reconciliation set via an "inv" message.
In both cases, transactions the sender of the message thinks the receiver is missing are announced via an "inv" message.
The regular "inv" deduplication should apply.
diff --git a/bip-0330/minisketch.py b/bip-0330/minisketch.py
index f64286f..5e39779 100755
--- a/bip-0330/minisketch.py
+++ b/bip-0330/minisketch.py
@@ -120,7 +120,7 @@ def find_roots_inner(p, a):
return []
elif len(p) == 2:
return [p[0]]
- # Otherwise, split p in left*right using paramater a_vals[0].
+ # Otherwise, split p in left*right using parameter a_vals[0].
t = poly_monic(poly_trace(p, a))
left = poly_gcd(list(p), t)
right = poly_divmod(list(left), p)
diff --git a/bip-0331.mediawiki b/bip-0331.mediawiki
new file mode 100644
index 0000000..08927a2
--- /dev/null
+++ b/bip-0331.mediawiki
@@ -0,0 +1,430 @@
+<pre>
+ BIP: 331
+ Layer: Peer Services
+ Title: Ancestor Package Relay
+ Author: Gloria Zhao <gloriajzhao@gmail.com>
+ Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0331
+ Status: Draft
+ Type: Standards Track
+ Created: 2022-08-08
+ License: BSD-3-Clause
+ Post-History: 2022-05-17 https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html [bitcoin-dev] post
+</pre>
+
+==Abstract==
+
+Peer-to-peer protocol messages enabling nodes to request and relay the unconfirmed ancestor package
+of a given transaction, and to request and relay transactions in batches.
+
+==Motivation==
+
+===Propagate High Feerate Transactions===
+
+Since v0.13, Bitcoin Core has used ancestor packages instead of individual transactions to evaluate
+the incentive compatibility of transactions in the mempool
+<ref>[https://github.com/bitcoin/bitcoin/pull/7594 Add tracking of ancestor packages]</ref> and
+selecting them for inclusion in blocks
+<ref>[https://github.com/bitcoin/bitcoin/pull/7600 Select transactions using feerate-with-ancestors]</ref>.
+Incentive-compatible mempool and miner policies help create a fair, fee-based market for block
+space. While miners maximize transaction fees in order to earn higher block rewards, non-mining
+users participating in transaction relay reap many benefits from employing policies that result in a
+mempool with similar contents, including faster compact block relay and more accurate fee
+estimation. Additionally, users may take advantage of mempool and miner policy to bump the priority
+of their transactions by attaching high-fee descendants (Child Pays for Parent or CPFP).
+
+Only individually considering transactions for submission to the mempool creates a limitation in
+the node's ability to determine which transactions to include in the mempool, since it cannot take
+into account descendants until all the transactions are in the mempool. Similarly, it cannot use a
+transaction's descendants when considering which of two conflicting transactions to keep (Replace by
+Fee or RBF).
+
+When a user's transaction does not meet a mempool's minimum feerate and they cannot create a
+replacement transaction directly, their transaction will simply be rejected by this mempool or
+evicted if already included. They also cannot attach a descendant to pay for replacing a conflicting
+transaction; it would be rejected for spending inputs that do not exist.
+
+This limitation harms users' ability to fee-bump their transactions. Further, it presents security and complexity
+issues in contracting protocols which rely on presigned, time-sensitive transactions<ref>'''Examples of time-sensitive pre-signed transactions in L2 protocols.'''
+* [https://github.com/lightning/bolts/blob/master/03-transactions.md#htlc-timeout-and-htlc-success-transactions HTCL-Timeout in LN Penalty]
+* [https://github.com/revault/practical-revault/blob/master/transactions.md#cancel_tx Unvault Cancel in Revault]
+* [https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md#refund-transaction Refund Transaction in Discreet Log Contracts]
+* [https://gist.github.com/instagibbs/60264606e181451e977e439a49f69fe1 Updates in Eltoo]
+* [https://github.com/ElementsProject/peerswap/blob/master/docs/peer-protocol.md#claim-transaction Claim Transactions in PeerSwap]
+</ref> to prevent cheating.
+In other words, a key security assumption of many contracting protocols is that all parties can
+propagate and confirm transactions in a timely manner. Increasing attention has been brought to
+"pinning attacks," a type of censorship in which the attacker uses mempool policy restrictions to
+prevent a transaction from being relayed or getting mined.
+<ref>'''Concerns for pinning attacks in L2 protocols'''
+* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020458.html Greg Sanders, "Bringing a nuke to a knife fight: Transaction introspection to stop RBF pinning"]
+* [https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-April/002639.html Matt Corallo, "RBF Pinning with Counterparties and Competing Interest"]
+* [https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html Antoine Riard, "Pinning : The Good, The Bad, The Ugly"]
+* [https://github.com/t-bast/lightning-docs/blob/master/pinning-attacks.md Bastien Teinturier, "Pinning Attacks"]
+* [https://gist.github.com/instagibbs/60264606e181451e977e439a49f69fe1 Greg Sanders, "Eltoo Pinning"]
+</ref>
+
+These transactions must meet a certain confirmation target to be effective, but their feerates
+are negotiated well ahead of broadcast time. If the forecast feerate was too low and no
+fee-bumping options are available, attackers can steal money from their counterparties. Always
+overestimating fees may sidestep this issue (but only while mempool traffic is low and
+predictable), but this solution is not guaranteed to work and wastes users' money. For some attacks,
+the available defenses require nodes to have a bird's-eye view of Bitcoin nodes' mempools, which is
+an unreasonable security requirement.
+
+Part of the solution is to enable nodes to consider packages of transactions as a unit, e.g. one or
+more low-fee ancestor transactions with a high-fee descendant, instead of separately. A package-aware
+mempool policy can help determine if it would actually be economically rational to accept a
+transaction to the mempool if it doesn't meet fee requirements individually. Network-wide adoption
+of these policies would create a more purely-feerate-based market for block space and allow
+contracting protocols to adjust fees (and therefore mining priority) at broadcast time.
+
+Theoretically, developing a safe and incentive-compatible package mempool acceptance policy is
+sufficient to solve this issue. Nodes could opportunistically accept packages (e.g. by trying
+combinations of transactions rejected from their mempools), but this practice would likely be
+inefficient at best and open new Denial of Service attacks at worst. As such, this proposal
+suggests adding new p2p messages enabling nodes to request and share package-validation-related
+information with one another, resulting in a more efficient and reliable way to propagate packages.
+
+===Handle Orphans Better===
+
+Txid-based transaction relay is problematic since a transaction's witness may be malleated without
+changing its txid; a node cannot use txid to deduplicate transactions it has already downloaded
+or validated. Ideally, two nodes that both support BIP339 wtxid-based transaction relay shouldn't
+ever need to use txid-based transaction relay.
+
+A single use case of txid-based relay remains: handling "orphan" transactions that spend output(s)
+from an unconfirmed transaction the receiving node is unaware of. Orphan transactions are very
+common for new nodes that have just completed Initial Block Download and do not have an up-to-date
+mempool. Nodes also download transactions from multiple peers. If the peer from which a child
+transaction was requested responds faster than the peer from which its parent was requested, that
+child is seen as an orphan transaction.
+
+Nodes may handle orphans by storing them in a cache and requesting any missing parent(s) by txid
+(prevouts specify txid, not wtxid). These parents may end up being orphans as well, if they also
+spend unconfirmed inputs that the node is unaware of. This method of handling orphans is problematic
+for two reasons: it requires nodes to allocate memory for unvalidated data received on the p2p
+network and it relies on txid-based relay between two wtxid-relay peers.
+
+This proposal makes orphan resolution more efficient and no longer require txid-based relay.
+
+==Definitions==
+
+Given any two transactions Tx0 and Tx1 where Tx1 spends an output of Tx0, Tx0 is a '''parent''' of
+Tx1 and Tx1 is a '''child''' of Tx0.
+
+A transaction's '''ancestors''' include, recursively, its parents, the parents of its parents, etc.
+A transaction's '''descendants''' include, recursively, its children, the children of its children,
+etc. A transaction's parent is its ancestor, but an ancestor is not necessarily a parent.
+
+A '''package''' is a list of transactions, representable by a connected Directed Acyclic
+Graph (a directed edge exists between a transaction that spends the output of another transaction).
+In this proposal, a package is limited to unconfirmed transactions.
+
+An '''ancestor package''' consists of an unconfirmed transaction with all of its unconfirmed
+ancestors.
+
+In a '''topologically sorted''' package, each parent appears somewhere in the list before its child.
+
+==Specification==
+
+Ancestor Package Relay includes two parts: a package information round and a transaction data
+download round.
+The package information round is used to help a receiver learn what transactions are in a package and
+decide whether they want to download them. The transaction data round is used to help a node download
+multiple transactions in one message instead of as separate messages.
+<ref>'''Why are package information and transaction data rounds both necessary?'''
+
+Several alternative designs were considered. One should measure alternative solutions based on the
+resources used to communicate (not necessarily trustworthy) information: We would like to minimize
+network bandwidth, avoid downloading a transaction more than once, avoid downloading transactions
+that are eventually rejected, and minimize storage allocated for not-yet-validated transactions.
+
+<br />
+
+'''No Package Information Round:''' One proposal is to just use the child's wtxid to refer to the
+package and always send the entire package together, skipping the package information round.
+However, this protocol would make it very likely for honest nodes to redownload duplicate
+transactions. See the following example, where the high-feerate ancestors were already downloaded
+and accepted individually.
+
+[[File:./bip-0331/no_package_info.png|600px]]
+<br />
+
+'''Package Information Only:''' Just having package information gives enough information for the
+receiver to accept the packages. That is, rather than using "getpkgtxns" and "pkgtxns" messages,
+send "getdata" and download the transactions individually. While this option is a potential fallback
+if batched transaction download fails for some reason, it shouldn't be used as the default because
+it always requires storage of unvalidated transactions.
+[[File:./bip-0331/package_info_only.png|1000px]]
+</ref>
+
+Package relay is negotiated between two peers during the version handshake using a "sendpackages"
+message. The versions field within "sendpackages" is interpreted as a bitfield; peers may relay
+multiple versions of packages. Package relay requires both peers to support wtxid-based relay
+because package transactions are referenced by their wtxids.
+<ref>'''Why do we need multiple versions? Why can't we just support arbitrary packages?'''
+Attempting to support arbitrary packages in mempool validation may result in very complex logic, new
+Denial of Service attack vectors, and policy limitations that could be leveraged to censor
+transactions (aka "pinning attacks"). This protocol is extensible to support other types of
+packages based on future desired use cases. Future package information messages may describe
+different types of packages and/or contain more information than a list of wtxids, e.g. feerate or
+relationships between transactions.</ref>
+<ref>'''Why use a bitfield instead of a numbering system?'''
+It should be possible to support some subset of the existing package types.</ref>
+
+[[File:./bip-0331/version_negotiation.png|400px]]
+
+Nodes indicate support for batched transaction data round ("getpkgtxns", "pkgtxns", and
+"MSG_PKGTXNS") using the <code>PKG_RELAY_PKGTXNS = (1 << 0)</code> bit in their "sendpackages"
+messages during version handshake. They indicate support for the ancestor package information
+round ("ancpkginfo", "MSG_ANCPKGINFO") using the <code>PKG_RELAY_ANC = (1 << 1)</code> bit in their
+"sendpackages" messages during version handshake.
+
+===Protocol Flow Examples===
+
+This package relay protocol satisfies both use cases (orphan transaction handling and high-feerate
+transaction paying for low-feerate ancestors).
+
+====Orphan Transaction Handling====
+
+Upon receiving an orphan transaction, a node may request ancestor package information delineating
+the wtxids of the transaction's unconfirmed ancestors. This is done without using txid-based relay.
+The package information can be used to request transaction data. As these transactions are dependent
+upon one another to be valid, the transactions can be requested and sent as a batch.
+
+Contrast this protocol with legacy orphan handling, which requires requesting the missing
+transactions by their txids and may require new round trips for each generation of missing parents.
+[[File:./bip-0331/orphan_handling_flow.png|1000px]]
+
+====Fee-Bumped Transactions====
+
+Too-low-feerate transactions (i.e. below the node's minimum mempool feerate) with high-feerate
+descendants can also be relayed this way. If the peers are using BIP133 fee filters and a
+low-feerate transaction is below the node's fee filter, the sender will not announce it. The
+high-feerate transaction will be sent by the sender, and received and handled as an orphan by the
+receiver, the transactions are validated as a package, and so the protocol naturally works for this
+use case.
+
+This does not mean BIP133 is required for package relay to work, provided that nodes do not
+immediately reject transactions previously found to be too low feerate. If the low-feerate
+transaction was sent and rejected, the receiver should later re-request and accept it after learning
+that it is the ancestor of another transaction, and that they meet the receiver's mempool policy
+requirements when validated together.
+
+[[File:./bip-0331/package_cpfp_flow.png|600px]]
+
+This protocol is receiver-initiated only; nodes do not proactively announce packages to their peers.
+<ref>'''Why no sender-initiated protocol?''' Sender-initiated package
+relay can, theoretically, save a round trip by notifying the receiver ahead of time that they will
+probably need to request and validate a group of transactions together in order for them to be
+accepted. As with any proactive communication, there is a chance that the receiver already knows
+this information, so this network bandwidth may be wasted. Shortened latency is less significant
+than wasted bandwidth.
+
+The logic used to decide when to announce a package proactively determines whether it is a net
+increase or decrease for overall bandwidth usage. However, it is difficult to design anything to
+save bandwidth without any idea of what its bandwidth usage actually looks like in practice. No
+historical data is available, as one of the primary goals of this protocol is to enable
+currently-rejected transactions to propagate. After deploying receiver-initiated package relay, we
+can observe its usage and then introduce a sender-initiated package relay protocol informed by data
+collected from the p2p network.</ref>
+
+===Combined Hash===
+
+A "combined hash" serves as a unique "package id" for some list of transactions and helps provide a
+meaningful but short "notfound" response to "getpkgtxns."
+
+The combined hash of a package of transactions is equal to the sha256 hash of each transaction's
+wtxid concatenated in lexicographical order.
+
+===New Messages===
+
+Four new protocol messages and two inv types are added.
+
+====sendpackages====
+
+{|
+| Field Name || Type || Size || Purpose
+|-
+|versions || uint64_t || 4 || Bit field that is 64 bits wide, denoting the package versions supported by the sender.
+|-
+|}
+
+# The "sendpackages" message has the structure defined above, with pchCommand == "sendpackages".
+
+# During version handshake, nodes should send one "sendpackages" message indicating they support package relay, with the versions field indicating which versions they support.
+
+# The "sendpackages" message MUST be sent before sending a "verack" message. If a "sendpackages" message is received after "verack", the sender may be disconnected.
+
+# Upon successful connection ("verack" sent by both peers), a node may relay packages with the peer if they did not set "fRelay" to false in the "version" message, both peers sent "wtxidrelay", and both peers sent "sendpackages" for matching version bit(s). Unknown bits (including versions==0) should be ignored. Peers should relay packages corresponding to versions that both sent "sendpackages" for.<ref>'''Is it ok to send "sendpackages" to a peer that specified fRelay=false in their "version" message?'''
+Yes, this is allowed in order to reduce the number of negotiation steps. This means nodes can
+announce features without first checking what the other peer has sent, and then apply negotiation
+logic at the end based on what was sent and received. See [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020510.html this discussion].
+</ref>
+
+====ancpkginfo====
+{|
+| Field Name || Type || Size || Purpose
+|-
+|txns_length||CompactSize||1 or 3 bytes|| The number of transactions provided.
+|-
+|txns||List of wtxids||txns_length * 32|| The wtxids of each transaction in the package.
+|}
+
+# The "ancpkginfo" message has the structure defined above, with pchCommand == "ancpkginfo".
+
+# The "txns" field should contain a list of wtxids which constitute the ancestor package of the last wtxid. For the receiver's convenience, the sender should - but is not required to - sort the wtxids in topological order. The topological sort can be achieved by sorting the transactions by mempool acceptance order (if parents are always accepted before children). Apart from the last wtxid which is used to learn which transaction the message corresponds to, there is no enforced ordering. Nodes should not disconnect or punish a peer who provides a list not sorted in topological order.<ref>'''Why not include feerate information to help the receiver decide whether these transactions are worth downloading?'''
+A simple feerate is typically insufficient; the receiver must also know the dependency
+relationships between transactions and their respective sizes.
+</ref><ref>'''Should a peer be punished if they provide incorrect package info, e.g. a list of unrelated transactions?'''
+Ideally, there should be a way to enforce that peers are providing correct information to each
+other. However, two peers may have different views of what a transaction's unconfirmed ancestors
+are based on their chainstate. For example, during a reorg or when two blocks are found at the same
+time, one peer may see a transaction as confirmed while the other peer does not.
+As such, it is impossible to accurately enforce this without also knowing the peer's chainstate.
+It was [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html originally proposed]
+to include a block hash in "ancpkginfo" to avoid unwarranted disconnections. However, it does not
+make much sense to stop or delay transaction data requests due to mismatched chainstates, and the
+chainstate may change again between package information and transaction data rounds. Instead,
+differences in chainstate should be handled at the validation level. The node has already spent
+network bandwidth downloading these transactions; it should make a best effort to validate them.
+See [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020558.html discussion].
+</ref><ref>'''Why not require topological order?'''
+It is not possible to determine whether a list of transactions is topologically sorted without first
+establishing that the list contains a full ancestor package. It is not possible to determine whether
+a list of transactions contains a full ancestor package without knowing what the chainstate is.
+</ref>
+
+# Upon receipt of a "ancpkginfo" message, the node may use it to request the transactions it does not already have (e.g. using "getpkgtxns" or "tx").
+
+# Upon receipt of a malformed "ancpkginfo" message, the sender may be disconnected. An "ancpkginfo" message is malformed if it contains duplicate wtxids or conflicting transactions (spending the same inputs). The receiver may learn that a package info was malformed after downloading the transactions.
+
+# A node MUST NOT send a "ancpkginfo" message that has not been requested by the recipient. Upon receipt of an unsolicited "ancpkginfo", a node may disconnect the sender.
+
+# This message must only be used if both peers set <code>PKG_RELAY_ANC</code> in their "sendpackages" message. If an "ancpkginfo" message is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected.
+
+====MSG_ANCPKGINFO====
+
+# A new inv type (MSG_ANCPKGINFO == 0x7) is added, for use only in getdata requests pertaining to ancestor packages.
+
+# As a getdata request type, it indicates that the sender wants an "ancpkginfo" containing all of the unconfirmed ancestors of a transaction, referenced by wtxid.
+
+# Upon receipt of a "getdata(MSG_ANCPKGINFO)" request, the node should respond with an "ancpkginfo" message corresponding to the transaction's unconfirmed ancestor package, or with "notfound". The wtxid of the requested transaction must be the last item in the "ancpkginfo" response list, as the last item is used to determine which transaction the "ancpkginfo" pertains to.
+
+# The inv type must only be used in a "getdata" message. An "inv(MSG_ANCPKGINFO)" must never be sent. If an "inv(MSG_ANCPKGINFO)" is received, the sender may be disconnected.
+
+# This inv type must only be used if both peers set <code>PKG_RELAY_ANC</code> in their "sendpackages" message. If a "getdata" message with type MSG_ANCPKGINFO is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected.
+
+====getpkgtxns====
+
+{|
+| Field Name || Type || Size || Purpose
+|-
+|txns_length||CompactSize||1 or 3 bytes|| The number of transactions requested.
+|-
+|txns||List of wtxids||txns_length * 32|| The wtxids of each transaction in the package.
+|}
+
+# The "getpkgtxns" message has the structure defined above, with pchCommand == "getpkgtxns".
+
+# A "getpkgtxns" message should be used to request some list of transactions specified by witness transaction id. It indicates that the node wants to receive either all the specified transactions or none of them. This message is intended to allow nodes to avoid downloading and storing transactions that cannot be validated without each other. The list of transactions does not need to correspond to a previously-received ancpkginfo message.
+
+# Upon receipt of a "getpkgtxns" message, a node should respond with either a "pkgtxns" containing all of the requested transactions in the same order specified in the "getpkgtxns" request or one "notfound" message of type MSG_PKGTXNS and combined hash of all of the wtxids in the "getpkgtxns" request (only one "notfound" message and nothing else), indicating one or more of the transactions is unavailable.
+
+# A "getpkgtxns" message must contain at most 100 wtxids. Upon receipt of a "getpkgtxns" message with more than 100 wtxids, a node may ignore the message (to avoid calculating the combined hash) and disconnect the sender.
+
+# This message must only be used if both peers set <code>PKG_RELAY_PKGTXNS</code> in their "sendpackages" message. If a "getpkgtxns" message is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected.
+
+====pkgtxns====
+
+{|
+| Field Name || Type || Size || Purpose
+|-
+|txns_length||CompactSize||1 or 3 bytes|| The number of transactions provided.
+|-
+|txns||List of transactions||variable|| The transactions in the package.
+|}
+
+# The "pkgtxns" message has the structure defined above, with pchCommand == "pkgtxns".
+
+# A "pkgtxns" message should contain the transaction data requested using "getpkgtxns".
+
+# A "pkgtxns" message should only be sent to a peer that requested the package using "getpkgtxns". If a node receives an unsolicited package, it may choose to validate the transactions or not, and the sender may be disconnected.
+
+# This message must only be used if both peers set <code>PKG_RELAY_PKGTXNS</code> in their "sendpackages" message. If a "pkgtxns" message is received from a peer with which this type of package relay was not negotiated, no response should be sent and the sender may be disconnected.
+
+====MSG_PKGTXNS====
+
+# A new inv type (MSG_PKGTXNS == 0x6) is added, for use only in "notfound" messages pertaining to package transactions.
+
+# As a "notfound" type, it indicates that the sender is unable to send all the transactions requested in a prior "getpkgtxns" message. The hash used is equal to the combined hash of the wtxids in the getpkgtxns request.
+
+# This inv type should only be used in "notfound" messages, i.e. "inv(MSG_PKGTXNS)" and "getdata(MSG_PKGTXNS)" must never be sent. Upon receipt of an "inv" or "getdata" message of this type, the sender may be disconnected.
+
+# This inv type must only be used if both peers set <code>PKG_RELAY_PKGTXNS</code> in their "sendpackages" message.
+
+==Compatibility==
+
+Older clients remain fully compatible and interoperable after this change. Clients implementing this
+protocol will only attempt to send and request packages if agreed upon during the version handshake.
+<ref>'''Will package relay cause non-package relay nodes to waste bandwidth on low-feerate transactions?'''
+If a node supports package relay, it may accept low-feerate transactions (e.g. paying zero fees)
+into its mempool, but non-package relay nodes would most likely reject them. To mitigate bandwidth
+waste, a package relay node should not announce descendants of below-fee-filter transactions to
+non-package relay peers.
+</ref>
+<ref>'''Is Package Erlay possible?'''
+A client using BIP330 reconciliation-based transaction relay (Erlay) is able to use package relay
+without interference. After reconciliation, any transaction with unconfirmed ancestors may have
+those ancestors resolved using ancestor package relay.
+[[File:./bip-0331/package_erlay.png|700px]]
+</ref>
+
+==Extensibility==
+
+This protocol can be extended to include more types of package information in the future, while
+continuing to use the same messages for transaction data download. One would define a new package
+information message (named "*pkginfo" in the diagram below), allocate its corresponding inv
+type (named "*PKGINFO" in the diagram below), and specify how to signal support using the
+versions field of "sendpackages" (an additional bit named "PKG_RELAY_*" in the diagram below). A
+future version of package relay may allow a sender-initiated dialogue by specifying that the package
+info type inv type can be used in an "inv" message.
+<br />
+[[File:./bip-0331/sender_init_future_version.png|700px]]
+
+==Implementation==
+
+Sample implementation for Bitcoin Core: https://github.com/bitcoin/bitcoin/pull/27742
+
+A prerequisite for implementing a safe
+package relay protocol is a mempool acceptance policy that safely validates packages of
+transactions.
+<ref>'''Package Mempool Acceptance Policy'''
+Accepting packages from peers should not significantly increase a node's DoS attack surface;
+processing packages should not permit waste or exhaustion of the node and network's resources.
+Additionally, a sensible mempool acceptance policy should result in the most incentive-compatible
+subset of the package in the mempool in order to avoid adding more pinning attacks or censorship
+vectors. For example, It should not be assumed that packages are CPFPs. An ancestor package may
+include a high-feerate parent and low-feerate child; the policy may choose to accept the parent but
+not the child. If one or more transactions are policy-invalid, other transactions that are not
+dependent upon them should still be considered.
+</ref>
+
+==Acknowledgements==
+
+Thank you to Suhas Daftuar, John Newbery, Anthony Towns, Martin Zumsande, and others for input on the design.
+
+Thank you to Will Clark, Sergi Delgado, Fabian Jahr, John Newbery, Greg Sanders, Stéphan Vuylsteke, Pieter Wuille, and others for input on this document.
+
+Much of this work is inspired by ideas and code by Suhas Daftuar and Antoine Riard.
+<ref>'''Prior Work on Package Relay'''
+* [https://gist.github.com/sdaftuar/8756699bfcad4d3806ba9f3396d4e66a Strawman Proposal]
+* [https://github.com/bitcoin/bitcoin/issues/14895 Package relay design questions]
+* [https://github.com/bitcoin/bitcoin/pull/16401 Add package acceptance logic to mempool]
+* [https://github.com/bitcoin/bitcoin/pull/19621 [RFC] Package-relay: sender-initiated]
+</ref>
+
+==References and Rationale==
+
+<references/>
+
diff --git a/bip-0331/no_package_info.png b/bip-0331/no_package_info.png
new file mode 100644
index 0000000..54b20f9
--- /dev/null
+++ b/bip-0331/no_package_info.png
Binary files differ
diff --git a/bip-0331/orphan_handling_flow.png b/bip-0331/orphan_handling_flow.png
new file mode 100644
index 0000000..4588de8
--- /dev/null
+++ b/bip-0331/orphan_handling_flow.png
Binary files differ
diff --git a/bip-0331/package_cpfp_flow.png b/bip-0331/package_cpfp_flow.png
new file mode 100644
index 0000000..6b48c5d
--- /dev/null
+++ b/bip-0331/package_cpfp_flow.png
Binary files differ
diff --git a/bip-0331/package_erlay.png b/bip-0331/package_erlay.png
new file mode 100644
index 0000000..fd3661f
--- /dev/null
+++ b/bip-0331/package_erlay.png
Binary files differ
diff --git a/bip-0331/package_info_only.png b/bip-0331/package_info_only.png
new file mode 100644
index 0000000..2bd0272
--- /dev/null
+++ b/bip-0331/package_info_only.png
Binary files differ
diff --git a/bip-0331/sender_init_future_version.png b/bip-0331/sender_init_future_version.png
new file mode 100644
index 0000000..d4a2105
--- /dev/null
+++ b/bip-0331/sender_init_future_version.png
Binary files differ
diff --git a/bip-0331/version_negotiation.png b/bip-0331/version_negotiation.png
new file mode 100644
index 0000000..5b2f48c
--- /dev/null
+++ b/bip-0331/version_negotiation.png
Binary files differ
diff --git a/bip-0345.mediawiki b/bip-0345.mediawiki
new file mode 100644
index 0000000..a6ead31
--- /dev/null
+++ b/bip-0345.mediawiki
@@ -0,0 +1,688 @@
+<pre>
+ BIP: 345
+ Layer: Consensus (soft fork)
+ Title: OP_VAULT
+ Author: James O'Beirne <vaults@au92.org>
+ Greg Sanders <gsanders87@gmail.com>
+ Anthony Towns <aj@erisian.com.au>
+ Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0345
+ Status: Draft
+ Type: Standards Track
+ Created: 2023-02-03
+ License: BSD-3-Clause
+ Post-History: 2023-01-09: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-January/021318.html [bitcoin-dev] OP_VAULT announcment
+ 2023-03-01: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-March/021510.html [bitcoin-dev] BIP for OP_VAULT
+</pre>
+
+
+== Introduction ==
+
+This BIP proposes two new tapscript opcodes that add consensus support for a specialized
+covenant: <code>OP_VAULT</code> and <code>OP_VAULT_RECOVER</code>. These opcodes, in conjunction with
+<code>OP_CHECKTEMPLATEVERIFY</code>
+([https://github.com/bitcoin/bips/blob/master/bip-0119.mediawiki BIP-0119]),
+allow users to enforce a delay period before designated coins may be spent to
+an arbitrary destination, with the exception of a prespecified "recovery" path.
+At any time prior to final withdrawal, the coins can be spent to the
+recovery path.
+
+=== Copyright ===
+
+This document is licensed under the 3-clause BSD license.
+
+
+=== Motivation ===
+
+The hazard of custodying Bitcoin is well-known. Users of Bitcoin must go to
+significant effort to secure their private keys, and hope that once provisioned
+their custody system does not yield to any number of evolving and
+persistent threats. Users have little means to intervene once a compromise is
+detected. This proposal introduces a mechanism that significantly
+mitigates the worst-case outcome of key compromise: coin loss.
+
+Introducing a way to intervene during unexpected spends allows users to
+incorporate highly secure key storage methods or unusual fallback strategies
+that are only exercised in the worst case, and which may otherwise be
+operationally prohibitive. The goal of this proposal is to make this strategy
+usable for custodians of any size with minimal complication.
+
+==== Example uses ====
+
+A common configuration for an individual custodying Bitcoin is "single
+signature and passphrase" using a hardware wallet. A user with such a
+configuration might be concerned about the risk associated with relying on a
+single manufacturer for key management, as well as physical access to the
+hardware.
+
+This individual can use <code>OP_VAULT</code> to make use of a highly secure
+key as the unlikely recovery path, while using their existing signing procedure
+as the withdrawal trigger key with a configured spend delay of e.g. 1 day.
+
+The recovery path key can be of a highly secure nature that might otherwise
+make it impractical for daily use. For example, the key could be generated in
+some analog fashion, or on an old computer that is then destroyed, with the
+private key replicated only in paper form. Or the key could be a 2-of-3
+multisig using devices from different manufacturers. Perhaps the key is
+geographically or socially distributed.
+
+Since it can be any Bitcoin script policy, the recovery key can include a
+number of spending conditions, e.g. a time-delayed fallback to an "easier"
+recovery method, in case the highly secure key winds up being ''too'' highly
+secure.
+
+The user can run software on their mobile device that monitors the blockchain
+for spends of the vault outpoints. If the vaulted coins move in an unexpected
+way, the user can immediately sweep them to the recovery path, but spending the
+coins on a daily basis works in the same way it did prior to vaulting (aside
+from the spend delay).
+
+Institutional custodians of Bitcoin may use vaults in similar fashion.
+
+===== Provable timelocks =====
+
+This proposal provides a mitigation to the
+[https://web.archive.org/web/20230210123933/https://xkcd.com/538/ "$5 wrench attack."] By
+setting the spend delay to, say, a week, and using as the recovery path a
+script that enforces a longer relative timelock, the owner of the vault can
+prove that he is unable to access its value immediately. To the author's
+knowledge, this is the only way to configure this defense without rolling
+timelocked coins for perpetuity or relying on a trusted third party.
+
+== Goals ==
+
+[[File:bip-0345/vaults-Basic.png|frame|center]]
+
+Vaults in Bitcoin have been discussed formally since 2016
+([http://fc16.ifca.ai/bitcoin/papers/MES16.pdf MES16]) and informally since [https://web.archive.org/web/20160220215151/https://bitcointalk.org/index.php?topic=511881.0 2014]. The value of
+having a configurable delay period with recovery capability in light of an
+unexpected spend has been widely recognized.
+
+The only way to implement vaults given the existing consensus rules, aside from
+[https://github.com/revault emulating vaults with large multisig
+configurations], is to use presigned transactions created with a one-time-use
+key. This approach was first demonstrated
+[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-April/017755.html in 2020].
+
+Unfortunately, this approach has a number of practical shortcomings:
+* generating and securely deleting ephemeral keys, which are used to emulate the vault covenant, is required,
+* amounts and withdrawal patterns must be precommitted to,
+* there is a necessity to precommit to an address that the funds must pass through on their way to the final withdrawal target, which is likely only known at unvault time,
+* the particular fee management technique or wallet must be decided upon vault creation,
+* coin loss follows if a vault address is reused,
+* the transaction data that represents the "bearer asset" of the vault must be stored for perpetuity, otherwise value is lost, and
+* the vault creation ceremony must be performed each time a new balance is to be deposited.
+
+The deployment of a "precomputed" covenant mechanism like
+[https://github.com/bitcoin/bips/blob/master/bip-0119.mediawiki OP_CHECKTEMPLATEVERIFY] or
+[https://github.com/bitcoin/bips/blob/master/bip-0118.mediawiki SIGHASH_ANYPREVOUT]
+would both remove the necessity to use an ephemeral key, since the
+covenant is enforced on-chain, and lessen the burden of sensitive data storage,
+since the necessary transactions can be generated from a set of compact
+parameters. This approach was demonstrated [https://github.com/jamesob/simple-ctv-vault in
+2022].
+
+However, the limitations of precomputation still apply: amounts,
+destinations, and fee management are all fixed. Funds must flow through a fixed
+intermediary to their final destination. Batch operations, which may be vital
+for successful recovery during fee spikes or short spend delay, are not possible.
+
+[[File:bip-0345/withdrawal-comparison.drawio.png|frame|center]]
+
+Having a "general" covenant mechanism that can encode arbitrary transactional
+state machines would allow us to solve these issues, but at the cost of complex
+and large scripts that would probably be duplicated many times over in the
+blockchain. The particular design and deployment timeline of such a general
+framework is also uncertain. This approach was demonstrated
+[https://blog.blockstream.com/en-covenants-in-elements-alpha/ in 2016].
+
+This proposal intends to address the problems outlined above by
+providing a delay period/recovery path use with minimal transactional and
+operational overhead using a specialized covenant.
+
+The design goals of the proposal are:
+
+* '''efficient reuse of an existing vault configuration.'''<ref>'''Why does this support address reuse?''' The proposal doesn't rely on or encourage address reuse, but certain uses are unsafe if address reuse cannot be handled - for example, if a custodian gives its users a vault address to deposit to, it cannot enforce that those users make a single deposit for each address.</ref> A single vault configuration, whether the same literal <code>scriptPubKey</code> or not, should be able to “receive” multiple deposits.
+
+* '''batched operations''' for recovery and withdrawal to allow managing multiple vault coins efficiently.
+
+* '''unbounded partial withdrawals''', which allows users to withdraw partial vault balances without having to perform the setup ceremony for a new vault.
+
+* '''dynamic unvault targets''', which allow the proposed withdrawal target for a vault to be specified at withdrawal time rather than when the vault is first created. This would remove the need for a prespecified, intermediate wallet that only exists to route unvaulted funds to their desired destination.
+
+* '''dynamic fee management''' that, like dynamic targets, defers the specification of fee rates and source to unvault time rather than vault creation time.
+
+These goals are accompanied by basic safety considerations (e.g. not being
+vulnerable to mempool pinning) and a desire for concision, both in terms of the number
+of outputs created as well as script sizes.
+
+This proposal is designed to be compatible with any future sighash modes (e.g. <code>SIGHASH_GROUP</code>) or fee management strategies (e.g. [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-September/018168.html transaction sponsors]) that may be introduced. Use of these opcodes will benefit from, but do not strictly rely on, [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020937.html v3 transaction relay] and [https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki ephemeral anchors].
+
+== Design ==
+
+In typical usage, a vault is created by encumbering coins under a
+taptree [https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki (BIP-341)]
+containing at least two leaves: one with an <code>OP_VAULT</code>-containing script that
+facilitates the expected withdrawal process, and another leaf with
+<code>OP_VAULT_RECOVER</code> which ensures the coins can be recovered
+at any time prior to withdrawal finalization.
+
+The rules of <code>OP_VAULT</code> ensure the timelocked, interruptible
+withdrawal by allowing a spending transaction to replace the
+<code>OP_VAULT</code> tapleaf with a prespecified script template, allowing for
+some parameters to be set at spend (trigger) time. All other leaves in the
+taptree must be unchanged in the destination output, which preserves the recovery path as well as any
+other spending conditions originally included in the vault. This is similar to
+the <code>TAPLEAF_UPDATE_VERIFY</code> design that was proposed
+[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019419.html in 2021].
+
+These tapleaf replacement rules, described more precisely below, ensure a
+timelocked withdrawal, where the timelock is fixed by the original
+<code>OP_VAULT</code> parameters, to a fixed set of outputs (via
+<code>OP_CHECKTEMPLATEVERIFY</code><ref>'''Why is <code>OP_CHECKTEMPLATEVERIFY</code> (BIP-119) relied upon for this proposal?''' During the withdrawal process, the proposed final destination for value being withdrawn must be committed to. <code>OP_CTV</code> is the simplest, safest way to commit the spend of some coins to a particular set of outputs. An earlier version of this proposal attempted to use a simpler, but similar method, of locking the spend of coins to a set of outputs, but this method introduced txid malleability.<br />Note that if some other method of locking spends to a particular set of outputs should be deployed, that method can be used in the <code>OP_VAULT</code> <code><leaf-update-script-body></code> with no changes.</ref>) which is chosen when the withdrawal
+process is triggered.
+
+While <code>OP_CHECKTEMPLATEVERIFY</code> is used in this proposal as the
+preferred method to bind the proposed withdrawal to a particular set of final
+outputs, <code>OP_VAULT</code> is composable with other (and future) opcodes to
+facilitate other kinds of withdrawal processes.
+
+[[File:bip-0345/opvault.drawio.png|frame|center]]
+
+
+=== Transaction types ===
+
+The vault has a number of stages, some of them optional:
+
+* '''vault transaction''': encumbers some coins into a Taproot structure that includes at least one <code>OP_VAULT</code> leaf and one <code>OP_VAULT_RECOVER</code> leaf.
+
+* '''trigger transaction''': spends one or more <code>OP_VAULT</code>-tapleaf inputs into an output which is encumbered by a timelocked withdrawal to a fixed set of outputs, chosen at trigger time. This publicly broadcasts the intent to withdraw to some specific set of outputs.<br /><br />The trigger transaction may have an additional output which allocates some of the vault balance into a partial "revault," which simply encumbers the revaulted portion of the value into the same <code>scriptPubKey</code> as the <code>OP_VAULT</code>-containing input(s) being spent.
+
+* '''withdrawal transaction''': spends the timelocked, destination-locked trigger inputs into a compatible set of final withdrawal outputs (per, e.g., a <code>CHECKTEMPLATEVERIFY</code> hash), after the trigger inputs have matured per the spend delay. Timelocked CTV transactions are the motivating usage of OP_VAULT, but any script template can be specified during the creation of the vault.
+
+* '''recovery transaction''': spends one or more vault inputs via <code>OP_VAULT_RECOVER</code> tapleaf to the prespecified recovery path, which can be done at any point before the withdrawal transaction confirms. Each input can optionally require a witness satisfying a specified ''recovery authorization'' script, an optional script prefixing the <code>OP_VAULT_RECOVER</code> fragment. The use of recovery authorization has certain trade-offs discussed later.
+
+
+=== Fee management ===
+
+A primary consideration of this proposal is how fee management is handled.
+Providing dynamic fee management is critical to the operation of a vault, since
+
+* precalculated fees are prone to making transactions unconfirmable in high fee environments, and
+* a fee wallet that is prespecified might be compromised or lost before use.
+
+But dynamic fee management can introduce
+[https://bitcoinops.org/en/topics/transaction-pinning/ pinning vectors]. Care
+has been taken to avoid unnecessarily introducing these vectors when using the new
+destination-based spending policies that this proposal introduces.
+
+Originally, this proposal had a hard dependency on reformed transaction
+nVersion=3 policies, including ephemeral anchors, but it has since been revised
+to simply benefit from these changes in policy as well as other potential fee
+management mechanisms.
+
+
+== Specification ==
+
+The tapscript opcodes <code>OP_SUCCESS187</code> (<code>0xbb</code>) and
+<code>OP_SUCCESS188</code> (<code>0xbc</code>) are constrained with new rules
+to implement <code>OP_VAULT</code> and <code>OP_VAULT_RECOVER</code>,
+respectively.
+
+=== <code>OP_VAULT</code> evaluation ===
+
+When evaluating <code>OP_VAULT</code> (<code>OP_SUCCESS187</code>,
+<code>0xbb</code>), the expected format of the stack, shown top to bottom, is:
+
+<source>
+<leaf-update-script-body>
+<push-count>
+[ <push-count> leaf-update script data items ... ]
+<trigger-vout-idx>
+<revault-vout-idx>
+<revault-amount>
+</source>
+
+where
+
+* <code><leaf-update-script-body></code> is a minimally-encoded data push of a serialized script. <ref>In conjunction with the leaf-update data items, it dictates the tapleaf script in the output taptree that will replace the one currently executing.</ref>
+** Otherwise, script execution MUST fail and terminate immediately.
+
+* <code><push-count></code> is an up to 4-byte minimally encoded <code>CScriptNum</code> indicating how many leaf-update script items should be popped off the stack. <ref>'''Why only prefix with data pushes?''' Prefixing the <code>leaf-update-script-body</code> with opcodes opens up the door to prefix OP_SUCCESSX opcodes, to name a single issue only, side-stepping the validation that was meant to be run by the committed script.</ref>
+** If this value does not decode to a valid CScriptNum, script execution MUST fail and terminate immediately.
+** If this value is less than 0, script execution MUST fail and terminate immediately.
+** If there are fewer than 3 items following the <code><push-count></code> items on the stack, script execution MUST fail and terminate immediately. In other words, after popping <code><leaf-update-script-body></code>, there must be at least <code>3 + <push-count></code> items remaining on the stack.
+
+* The following <code><push-count></code> stack items are popped off the stack and prefixed as minimally-encoded push-data arguments to the <code><leaf-update-script-body></code> to construct the expected tapleaf replacement script.
+
+* <code><trigger-vout-idx></code> is an up to 4-byte minimally encoded <code>CScriptNum</code> indicating the index of the output which, in conjunction with an optional revault output, carries forward the value of this input, and has an identical taptree aside from the currently executing leaf.
+** If this value does not decode to a valid CScriptNum, script execution MUST fail and terminate immediately.
+** If this value is less than 0 or is greater than or equal to the number of outputs, script execution MUST fail and terminate immediately.
+
+* <code><revault-vout-idx></code> is an up to 4-byte minimally encoded <code>CScriptNum</code> optionally indicating the index of an output which, in conjunction with the trigger output, carries forward the value of this input, and has an identical scriptPubKey to the current input.
+** If this value does not decode to a valid CScriptNum, script execution MUST fail and terminate immediately.
+** If this value is greater than or equal to the number of outputs, script execution MUST fail and terminate immediately.
+** If this value is negative and not equal to -1, script execution MUST fail and terminate immediately.<ref>'''Why is -1 the only allowable negative value for revault-vout-idx?''' A negative revault index indicates that no revault output exists; if this value were allowed to be any negative number, the witness could be malleated (and bloated) while a transaction is waiting for confirmation.</ref>
+
+* <code><revault-amount></code> is an up to 7-byte minimally encoded CScriptNum indicating the number of satoshis being revaulted.
+** If this value does not decode to a valid CScriptNum, script execution MUST fail and terminate immediately.
+** If this value is not greater than or equal to 0, script execution MUST fail and terminate immediately.
+** If this value is non-zero but <code><revault-vout-idx></code> is negative, script execution MUST fail and terminate immediately.
+** If this value is zero but <code><revault-vout-idx></code> is not -1, script execution MUST fail and terminate immediately.
+
+After the stack is parsed, the following validation checks are performed:
+
+* Decrement the per-script sigops budget (see [https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#user-content-Resource_limits BIP-0342]) by 60<ref>'''Why is the sigops cost for OP_VAULT set to 60?''' To determine the validity of a trigger output, OP_VAULT must perform an EC multiplication and hashing proportional to the length of the control block in order to generate the output's expected TapTweak. This has been measured to have a cost in the worst case (max length control block) of roughly twice a Schnorr verification. Because the hashing cost could be mitigated by caching midstate, the cost is 60 and not 100.</ref>; if the budget is brought below zero, script execution MUST fail and terminate immediately.
+* Let the output designated by <code><trigger-vout-idx></code> be called ''triggerOut''.
+* If the scriptPubKey of ''triggerOut'' is not a version 1 witness program, script execution MUST fail and terminate immediately.
+* Let the script constructed by taking the <code><leaf-update-script-body></code> and prefixing it with minimally-encoded data pushes of the <code><push-count></code> leaf-update script data items be called the ''leaf-update-script''.
+* If the scriptPubKey of ''triggerOut'' does not match that of a taptree that is identical to that of the currently evaluated input, but with the leaf script substituted for ''leaf-update-script'', script execution MUST fail and terminate immediately.
+** Note: the parity bit of the resulting taproot output is allowed to vary, so both values for the new output must be checked.
+* Let the output designated by <code><revault-vout-idx></code> (if the index value is non-negative) be called ''revaultOut''.
+* If the scriptPubKey of ''revaultOut'' is not equal to the scriptPubKey of the input being spent, script execution MUST fail and terminate immediately.
+* Implementation recommendation: if the sum of the amounts of ''triggerOut'' and ''revaultOut'' (if any) are not greater than or equal to the value of this input, script execution SHOULD fail and terminate immediately. This ensures that (at a minimum) the vaulted value for this input is carried through.
+** Amount checks are ultimately done with deferred checks, but this check can help short-circuit obviously invalid spends.
+* Queue a deferred check<ref>'''What is a deferred check and why does this proposal require them for correct script evaluation?''' A deferred check is a validation check that is executed only after all input scripts have been validated, and is based on aggregate information collected during each input's EvalScript run.<br /><br />Currently, the validity of each input is (usually) checked concurrently across all inputs in a transaction. Because this proposal allows batching the spend of multiple vault inputs into a single recovery or withdrawal output, we need a mechanism to ensure that all expected values per output can be summed and then checked. This necessitates the introduction of an "aggregating" set of checks which can only be executed after each input's script is evaluated. Note that similar functionality would be required for batch input validation or cross-input signature aggregation.</ref> that ensures the satoshis for this input's <code>nValue</code> minus <code><revault-amount></code> are included within the output <code>nValue</code> found at <code><trigger-vout-idx></code>.
+* Queue a deferred check that ensures <code><revault-amount></code> satoshis, if non-zero, are included within the output's <code>nValue</code> found at <code><revault-vout-idx></code>.
+** These deferred checks could be characterized in terms of the pseudocode below (in ''Deferred checks'') as<br /><code>TriggerCheck(input_amount, <revault-amount>, <trigger-vout-idx>, <revault-vout-idx>)</code>.
+
+If none of the conditions fail, a single true value (<code>0x01</code>) is left on the stack.
+
+=== <code>OP_VAULT_RECOVER</code> evaluation ===
+
+When evaluating <code>OP_VAULT_RECOVER</code> (<code>OP_SUCCESS188</code>,
+<code>0xbb</code>), the expected format of the stack, shown top to bottom, is:
+
+<source>
+<recovery-sPK-hash>
+<recovery-vout-idx>
+</source>
+
+where
+
+* <code><recovery-sPK-hash></code> is a 32-byte data push.
+** If this is not 32 bytes in length, script execution MUST fail and terminate immediately.
+* <code><recovery-vout-idx></code> is an up to 4-byte minimally encoded <code>CScriptNum</code> indicating the index of the recovery output.
+** If this value does not decode to a valid CScriptNum, script execution MUST fail and terminate immediately.
+** If this value is less than 0 or is greater than or equal to the number of outputs, script execution MUST fail and terminate immediately.
+
+After the stack is parsed, the following validation checks are performed:
+
+* Let the output at index <code><recovery-vout-idx></code> be called ''recoveryOut''.
+* If the scriptPubKey of ''recoveryOut'' does not have a tagged hash equal to <code><recovery-sPK-hash></code> (<code>tagged_hash("VaultRecoverySPK", recoveryOut.scriptPubKey) == recovery-sPK-hash</code>, where <code>tagged_hash()</code> is from the [https://github.com/bitcoin/bips/blob/master/bip-0340/reference.py BIP-0340 reference code]), script execution MUST fail and terminate immediately.
+** Implementation recommendation: if ''recoveryOut'' does not have an <code>nValue</code> greater than or equal to this input's amount, the script SHOULD fail and terminate immediately.
+* Queue a deferred check that ensures the <code>nValue</code> of ''recoveryOut'' contains the entire <code>nValue</code> of this input.<ref>'''How do recovery transactions pay for fees?''' If the recovery is unauthorized, fees are attached either via CPFP with an ephemeral anchor or as inputs which are solely spent to fees (i.e. no change output). If the recovery is authorized, fees can be attached in any manner, e.g. unrelated inputs and outputs or CPFP via anchor.</ref>
+** This deferred check could be characterized in terms of the pseudocode below as <code>RecoveryCheck(<recovery-vout-idx>, input_amount)</code>.
+
+If none of the conditions fail, a single true value (<code>0x01</code>) is left on the stack.
+
+=== Deferred check evaluation ===
+
+Once all inputs for a transaction are validated per the rules above, any
+deferred checks queued MUST be evaluated.
+
+The Python pseudocode for this is as follows:
+
+<source lang="python">
+class TriggerCheck:
+ """Queued by evaluation of OP_VAULT (withdrawal trigger)."""
+ input_amount: int
+ revault_amount: int
+ trigger_vout_idx: int
+ revault_vout_idx: int
+
+
+class RecoveryCheck:
+ """Queued by evaluation of OP_VAULT_RECOVER."""
+ input_amount: int
+ vout_idx: int
+
+
+def validate_deferred_checks(checks: [DeferredCheck], tx: Transaction) -> bool:
+ """
+ Ensure that all value from vault inputs being triggered or recovered is preserved
+ in suitable output nValues.
+ """
+ # Map to hold expected output values.
+ out_map: Dict[int, int] = defaultdict(lambda: 0)
+
+ for c in checks:
+ if isinstance(c, TriggerCheck):
+ out_map[c.trigger_vout_idx] += (c.input_amount - c.revault_amount)
+
+ if c.revault_amount > 0:
+ out_map[c.revault_vout_idx] += c.revault_amount
+
+ elif isinstance(c, RecoveryCheck):
+ out_map[c.vout_idx] += c.input_amount
+
+ for (vout_idx, amount_sats) in out_map.items():
+ # Trigger/recovery value can be greater than the constituent vault input
+ # amounts.
+ if tx.vout[vout_idx].nValue < amount_sats:
+ return False
+
+ return True
+</source>
+
+If the above procedure, or an equivalent, returns false, script execution MUST fail and terminate
+immediately.
+
+This ensures that all compatible vault inputs can be batched into shared
+corresponding trigger or recovery outputs while preserving their entire input value.
+
+
+== Policy changes ==
+
+In order to prevent possible pinning attacks, recovery transactions must be replaceable.
+
+* When validating an <code>OP_VAULT_RECOVER</code> input being spent, the script MUST fail (by policy, not consensus) and terminate immediately if both<ref>'''Why are recovery transactions required to be replaceable?''' In the case of unauthorized recoveries, an attacker may attempt to pin recovery transactions by broadcasting a "rebundled" version with a low fee rate. Vault owners must be able to overcome this with replacement. In the case of authorized recovery, if an attacker steals the recovery authorization key, the attacker may try to pin the recovery transaction during theft. Requiring replaceability ensures that the owner can always raise the fee rate of the recovery transaction, even if they are RBF rule #3 griefed in the process.</ref>
+*# the input is not marked as opt-in replaceable by having an nSequence number less than <code>0xffffffff - 1</code>, per [https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki BIP-0125], and
+*# the version of the recovery transaction has an nVersion other than 3.
+
+If the script containing <code>OP_VAULT_RECOVER</code> is 34 bytes or less<ref>34 bytes is the length of a recovery script that consists solely of <code><recovery-sPK-hash> OP_VAULT_RECOVER</code>.</ref>, let
+it be called "unauthorized," because there is no script guarding the recovery
+process. In order to prevent pinning attacks in the case of unauthorized
+recovery - since the spend of the input (and the structure of the
+transaction) is not authorized by a signed signature message - the output structure of
+unauthorized recovery transaction is limited.
+
+* If the recovery is unauthorized, the recovery transaction MUST (by policy) abide by the following constraints:
+** If the spending transaction has more than two outputs, the script MUST fail and terminate immediately.
+** If the spending transaction has two outputs, and the output which is not ''recoveryOut'' is not an [https://github.com/instagibbs/bips/blob/ephemeral_anchor/bip-ephemeralanchors.mediawiki ephemeral anchor], the script MUST fail and terminate immediately.<ref>'''Why can unauthorized recoveries only process a single recovery path?''' Because there is no signature required for unauthorized recoveries, if additional outputs were allowed, someone observing a recovery in the mempool would be able to rebundle and broadcast the recovery with a lower fee rate.</ref>
+
+== Implementation ==
+
+A sample implementation is available on bitcoin-inquisition [https://github.com/jamesob/bitcoin/tree/2023-01-opvault-inq here], with an associated [https://github.com/bitcoin-inquisition/bitcoin/pull/21 pull request].
+
+
+== Applications ==
+
+The specification above, perhaps surprisingly, does not specifically cover how a relative timelocked withdrawal process with a fixed target is implemented. The tapleaf update semantics specified in <code>OP_VAULT</code> as well as the output-based authorization enabled by <code>OP_VAULT_RECOVER</code> can be used to implement a vault, but they are incomplete without two other pieces:
+
+* a way to enforce relative timelocks, like <code>OP_CHECKSEQUENCEVERIFY</code>, and
+* a way to enforce that proposed withdrawals are ultimately being spent to a precise set of outputs, like <code>OP_CHECKTEMPLATEVERIFY</code>.
+
+These two pieces are combined with the tapleaf update capabilities of
+<code>OP_VAULT</code> to create a vault, described below.
+
+=== Creating a vault ===
+
+In order to vault coins, they can be spent into a witness v1 <code>scriptPubKey</code>
+that contains a taptree of the form
+
+<source>
+tr(<internal-pubkey>,
+ leaves = {
+ recover:
+ <recovery-sPK-hash> OP_VAULT_RECOVER,
+
+ trigger:
+ <trigger-auth-pubkey> OP_CHECKSIGVERIFY (i)
+ <spend-delay> 2 $leaf-update-script-body OP_VAULT, (ii)
+
+ ... [ possibly other leaves ]
+ }
+)
+</source>
+where
+* <code>$leaf-update-script-body</code> is, for example, <code>OP_CHECKSEQUENCEVERIFY OP_DROP OP_CHECKTEMPLATEVERIFY</code>.
+** This is one example of a trigger script, but ''any'' script fragment can be used, allowing the creation of different types of vaults. For example, you could use <code>OP_CHECKSEQUENCEVERIFY OP_DROP OP_CHECKSIG</code> to do a time-delayed transfer of the coins to another key. This also future-proofs <code>OP_VAULT</code> for future scripting capabilities.
+* The script fragment in <code>(i)</code> is called the "trigger authorization," because it gates triggering the withdrawal. This can be done in whatever manner the wallet designer would like.
+* The script fragment in <code>(ii)</code> is the incomplete <code>OP_VAULT</code> invocation - it will be completed once the rest of the parameters (the CTV target hash, trigger vout index, and revault vout index) are provided by the trigger transaction witness.
+
+Typically, the internal key for the vault taproot output will be specified so
+that it is controlled by the same descriptor as the recovery path, which
+facilitates another (though probably unused) means of recovering the vault
+output to the recovery path. This has the potential advantage of recovering the
+coin without ever revealing it was a vault.
+
+Otherwise, the internal key can be chosen to be an unspendable NUMS point to
+force execution of the taptree contents.
+
+=== Triggering a withdrawal ===
+
+To make use of the vault, and spend it towards some output, we construct a spend
+of the above <code>tr()</code> output that simply replaces the "trigger" leaf with the
+full leaf-update script (in this case, a timelocked CTV script):
+
+<source>
+Witness stack:
+
+- <revault-amount>
+- <revault-vout-idx> (-1 if none)
+- <trigger-vout-idx>
+- <target-CTV-hash>
+- <trigger-auth-pubkey-signature>
+- [ "trigger" leaf script contents ]
+- [ taproot control block prompting a script-path spend to "trigger" leaf ]
+
+Output scripts:
+
+[
+ tr(<internal-pubkey>,
+ leaves = {
+ recover:
+ <recovery-sPK-hash> OP_VAULT_RECOVER, <-- unchanged
+
+ trigger:
+ <target-CTV-hash> <spend-delay>
+ OP_CHECKSEQUENCEVERIFY OP_DROP OP_CHECKTEMPLATEVERIFY <-- changed per the
+ leaf-update
+ rules of OP_VAULT
+ ... [ possibly other leaves ]
+ }
+ ),
+
+ [ optional revault output with the
+ same sPK as the original vault output ],
+]
+</source>
+
+<code>OP_VAULT</code> has allowed the taptree to be transformed so that the trigger leaf
+becomes a timelocked CTV script, which is what actually facilitates the announced
+withdrawal. The withdrawal is interruptible by the recovery path because the
+"recover" leaf is preserved exactly from the original taptree.
+
+Note that the CTV hash is specified at spend time using the witness stack, and
+"locked in" via the <code>OP_VAULT</code> spend rules which assert its existence in the output.
+
+The vault funds can be recovered at any time prior to the spend of the
+timelocked CTV script by way of a script-path spend using the "recover" leaf.
+
+
+=== Recovery authorization ===
+
+When configuring a vault, the user must decide if they want to have the
+recovery process gated by a script fragment prefixing the
+<code>OP_VAULT_RECOVER</code> instruction in the "recover" leaf. Its use
+entails trade-offs.
+
+==== Unauthorized recovery ====
+
+Unauthorized recovery simplifies vault use in that recovery never requires additional information aside from the location of the vault outpoints and the recovery path - the "authorization" is simply the reveal of the recovery path, i.e. the preimage of <code><recovery-sPK-hash></code>.
+
+But because this reveal is the only authorization necessary to spend the vault coins to recovery, the user must expect to recover all such vaults at once, since an observer can replay this recovery (provided they know the outpoints).
+
+Additionally, unauthorized recovery across multiple distinct recovery paths
+cannot be done in the same transaction, and fee control is more constrained:
+because the output structure is limited for unauthorized recovery, fee
+management relies either on inputs which are completely spent to fees or the
+use of the optional ephemeral anchor and package relay.
+
+These limitations are to avoid pinning attacks.
+
+==== Authorized recovery ====
+
+With authorized recovery, the user must keep track of an additional piece of information: how to solve the recovery authorization script fragment when recovery is required.
+
+If this key is lost, the user will be unable to initiate the recovery process for their coins. If an attacker obtains the recovery key, they may grief the user during the recovery process by constructing a low fee rate recovery transaction and broadcasting it (though they will not be able to pin because of the replaceability requirement on recovery transactions).
+
+However, authorized recovery configurations have significant benefits. Batched recoveries are possible for vaults with otherwise incompatible recovery parameters. Fee management is much more flexible, since authorized recovery transactions are "free form" and unrelated inputs and outputs can be added, potentially to handle fees.
+
+==== Recommendation: use a simple, offline recovery authorization key seed ====
+
+The benefits of batching and fee management that authorized recovery provides are significant. If the recovery authorization key falls into the hands of an attacker, the outcome is not catastrophic, whereas if the user loses their recovery authorization key as well as their trigger key, the result is likely coin loss. Consequently, the author's recommendation is to use a simple seed for the recovery authorization key that can be written down offline and replicated.
+
+Note that the recovery authorization key '''is not''' the recovery path key, and
+this is '''much different''' than any recommendation on how to generate the
+recovery path key itself.
+
+=== Address reuse and recovery ===
+
+When creating a vault, four factors affect the resulting P2TR address:
+# The internal pubkey (likely belonging to the recovery wallet)
+# The recovery leaf
+# The trigger leaf
+# Any other leaves that exist in the taptree
+
+The end user has the option of varying certain contents along descriptors in
+order to avoid reusing vault addresses without affecting key management, e.g.
+the trigger authorization pubkeys.
+
+Note that when using unauthorized recovery, the reveal of the
+recovery scriptPubKey will allow any observer to initiate the recovery process
+for any vault with matching recovery params, provided they are able to locate
+the vault outpoints. As a result, it is recommended to expect that
+'''all outputs sharing an identical unauthorized <code><recovery-sPK-hash></code> should be recovered together'''.
+
+This situation can be avoided with a comparable key management model by varying
+the generation of each vault's recovery scriptPubKey along a single descriptor,
+but note that this will prevent recovering multiple separate vaults into a single
+recovery output.
+
+Varying the internal pubkey will prevent batching the trigger of multiple vault
+inputs into a single trigger output; consequently it is recommended that users
+instead vary some component of the trigger leaf script if address reuse is
+undesirable. Users could vary the trigger pubkey along a descriptor, keeping
+the recovery path and internal-pubkey the same, which both avoids reusing
+addresses and allows batched trigger and recovery operations.
+
+==== Recommendation: generate new recovery addresses for new trigger keys ====
+
+If using unauthorized recovery, it is recommended that you do not share recovery scriptPubKeys
+across separate trigger keys. If one trigger key is compromised, that will necessitate the (unauthorized)
+recovery of all vaults with that trigger key, which will reveal the recovery path preimage. This
+means that an observer might be able to initiate recovery for vaults controlled by an uncompromised
+trigger key.
+
+==== Fee management ====
+
+Fees can be managed in a variety of ways, but it's worth noting that both
+trigger and recovery transactions must preserve the total value of vault
+inputs, so vaulted values cannot be repurposed to pay for fees. This does not
+apply to the withdrawal transaction, which can allocate value arbitrarily.
+
+In the case of vaults that use recovery authorization, all transactions can
+"bring their own fees" in the form of unrelated inputs and outputs. These
+transactions are also free to specify ephemeral anchors, once the related relay
+policies are deployed. This means that vaults using recovery authorization have
+no dependence on the deploy of v3 relay policy.
+
+For vaults using unauthorized recovery, the recovery
+transaction relies on the use of either fully-spent fee inputs or an ephemeral
+anchor output. This means that vaults which do not use recovery authorization
+are essentially dependent on v3 transaction relay policy being deployed.
+
+=== Batching ===
+
+==== During trigger ====
+
+<code>OP_VAULT</code> outputs with the same taptree, aside from slightly
+different trigger leaves, can be batched together in the same withdrawal
+process. Two "trigger" leaves are compatible if they have the same
+<code>OP_VAULT</code> arguments.
+
+Note that this allows the trigger authorization -- the script prefixing the
+<code>OP_VAULT</code> invocation -- to differ while still allowing batching.
+
+Trigger transactions can act on multiple incompatible <code>OP_VAULT</code>
+input sets, provided each set has a suitable associated ''triggerOut''
+output.
+
+Since <code>SIGHASH_DEFAULT</code> can be used to sign the trigger
+authorization, unrelated inputs and outputs can be included, possibly to
+facilitate fee management or the batch withdrawal of incompatible vaults.
+
+==== During withdrawal ====
+
+During final withdrawal, multiple trigger outputs can be used towards the same
+withdrawal transaction provided that they share identical
+<code><target-CTV-hash></code> parameters. This facilitates batched
+withdrawals.
+
+==== During recovery ====
+
+<code>OP_VAULT_RECOVER</code> outputs with the same <code><recovery-sPK-hash></code>
+can be recovered into the same output.
+
+Recovery-incompatible vaults which have authorized recovery can be recovered in
+the same transaction, so long as each set (grouped by
+<code><recovery-sPK-hash></code>) has an associated ''recoveryOut''. This allows
+unrelated recoveries to share common fee management.
+
+=== Watchtowers ===
+
+The value of vaults is contingent upon having monitoring in place that will
+alert the owner when unexpected spends are taking place. This can be done in a
+variety of ways, with varying degrees of automation and trust in the
+watchtower.
+
+In the maximum-trust case, the watchtower can be fully aware of all vaulted
+coins and has the means to initiate the recovery process if spends are not
+pre-reported to the watchtower.
+
+In the minimum-trust case, the user can supply a probabilistic filter of which
+coins they wish to monitor; the watchtower would then alert the user if any
+coins matching the filter move, and the user would be responsible for ignoring
+false positives and handling recovery initiation.
+
+=== Output descriptors ===
+
+Output descriptors for vault-related outputs will be covered in a subsequent BIP.
+
+== Deployment ==
+
+Activation mechanism is to be determined.
+
+This BIP should be deployed concurrently with BIP-0119 to enable full use of vaults.
+
+== Backwards compatibility ==
+
+<code>OP_VAULT</code> and <code>OP_VAULT_RECOVER</code> replace, respectively,
+the witness v1-only opcodes OP_SUCCESS187 and OP_SUCCESS188 with stricter
+verification semantics. Consequently, scripts using those opcodes which
+previously were valid will cease to be valid with this change.
+
+Stricter verification semantics for an OP_SUCCESSx opcode are a soft fork, so
+existing software will be fully functional without upgrade except for mining
+and block validation.
+
+Backwards compatibility considerations are very comparable to previous
+deployments for OP_CHECKSEQUENCEVERIFY and OP_CHECKLOCKTIMEVERIFY (see
+[https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki BIP-0065] and
+[https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki BIP-0112]).
+
+
+== Rationale ==
+
+<references />
+
+== References ==
+
+* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-February/012470.html [bitcoin-dev] Bitcoin Vaults (2016)]
+* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-February/015793.html [bitcoin-dev] Simple lock/unlock mechanism (2018)]
+* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-April/017755.html [bitcoin-dev] On-chain vaults prototype (2020)]
+* [https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019419.html [bitcoin-dev] TAPLEAF_UPDATE_VERIFY covenant opcode (2021)]
+* [https://arxiv.org/abs/2005.11776 Custody Protocols Using Bitcoin Vaults (2020)]
+* [https://jameso.be/vaults.pdf Vaults and Covenants (2023)]
+
+== Acknowledgements ==
+
+The author would like to thank
+
+* AJ Towns and Greg Sanders for discussion, numerous suggestions that improved the proposal, and advice.
+* Jeremy Rubin for inspiration, advice, and mentorship.
+* BL for discussion and insight.
+* John Moffett for early feedback and a test case demonstrating a recursive script evaluation attack.
+* Johan Halseth for providing conceptual review and pointing out a pinning attack.
+* Pieter Wuille for implementation advice.
diff --git a/bip-0345/opvault.drawio.png b/bip-0345/opvault.drawio.png
new file mode 100644
index 0000000..702189d
--- /dev/null
+++ b/bip-0345/opvault.drawio.png
Binary files differ
diff --git a/bip-0345/vaults-Basic.png b/bip-0345/vaults-Basic.png
new file mode 100644
index 0000000..591b633
--- /dev/null
+++ b/bip-0345/vaults-Basic.png
Binary files differ
diff --git a/bip-0345/vaults.drawio b/bip-0345/vaults.drawio
new file mode 100644
index 0000000..6f7fd4e
--- /dev/null
+++ b/bip-0345/vaults.drawio
@@ -0,0 +1,1113 @@
+<mxfile host="app.diagrams.net" modified="2023-03-23T20:50:16.927Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36" etag="MVPrlQq-FqlMbts0SwvB" version="21.1.0" type="device" pages="8">
+ <diagram id="qHG0FeF2aWp-aiau7VVg" name="Basic flow">
+ <mxGraphModel dx="2162" dy="1316" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="b8DSxFJpJzC5LI19bmsF-1" target="b8DSxFJpJzC5LI19bmsF-3" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-8" value="&lt;div&gt;Sign with trigger key&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="b8DSxFJpJzC5LI19bmsF-5" vertex="1" connectable="0">
+ <mxGeometry x="-0.3102" y="-1" relative="1" as="geometry">
+ <mxPoint x="1" y="6" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;strokeColor=default;dashed=1;" parent="1" source="b8DSxFJpJzC5LI19bmsF-1" target="b8DSxFJpJzC5LI19bmsF-2" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-7" value="Reveal recovery &lt;br&gt;scriptPubKey&lt;br&gt;and (if applicable)&lt;br&gt;satisfy recovery &lt;br&gt;auth. script" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="b8DSxFJpJzC5LI19bmsF-6" vertex="1" connectable="0">
+ <mxGeometry x="-0.17" y="2" relative="1" as="geometry">
+ <mxPoint x="52" y="57" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-1" value="&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;b&gt;Vault transaction&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;&amp;lt;recovery-params&amp;gt;&lt;/i&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;spend-delay&lt;/i&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;trigger-sPK-hash&lt;/i&gt;&amp;gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;OP_VAULT&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;" parent="1" vertex="1">
+ <mxGeometry x="190" y="250" width="140" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-2" value="&lt;b&gt;Recovery transaction&lt;br&gt;&lt;/b&gt;&lt;br&gt;[outputs controlled &lt;br&gt;by recovery keys]" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="443" y="420" width="130" height="70" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-9" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;dashed=1;strokeColor=default;endArrow=none;endFill=0;rounded=1;" parent="1" source="b8DSxFJpJzC5LI19bmsF-3" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="400" y="300" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iAfIXZV-x1gRYHwice2W-8" value="Recover from trigger,&lt;br style=&quot;font-size: 11px;&quot;&gt;before withdrawal&lt;br style=&quot;font-size: 11px;&quot;&gt;confirms" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="b8DSxFJpJzC5LI19bmsF-9" vertex="1" connectable="0">
+ <mxGeometry x="0.4001" y="-1" relative="1" as="geometry">
+ <mxPoint x="-13" y="19" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=default;" parent="1" source="b8DSxFJpJzC5LI19bmsF-3" target="b8DSxFJpJzC5LI19bmsF-10" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-12" value="&lt;div&gt;Wait &lt;i&gt;spend-delay&lt;/i&gt; blocks &lt;b&gt;&amp;amp;&amp;amp;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;outputs match target hash&lt;br&gt;&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="b8DSxFJpJzC5LI19bmsF-11" vertex="1" connectable="0">
+ <mxGeometry x="-0.302" y="2" relative="1" as="geometry">
+ <mxPoint x="1" y="4" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="oT6HpDHtKCBb9ui_6_kA-1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.001;exitY=0.406;exitDx=0;exitDy=0;entryX=0.001;entryY=0.595;entryDx=0;entryDy=0;dashed=1;endArrow=classic;endFill=1;entryPerimeter=0;exitPerimeter=0;" parent="1" source="b8DSxFJpJzC5LI19bmsF-3" target="b8DSxFJpJzC5LI19bmsF-1" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <Array as="points">
+ <mxPoint x="90" y="441" />
+ <mxPoint x="90" y="310" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="oT6HpDHtKCBb9ui_6_kA-2" value="Optional &lt;br&gt;partial-balance&lt;br&gt;revault" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="oT6HpDHtKCBb9ui_6_kA-1" vertex="1" connectable="0">
+ <mxGeometry x="0.1091" y="1" relative="1" as="geometry">
+ <mxPoint y="13" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-3" value="&lt;div&gt;&lt;b&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;Trigger transaction&lt;/span&gt;&lt;br&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;&amp;lt;recovery-params&amp;gt;&lt;/i&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;spend-delay&lt;/i&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;target-outputs-hash&lt;/i&gt;&amp;gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;OP_UNVAULT&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="190" y="400" width="140" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-10" value="&lt;b&gt;Withdrawal transaction&lt;br&gt;&lt;/b&gt;&lt;br&gt;[dynamically chosen target outputs]" style="rounded=1;whiteSpace=wrap;html=1;align=center;" parent="1" vertex="1">
+ <mxGeometry x="190" y="567" width="140" height="73" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=default;" parent="1" source="b8DSxFJpJzC5LI19bmsF-13" target="b8DSxFJpJzC5LI19bmsF-1" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="b8DSxFJpJzC5LI19bmsF-13" value="" style="points=[[0.145,0.145,0],[0.5,0,0],[0.855,0.145,0],[1,0.5,0],[0.855,0.855,0],[0.5,1,0],[0.145,0.855,0],[0,0.5,0]];shape=mxgraph.bpmn.event;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;align=center;perimeter=ellipsePerimeter;outlineConnect=0;aspect=fixed;outline=standard;symbol=general;rounded=1;" parent="1" vertex="1">
+ <mxGeometry x="245" y="200" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="BqwL7Yf8YW1r5e_O7xE0-1" value="" style="shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#4495D1;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.veeam.time;" parent="1" vertex="1">
+ <mxGeometry x="158" y="512" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="BqwL7Yf8YW1r5e_O7xE0-2" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#505050;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;" parent="1" vertex="1">
+ <mxGeometry x="183" y="358" width="15" height="33" as="geometry" />
+ </mxCell>
+ <mxCell id="oT6HpDHtKCBb9ui_6_kA-7" value="" style="endArrow=none;html=1;rounded=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="b8DSxFJpJzC5LI19bmsF-1" target="b8DSxFJpJzC5LI19bmsF-1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="190" y="280" as="sourcePoint" />
+ <mxPoint x="240" y="230" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="oT6HpDHtKCBb9ui_6_kA-8" value="" style="endArrow=none;html=1;rounded=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="190" y="427" as="sourcePoint" />
+ <mxPoint x="330" y="427" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="oT6HpDHtKCBb9ui_6_kA-9" value="" style="endArrow=none;html=1;rounded=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="190" y="596" as="sourcePoint" />
+ <mxPoint x="330" y="596" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="oT6HpDHtKCBb9ui_6_kA-10" value="" style="endArrow=none;html=1;rounded=1;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="443" y="446" as="sourcePoint" />
+ <mxPoint x="573" y="446" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="LweIh1WkpCqs_c0vHIex-1" value="" style="endArrow=none;html=1;rounded=1;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="393" y="236" as="sourcePoint" />
+ <mxPoint x="413" y="236" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="LweIh1WkpCqs_c0vHIex-2" value="Withdrawal path" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="415" y="221" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="LweIh1WkpCqs_c0vHIex-3" value="" style="endArrow=none;html=1;rounded=1;dashed=1;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="393" y="252" as="sourcePoint" />
+ <mxPoint x="413" y="252" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="LweIh1WkpCqs_c0vHIex-4" value="Optional path" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="416" y="237" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="iAfIXZV-x1gRYHwice2W-2" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=default;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="359" y="449.76" as="sourcePoint" />
+ <mxPoint x="369" y="449.76" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="359" y="449.76" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iAfIXZV-x1gRYHwice2W-4" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=default;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="399" y="299.76" as="sourcePoint" />
+ <mxPoint x="409" y="299.76" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="iAfIXZV-x1gRYHwice2W-5" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=default;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="150" y="440" as="sourcePoint" />
+ <mxPoint x="140" y="440" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+ <diagram id="hQFg2SRqlWPJF2oUK6n1" name="Batch sweep">
+ <mxGraphModel dx="1430" dy="1768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="DGUraX8pYsX29eg1CZX8-1" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="636" y="415" width="138" height="160" as="geometry" />
+ </mxCell>
+ <mxCell id="DGUraX8pYsX29eg1CZX8-2" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="DGUraX8pYsX29eg1CZX8-1" target="DGUraX8pYsX29eg1CZX8-1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="660" y="519.5" as="sourcePoint" />
+ <mxPoint x="710" y="469.5" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="DGUraX8pYsX29eg1CZX8-3" value="&lt;b style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
+ <mxGeometry x="722" y="440" width="100" height="80" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-11" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="380" y="300" width="138" height="122" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-12" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="IMLKYxiTQTyD-2dyPs5i-11" target="IMLKYxiTQTyD-2dyPs5i-11" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="398" y="352" as="sourcePoint" />
+ <mxPoint x="448" y="302" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-13" value="&lt;b style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
+ <mxGeometry x="460" y="313" width="100" height="83" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-16" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="400" y="499" width="115" height="138" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-17" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="435" y="637" as="sourcePoint" />
+ <mxPoint x="435" y="499" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-18" value="&lt;b style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
+ <mxGeometry x="457" y="516" width="100" height="101" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-27" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="165" y="420" width="138" height="140" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-28" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="201" y="560" as="sourcePoint" />
+ <mxPoint x="201" y="420" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-29" value="&lt;b style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
+ <mxGeometry x="230" y="437" width="100" height="101" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-30" value="&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;b&gt;scriptPubKey&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;border-color: var(--border-color); line-height: 4.8px;&quot;&gt;&lt;i style=&quot;border-color: var(--border-color);&quot;&gt;&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#0066cc&quot;&gt;recov-hash&amp;nbsp;&lt;/font&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#00060d&quot;&gt;...&lt;/font&gt;&lt;/b&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;border-color: var(--border-color); line-height: 4.8px;&quot;&gt;&amp;nbsp; OP_VAULT&lt;/p&gt;&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;b style=&quot;background-color: initial;&quot;&gt;amount&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;a3&lt;/span&gt;&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="1" vertex="1">
+ <mxGeometry x="461" y="513.5" width="100" height="110" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-31" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="134" y="270" width="88" height="122" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-32" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="157" y="392" as="sourcePoint" />
+ <mxPoint x="157" y="270" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-33" value="&lt;b style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
+ <mxGeometry x="180" y="282" width="100" height="101" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-34" value="&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;b&gt;scriptPubKey&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;i&gt;&lt;b style=&quot;&quot;&gt;&lt;font color=&quot;#0066cc&quot;&gt;recov-hash &lt;/font&gt;&lt;font color=&quot;#00060d&quot;&gt;...&lt;/font&gt;&lt;/b&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; OP_VAULT&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 120%;&quot;&gt;&lt;b&gt;amount&lt;/b&gt;&lt;br&gt;a1&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="1" vertex="1">
+ <mxGeometry x="183" y="271" width="100" height="120" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="IMLKYxiTQTyD-2dyPs5i-38" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="280" y="333" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="340" y="333" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-38" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="340" y="319" width="90" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-39" value="&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;b&gt;witness&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 40%;&quot;&gt;[&lt;i&gt;trigger-key&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 40%;&quot;&gt;&amp;nbsp; signature]&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="1" vertex="1">
+ <mxGeometry x="353" y="310" width="90" height="80" as="geometry" />
+ </mxCell>
+ <mxCell id="IMagvj_H5wSyhYbexlPS-2" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="IMLKYxiTQTyD-2dyPs5i-18" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="600" y="538" as="sourcePoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-54" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="IMLKYxiTQTyD-2dyPs5i-13" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="600" y="448.5" as="sourcePoint" />
+ <Array as="points">
+ <mxPoint x="580" y="449" />
+ <mxPoint x="580" y="355" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMagvj_H5wSyhYbexlPS-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.367;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="IMLKYxiTQTyD-2dyPs5i-43" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="600" y="491.5" as="sourcePoint" />
+ <mxPoint x="330" y="486.5" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="600" y="487" />
+ <mxPoint x="465" y="487" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-43" value="Script-path reveal" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="600" y="473" width="90" height="35" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-20" value="&lt;p style=&quot;line-height: 40%;&quot;&gt;&lt;b&gt;scriptPubKey&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;border-color: var(--border-color); line-height: 4.8px;&quot;&gt;&lt;i style=&quot;border-color: var(--border-color);&quot;&gt;&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#0066cc&quot;&gt;recov-hash&amp;nbsp;&lt;/font&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#00060d&quot;&gt;...&lt;/font&gt;&lt;/b&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;border-color: var(--border-color); line-height: 4.8px;&quot;&gt;&lt;span style=&quot;border-color: var(--border-color); background-color: initial;&quot;&gt;&amp;nbsp; OP_VAULT&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 120%;&quot;&gt;&lt;b&gt;amount&lt;/b&gt;&lt;br&gt;a2&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="1" vertex="1">
+ <mxGeometry x="233" y="430" width="100" height="120" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-53" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="465" y="307.5" width="120" height="95" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-15" value="&lt;p style=&quot;line-height: 10%;&quot;&gt;&lt;b&gt;scriptPubKey&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;border-color: var(--border-color); line-height: 4.8px;&quot;&gt;&lt;i style=&quot;border-color: var(--border-color);&quot;&gt;&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#0066cc&quot;&gt;recov-hash&amp;nbsp;&lt;/font&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#00060d&quot;&gt;...&lt;/font&gt;&lt;/b&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;border-color: var(--border-color); line-height: 4.8px;&quot;&gt;&lt;span style=&quot;border-color: var(--border-color); background-color: initial;&quot;&gt;&amp;nbsp; OP_UNVAULT&lt;/span&gt;&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="IMLKYxiTQTyD-2dyPs5i-53" vertex="1">
+ <mxGeometry width="110" height="70" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-26" value="&lt;p style=&quot;line-height: 10%;&quot;&gt;&lt;b&gt;amount&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 10%;&quot;&gt;a1&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="IMLKYxiTQTyD-2dyPs5i-53" vertex="1">
+ <mxGeometry y="45" width="70" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-60" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="730" y="438" width="100" height="82" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-58" value="&lt;p style=&quot;line-height: 20%;&quot;&gt;&lt;b&gt;scriptPubKey&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 20%;&quot;&gt;&lt;i&gt;[recovery-spk]&lt;/i&gt;&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="IMLKYxiTQTyD-2dyPs5i-60" vertex="1">
+ <mxGeometry width="100" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-59" value="&lt;p style=&quot;line-height: 10%;&quot;&gt;&lt;b&gt;amount&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 10%;&quot;&gt;a1 + a2 + a3&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="IMLKYxiTQTyD-2dyPs5i-60" vertex="1">
+ <mxGeometry y="32" width="90" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-61" value="&lt;i&gt;Ephemeral anchor&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;" parent="1" vertex="1">
+ <mxGeometry x="723.5" y="527" width="97" height="35" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-62" value="Recovered to interrupt unvault" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontSize=17;" parent="1" vertex="1">
+ <mxGeometry x="277" y="268.5" width="250" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-63" value="Recovered while still vaulted" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontSize=17;" parent="1" vertex="1">
+ <mxGeometry x="139" y="571" width="240" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IMLKYxiTQTyD-2dyPs5i-64" value="Batch recovery" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontSize=17;" parent="1" vertex="1">
+ <mxGeometry x="635" y="380.5" width="140" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IMagvj_H5wSyhYbexlPS-9" value="output" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="723" y="273" width="90" height="21" as="geometry" />
+ </mxCell>
+ <mxCell id="IMagvj_H5wSyhYbexlPS-10" value="optional output" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;" parent="1" vertex="1">
+ <mxGeometry x="723" y="302" width="90" height="21" as="geometry" />
+ </mxCell>
+ <mxCell id="IMagvj_H5wSyhYbexlPS-11" value="input" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="723" y="332" width="90" height="22" as="geometry" />
+ </mxCell>
+ <mxCell id="prdVbKwsFvf7KEGo0tpI-2" value="Script-path reveal" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="600" y="515" width="90" height="35" as="geometry" />
+ </mxCell>
+ <mxCell id="T7j29g-1OFRtJtuNoE9x-1" value="Script-path reveal" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="600" y="434" width="90" height="35" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+ <diagram id="x3-0X1WiPTrt-eOLsWqB" name="Recovery comparison">
+ <mxGraphModel dx="1236" dy="1768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-1" target="QagaKE3Mm4n1A5BtnNWS-2" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="120" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-2" target="QagaKE3Mm4n1A5BtnNWS-5" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-2" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="200" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-4" value="&lt;div&gt;Presigned&lt;/div&gt;&lt;div&gt;vault&lt;br&gt;&lt;/div&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="180" y="200" width="80" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-5" target="QagaKE3Mm4n1A5BtnNWS-8" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-5" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="280" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-7" value="Unvault" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="265" y="205" width="70" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-8" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="360" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-10" value="To recovery" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="335" y="205" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-12" target="QagaKE3Mm4n1A5BtnNWS-14" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-12" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="120" y="299" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-14" target="QagaKE3Mm4n1A5BtnNWS-16" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-14" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="200" y="299" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-16" target="QagaKE3Mm4n1A5BtnNWS-17" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-16" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="280" y="299" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-17" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="360" y="299" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-21" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="240" y="260" width="40" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-18" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-21" vertex="1">
+ <mxGeometry width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-19" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-21" vertex="1">
+ <mxGeometry y="10" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-20" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-21" vertex="1">
+ <mxGeometry y="20" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-22" value="&lt;b&gt;Precomputed vaults&lt;/b&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="210" y="168" width="140" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-24" target="QagaKE3Mm4n1A5BtnNWS-26" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-24" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="480" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-26" target="QagaKE3Mm4n1A5BtnNWS-29" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-26" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="560" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-27" value="&lt;div&gt;OP_VAULT&lt;/div&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="540" y="205" width="80" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-29" target="QagaKE3Mm4n1A5BtnNWS-31" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-29" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="640" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-30" value="OP_UNVAULT" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="615" y="205" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-31" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="720" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-32" value="To recovery" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="695" y="205" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-34" target="QagaKE3Mm4n1A5BtnNWS-36" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-34" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="480" y="299" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-36" target="QagaKE3Mm4n1A5BtnNWS-38" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-36" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="560" y="299" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-38" target="QagaKE3Mm4n1A5BtnNWS-31" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="720" y="342" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-38" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="640" y="299" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-40" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="600" y="260" width="40" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-41" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-40" vertex="1">
+ <mxGeometry width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-42" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-40" vertex="1">
+ <mxGeometry y="10" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-43" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-40" vertex="1">
+ <mxGeometry y="20" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-44" value="&lt;b&gt;OP_VAULT&lt;/b&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="600" y="168" width="80" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-46" target="QagaKE3Mm4n1A5BtnNWS-48" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-46" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="120" y="449" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-48" target="QagaKE3Mm4n1A5BtnNWS-51" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="200" y="449" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-49" value="&lt;div&gt;Presigned&lt;/div&gt;&lt;div&gt;vault&lt;br&gt;&lt;/div&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="180" y="409" width="80" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-51" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="280" y="449" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-52" value="To recovery" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="255" y="414" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-56" target="QagaKE3Mm4n1A5BtnNWS-58" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-56" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="120" y="503" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-58" target="QagaKE3Mm4n1A5BtnNWS-60" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-58" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="200" y="503" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-60" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="280" y="503" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-62" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="238" y="467" width="40" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-63" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-62" vertex="1">
+ <mxGeometry width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-64" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-62" vertex="1">
+ <mxGeometry y="10" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-65" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-62" vertex="1">
+ <mxGeometry y="20" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-66" value="&lt;b&gt;Precomputed vaults&lt;/b&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="210" y="377" width="140" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-67" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-68" target="QagaKE3Mm4n1A5BtnNWS-70" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-68" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="480" y="449" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-69" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-70" target="QagaKE3Mm4n1A5BtnNWS-73" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-70" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="560" y="449" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-71" value="&lt;div&gt;OP_VAULT&lt;/div&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="540" y="412" width="80" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-73" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="640" y="449" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-76" value="To recovery" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="615" y="412" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-77" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-78" target="QagaKE3Mm4n1A5BtnNWS-80" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-78" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="480" y="503" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-79" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="QagaKE3Mm4n1A5BtnNWS-80" target="QagaKE3Mm4n1A5BtnNWS-73" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="640" y="551" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-80" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="560" y="503" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-83" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="517" y="468" width="40" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-84" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-83" vertex="1">
+ <mxGeometry width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-85" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-83" vertex="1">
+ <mxGeometry y="10" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-86" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="QagaKE3Mm4n1A5BtnNWS-83" vertex="1">
+ <mxGeometry y="20" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="QagaKE3Mm4n1A5BtnNWS-87" value="&lt;b&gt;OP_VAULT&lt;/b&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="600" y="377" width="80" height="30" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+ <diagram id="51t3zBxVp8Nxi1LOdNUq" name="Withdrawal comparison">
+ <mxGraphModel dx="1430" dy="1768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-2" target="ezkKjIhg79-38QoQ9XiY-4" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-2" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="120" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-4" target="ezkKjIhg79-38QoQ9XiY-7" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-4" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="190" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-5" value="&lt;div&gt;Presigned&lt;/div&gt;&lt;div&gt;vault&lt;br&gt;&lt;/div&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="167" y="198" width="80" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-7" target="ezkKjIhg79-38QoQ9XiY-9" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-7" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="260" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-8" value="Unvault" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="243" y="202" width="70" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-78" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-9" target="ezkKjIhg79-38QoQ9XiY-77" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-9" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="335" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-10" value="&lt;div&gt;&quot;Warm&quot; &lt;br&gt;&lt;/div&gt;&lt;div&gt;wallet&lt;br&gt;&lt;/div&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="322" y="199" width="60" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-12" target="ezkKjIhg79-38QoQ9XiY-14" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-12" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="120" y="322" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-14" target="ezkKjIhg79-38QoQ9XiY-16" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-14" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="190" y="322" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-16" target="ezkKjIhg79-38QoQ9XiY-17" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-16" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="260" y="322" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-90" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Helvetica;" parent="1" source="ezkKjIhg79-38QoQ9XiY-17" target="ezkKjIhg79-38QoQ9XiY-80" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-17" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="335" y="322" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-18" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="220" y="270" width="40" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-19" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="ezkKjIhg79-38QoQ9XiY-18" vertex="1">
+ <mxGeometry width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-20" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="ezkKjIhg79-38QoQ9XiY-18" vertex="1">
+ <mxGeometry y="10" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-21" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="ezkKjIhg79-38QoQ9XiY-18" vertex="1">
+ <mxGeometry y="20" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-22" value="&lt;b&gt;Precomputed vaults&lt;/b&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="210" y="158" width="140" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-24" target="ezkKjIhg79-38QoQ9XiY-26" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-24" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="519" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-26" target="ezkKjIhg79-38QoQ9XiY-29" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-26" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="599" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-27" value="&lt;div&gt;OP_VAULT&lt;/div&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="579" y="203" width="80" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-29" target="ezkKjIhg79-38QoQ9XiY-31" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-89" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0;entryDx=0;entryDy=0;fontFamily=Helvetica;" parent="1" target="ezkKjIhg79-38QoQ9XiY-83" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="740" y="260" as="sourcePoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-29" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="690" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-31" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="769" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ezkKjIhg79-38QoQ9XiY-34" target="ezkKjIhg79-38QoQ9XiY-36" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-34" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="519" y="322" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="ezkKjIhg79-38QoQ9XiY-36" target="ezkKjIhg79-38QoQ9XiY-29" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="660" y="260" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="660" y="342" />
+ <mxPoint x="660" y="260" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-36" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="599" y="322" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-39" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="559" y="270" width="40" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-40" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="ezkKjIhg79-38QoQ9XiY-39" vertex="1">
+ <mxGeometry width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-41" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="ezkKjIhg79-38QoQ9XiY-39" vertex="1">
+ <mxGeometry y="10" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-42" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="ezkKjIhg79-38QoQ9XiY-39" vertex="1">
+ <mxGeometry y="20" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-43" value="&lt;b&gt;OP_VAULT&lt;/b&gt;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="639" y="158" width="80" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-77" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="414" y="240" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-80" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="414" y="322" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-83" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="769" y="290" width="40" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-84" value="Targets" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Helvetica;" parent="1" vertex="1">
+ <mxGeometry x="401" y="202" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="ezkKjIhg79-38QoQ9XiY-85" value="Targets" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Helvetica;" parent="1" vertex="1">
+ <mxGeometry x="758" y="203" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="hU3LCPZSUflRbzsWwJJh-1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="462" y="170" width="20" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="hU3LCPZSUflRbzsWwJJh-2" value="=&amp;nbsp; UTXO" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;" parent="1" vertex="1">
+ <mxGeometry x="482" y="166" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="zbme-GfWksCJWwraIK2J-1" value="&quot;Trigger&quot;" style="text;html=1;resizable=0;autosize=1;align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;fontFamily=Helvetica;" vertex="1" parent="1">
+ <mxGeometry x="673" y="203" width="70" height="30" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+ <diagram id="M-0T8bRLORY_nlIivCLq" name="Alt-vaults">
+ <mxGraphModel dx="1236" dy="1160" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="-zpKa_FQ8lR9X4kw_iqW-5" target="-zpKa_FQ8lR9X4kw_iqW-9" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-2" value="&lt;div&gt;Sign with unvault key&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="-zpKa_FQ8lR9X4kw_iqW-1" vertex="1" connectable="0">
+ <mxGeometry x="-0.3102" y="-1" relative="1" as="geometry">
+ <mxPoint x="1" y="6" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;strokeColor=default;dashed=1;" parent="1" source="-zpKa_FQ8lR9X4kw_iqW-5" target="-zpKa_FQ8lR9X4kw_iqW-6" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-4" value="Reveal cold address" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="-zpKa_FQ8lR9X4kw_iqW-3" vertex="1" connectable="0">
+ <mxGeometry x="-0.17" y="2" relative="1" as="geometry">
+ <mxPoint x="6" y="-8" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-5" value="&lt;div&gt;&lt;b&gt;OP_VAULT&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;cold-addr-hash&lt;/i&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;spend-delay&lt;/i&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;unvault-pk&lt;/i&gt;&amp;gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;" parent="1" vertex="1">
+ <mxGeometry x="190" y="270" width="140" height="80" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-6" value="[recovery path]" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="460" y="285" width="120" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=default;" parent="1" source="-zpKa_FQ8lR9X4kw_iqW-9" target="-zpKa_FQ8lR9X4kw_iqW-10" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-8" value="&lt;div&gt;Wait &lt;i&gt;spend-delay&lt;/i&gt; blocks &lt;b&gt;&amp;amp;&amp;amp;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;outputs match target hash&lt;br&gt;&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="-zpKa_FQ8lR9X4kw_iqW-7" vertex="1" connectable="0">
+ <mxGeometry x="-0.302" y="2" relative="1" as="geometry">
+ <mxPoint y="5" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-9" value="&lt;div&gt;&lt;b&gt;OP_UNVAULT&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;cold-addr-hash&lt;/i&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;spend-delay&lt;/i&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;&lt;i&gt;target-outputs-hash&lt;/i&gt;&amp;gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="190" y="400" width="140" height="80" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-10" value="[arbitrary unvault target]" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="520" y="360" width="140" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=default;" parent="1" source="-zpKa_FQ8lR9X4kw_iqW-12" target="-zpKa_FQ8lR9X4kw_iqW-5" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-12" value="" style="points=[[0.145,0.145,0],[0.5,0,0],[0.855,0.145,0],[1,0.5,0],[0.855,0.855,0],[0.5,1,0],[0.145,0.855,0],[0,0.5,0]];shape=mxgraph.bpmn.event;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;align=center;perimeter=ellipsePerimeter;outlineConnect=0;aspect=fixed;outline=standard;symbol=general;rounded=1;" parent="1" vertex="1">
+ <mxGeometry x="245" y="220" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-13" value="" style="shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#4495D1;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.veeam.time;" parent="1" vertex="1">
+ <mxGeometry x="505" y="425" width="30" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-14" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#505050;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;" parent="1" vertex="1">
+ <mxGeometry x="170" y="360" width="15" height="33" as="geometry" />
+ </mxCell>
+ <mxCell id="-zpKa_FQ8lR9X4kw_iqW-15" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="330" y="420" as="sourcePoint" />
+ <mxPoint x="390" y="310" as="targetPoint" />
+ <Array as="points">
+ <mxPoint x="390" y="420" />
+ </Array>
+ </mxGeometry>
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+ <diagram id="9IyR_zxcH8IqVGAvo76N" name="Basic">
+ <mxGraphModel dx="1236" dy="1768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" source="uh7-YCnJg2CyufrYdqnU-1" target="uh7-YCnJg2CyufrYdqnU-2" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-7" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" source="uh7-YCnJg2CyufrYdqnU-1" target="uh7-YCnJg2CyufrYdqnU-4" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-1" value="&lt;div&gt;User spends UTXO(s)&lt;br&gt;&lt;/div&gt;&lt;div&gt;into vault&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" vertex="1">
+ <mxGeometry x="90" y="310" width="140" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" source="uh7-YCnJg2CyufrYdqnU-2" target="uh7-YCnJg2CyufrYdqnU-3" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="KdfuowOYJgZ3zCW8n2jm-2" value="&lt;div&gt;After some&lt;/div&gt;&lt;div&gt;delay&lt;br&gt;&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=1;points=[];movable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="uh7-YCnJg2CyufrYdqnU-6" vertex="1" connectable="0">
+ <mxGeometry x="-0.2" y="-1" relative="1" as="geometry">
+ <mxPoint x="15" y="-1" as="offset" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-10" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" source="uh7-YCnJg2CyufrYdqnU-2" target="uh7-YCnJg2CyufrYdqnU-4" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-2" value="&lt;div&gt;Unvault attempt&lt;br&gt;&lt;/div&gt;&lt;div&gt;is triggered&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" vertex="1">
+ <mxGeometry x="260" y="310" width="140" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-3" value="&lt;div&gt;Withdrawal is finalized&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" vertex="1">
+ <mxGeometry x="500" y="310" width="140" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="uh7-YCnJg2CyufrYdqnU-4" value="&lt;div&gt;Vaulted coins &lt;br&gt;&lt;/div&gt;&lt;div&gt;swept to prespecified&lt;/div&gt;&lt;div&gt;recovery path&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" vertex="1">
+ <mxGeometry x="340" y="230" width="140" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="KdfuowOYJgZ3zCW8n2jm-1" value="" style="shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#4495D1;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.veeam.time;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" vertex="1">
+ <mxGeometry x="446" y="360" width="20" height="20" as="geometry" />
+ </mxCell>
+ <mxCell id="4beDPwlwmHm2dIG_X1VO-2" value="" style="endArrow=none;html=1;rounded=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="520" y="259" as="sourcePoint" />
+ <mxPoint x="540" y="259" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="4beDPwlwmHm2dIG_X1VO-3" value="Expected path" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" vertex="1">
+ <mxGeometry x="542" y="244" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="4beDPwlwmHm2dIG_X1VO-4" value="" style="endArrow=none;html=1;rounded=1;dashed=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="520" y="275" as="sourcePoint" />
+ <mxPoint x="540" y="275" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="4beDPwlwmHm2dIG_X1VO-5" value="Recovery path" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="1" vertex="1">
+ <mxGeometry x="543" y="260" width="90" height="30" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+ <diagram id="jRtaY6zHFwBRHzIYjIhC" name="Page-7">
+ <mxGraphModel dx="2162" dy="1316" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-56" value="" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;strokeColor=#4D4D4D;fontFamily=Courier New;fontSize=20;" parent="1" vertex="1">
+ <mxGeometry x="308" y="660" width="232" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-50" value="" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;strokeColor=#4D4D4D;fontFamily=Courier New;fontSize=20;" parent="1" vertex="1">
+ <mxGeometry x="57" y="380" width="413" height="230" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-48" value="" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;strokeColor=#4D4D4D;fontFamily=Courier New;fontSize=20;" parent="1" vertex="1">
+ <mxGeometry x="590" y="380" width="230" height="221" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-46" value="" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#4D4D4D;fontFamily=Courier New;fontSize=8;dashed=1;" parent="1" vertex="1">
+ <mxGeometry x="182" y="102.5" width="509" height="183.5" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-19" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="445" y="169.5" width="120" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-2" value="&amp;nbsp;[trigger auth]&amp;nbsp;&lt;i&gt;&amp;lt;spend-delay&amp;gt;&lt;/i&gt; 2 &quot;OP_CSV OP_DROP OP_CTV&quot; &lt;b&gt;OP_VAULT&amp;nbsp;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#336600;" parent="1" vertex="1">
+ <mxGeometry x="199" y="187.5" width="471" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-20" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="288" y="488" width="120" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-21" value="&amp;nbsp;&lt;i&gt; &lt;font color=&quot;#994c00&quot;&gt;&amp;lt;CTV-hash&amp;gt;&lt;/font&gt;&amp;nbsp;&amp;lt;spend-delay&amp;gt;&lt;/i&gt;&amp;nbsp;OP_CSV OP_DROP OP_CTV&amp;nbsp;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#B01E1E;" parent="1" vertex="1">
+ <mxGeometry x="80" y="508" width="380" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-22" value="[recovery auth]&lt;i&gt; &amp;lt;recovery-sPK-hash&amp;gt;&lt;/i&gt; &lt;b&gt;OP_VAULT_RECOVER&amp;nbsp;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#007FFF;" parent="1" vertex="1">
+ <mxGeometry x="80" y="545" width="380" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-18" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.394;entryY=0.97;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Courier New;fontSize=22;" parent="1" source="Y65zMmu6unbP29DxbX5J-24" target="Y65zMmu6unbP29DxbX5J-25" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-24" value="&lt;i&gt;&amp;lt;internal-pubkey&amp;gt;&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=center;" parent="1" vertex="1">
+ <mxGeometry x="139" y="483" width="120" height="16.5" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-25" value="TR" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="239" y="444.5" width="100" height="28.5" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-17" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fontFamily=Courier New;fontSize=22;" parent="1" source="Y65zMmu6unbP29DxbX5J-26" target="Y65zMmu6unbP29DxbX5J-25" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-26" value="Tapleaves" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" parent="1" vertex="1">
+ <mxGeometry x="290" y="481" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-27" value="&lt;i&gt;withdrawal&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" parent="1" vertex="1">
+ <mxGeometry x="80" y="499" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-28" value="&lt;i&gt;recover&lt;br&gt;&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" parent="1" vertex="1">
+ <mxGeometry x="75" y="536" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-29" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=1;fontFamily=Courier New;fontSize=9;endWidth=7.5;endSize=4.325;strokeColor=#336600;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="310" y="300" as="sourcePoint" />
+ <mxPoint x="263" y="366" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-30" value="script-path spend of &lt;i style=&quot;font-size: 11px;&quot;&gt;&lt;font color=&quot;#336600&quot; style=&quot;font-size: 11px;&quot;&gt;trigger&lt;/font&gt;&lt;/i&gt;&amp;nbsp;leaf,&lt;br style=&quot;font-size: 11px;&quot;&gt;supplying &lt;font color=&quot;#cc6600&quot; style=&quot;font-size: 11px;&quot;&gt;CTV hash &lt;/font&gt;in witness,&lt;br style=&quot;font-size: 11px;&quot;&gt;satisfying trigger auth" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;" parent="1" vertex="1">
+ <mxGeometry x="97" y="305" width="167" height="43" as="geometry" />
+ </mxCell>
+ <mxCell id="Y65zMmu6unbP29DxbX5J-33" value="script-path spend of &lt;i style=&quot;font-size: 11px;&quot;&gt;&lt;font color=&quot;#007fff&quot; style=&quot;font-size: 11px;&quot;&gt;recover&lt;/font&gt;&lt;/i&gt;&amp;nbsp;leaf, satisfying recovery authorization &lt;br style=&quot;font-size: 11px;&quot;&gt;script, if specified" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;" parent="1" vertex="1">
+ <mxGeometry x="640" y="295.5" width="140" height="64" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-12" value="OP_VAULT allows templated replacement of its leaf during spend (green to red) - otherwise taptree unchanged" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=0" parent="1" vertex="1">
+ <mxGeometry x="251" y="398" width="202" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-13" value="" style="endArrow=classic;html=1;rounded=1;fontFamily=Courier New;fontSize=22;strokeColor=#007FFF;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="570" y="300" as="sourcePoint" />
+ <mxPoint x="642" y="360" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-21" value="&amp;nbsp;[recovery auth] &lt;i&gt;&amp;lt;recovery-sPK-hash&amp;gt;&lt;/i&gt; &lt;b&gt;OP_VAULT_RECOVER&amp;nbsp;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#007FFF;" parent="1" vertex="1">
+ <mxGeometry x="199" y="226.5" width="471" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-22" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.394;entryY=0.97;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Courier New;fontSize=22;" parent="1" source="nh3bwgDFfLlpKYWmzqJt-23" target="nh3bwgDFfLlpKYWmzqJt-24" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-23" value="&lt;i&gt;&amp;lt;internal-pubkey&amp;gt;&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=center;" parent="1" vertex="1">
+ <mxGeometry x="289" y="164.5" width="120" height="16.5" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-24" value="TR" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="389" y="126" width="100" height="28.5" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-26" value="Tapleaves" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" parent="1" vertex="1">
+ <mxGeometry x="444" y="162.5" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-27" value="&lt;i&gt;trigger&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" parent="1" vertex="1">
+ <mxGeometry x="188" y="180.5" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-28" value="&lt;i&gt;recover&lt;br&gt;&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" parent="1" vertex="1">
+ <mxGeometry x="191" y="217.5" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-29" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="444" y="139.5" width="12" height="10" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-30" value="2" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;fontFamily=Courier New;" parent="1" vertex="1">
+ <mxGeometry x="270" y="449" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-37" value="&lt;p style=&quot;border-color: var(--border-color); line-height: 2.4px;&quot;&gt;&lt;i style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#cc6600&quot;&gt;[transaction&lt;/font&gt;&lt;/i&gt;&lt;i style=&quot;background-color: initial; border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#cc6600&quot;&gt;&amp;nbsp;satisfying&amp;nbsp;&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;&lt;p style=&quot;border-color: var(--border-color); line-height: 2.4px;&quot;&gt;&lt;i style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color);&quot; color=&quot;#cc6600&quot;&gt;&amp;nbsp; CTV hash]&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=center;" parent="1" vertex="1">
+ <mxGeometry x="339" y="695" width="171" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-43" value="" style="endArrow=classic;html=1;rounded=1;fontFamily=Courier New;fontSize=22;strokeColor=#CC0000;fontColor=#CC0000;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="266" y="620" as="sourcePoint" />
+ <mxPoint x="300" y="660" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-44" value="timelocked CTV spend to predefined destination" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;" parent="1" vertex="1">
+ <mxGeometry x="150" y="654" width="120" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-47" value="1. initial vault" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=2;fontColor=#808080;" parent="1" vertex="1">
+ <mxGeometry x="199.5" y="104.5" width="131" height="28" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-49" value="recovery" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=2;fontColor=#808080;" parent="1" vertex="1">
+ <mxGeometry x="688" y="378" width="131" height="28" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-51" value="2. trigger" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=2;fontColor=#808080;" parent="1" vertex="1">
+ <mxGeometry x="50" y="380.5" width="131" height="28" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-52" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontFamily=Courier New;fontSize=20;" parent="1" edge="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="565.0000000000002" y="340" as="sourcePoint" />
+ <mxPoint x="565.0000000000002" y="340" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-53" value="" style="group" parent="1" vertex="1" connectable="0">
+ <mxGeometry x="610" y="418.5" width="210" height="160" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-1" value="" style="rounded=1;whiteSpace=wrap;html=1;" parent="nh3bwgDFfLlpKYWmzqJt-53" vertex="1">
+ <mxGeometry x="22.105263157894736" width="127.10526315789473" height="160" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-3" value="&lt;b style=&quot;background-color: initial;&quot;&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=left;" parent="nh3bwgDFfLlpKYWmzqJt-53" vertex="1">
+ <mxGeometry x="101.31578947368422" y="14" width="92.10526315789473" height="80" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-5" value="" style="group;fontSize=9;" parent="nh3bwgDFfLlpKYWmzqJt-53" vertex="1" connectable="0">
+ <mxGeometry x="105.6842105263158" y="14" width="101.31578947368422" height="82" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-6" value="&lt;p style=&quot;line-height: 20%; font-size: 11px;&quot;&gt;&lt;b style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;scriptPubKey&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 20%; font-size: 11px;&quot;&gt;&lt;i style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;[recovery-spk]&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="nh3bwgDFfLlpKYWmzqJt-5" vertex="1">
+ <mxGeometry x="-2" width="100" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-7" value="&lt;p style=&quot;line-height: 10%; font-size: 11px;&quot;&gt;&lt;b style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;amount&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 10%; font-size: 11px;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;&lt;i&gt;[full vault amount]&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;" style="text;html=1;resizable=0;autosize=1;align=left;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;dashed=1;" parent="nh3bwgDFfLlpKYWmzqJt-5" vertex="1">
+ <mxGeometry x="-2" y="32" width="110" height="50" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-8" value="&lt;i&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;Ephemeral anchor&lt;/font&gt;&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;" parent="nh3bwgDFfLlpKYWmzqJt-53" vertex="1">
+ <mxGeometry x="102.69736842105263" y="107" width="89.34210526315789" height="35" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-11" value="Script-path reveal" style="rounded=0;whiteSpace=wrap;html=1;fontSize=10;" parent="nh3bwgDFfLlpKYWmzqJt-53" vertex="1">
+ <mxGeometry y="30" width="64.47368421052632" height="35" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-2" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="nh3bwgDFfLlpKYWmzqJt-53" source="nh3bwgDFfLlpKYWmzqJt-1" target="nh3bwgDFfLlpKYWmzqJt-1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="540.6578947368422" y="505" as="sourcePoint" />
+ <mxPoint x="586.7105263157895" y="455" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-57" value="3. withdrawal" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=2;fontColor=#808080;" parent="1" vertex="1">
+ <mxGeometry x="395" y="660" width="131" height="28" as="geometry" />
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-61" value="" style="endArrow=classic;html=1;rounded=1;strokeColor=#000000;fontFamily=Courier New;fontSize=11;fontColor=#808080;exitX=0.098;exitY=-0.004;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.663;entryY=0.984;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="nh3bwgDFfLlpKYWmzqJt-19" target="nh3bwgDFfLlpKYWmzqJt-24" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="446.5" y="176" as="sourcePoint" />
+ <mxPoint x="496.5" y="126" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="nh3bwgDFfLlpKYWmzqJt-62" value="" style="endArrow=classic;html=1;rounded=1;fontFamily=Courier New;fontSize=22;strokeColor=#007FFF;" parent="1" edge="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="490" y="440" as="sourcePoint" />
+ <mxPoint x="570" y="440" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+ <diagram id="gvPKSLqK7s9hnQgXeOr3" name="Page-8">
+ <mxGraphModel dx="547" dy="897" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="IdHh1SD0108lOCAqlYyb-2" value="" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;strokeColor=#4D4D4D;fontFamily=Courier New;fontSize=20;" vertex="1" parent="1">
+ <mxGeometry x="223" y="387" width="427" height="230" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-4" value="" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#4D4D4D;fontFamily=Courier New;fontSize=8;dashed=1;" vertex="1" parent="1">
+ <mxGeometry x="182" y="102.5" width="509" height="183.5" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-48" value="" style="endArrow=classic;html=1;rounded=1;strokeColor=#000000;fontFamily=Courier New;fontSize=11;fontColor=#808080;entryX=0.544;entryY=1.002;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.1;exitY=0.583;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="IdHh1SD0108lOCAqlYyb-26" target="IdHh1SD0108lOCAqlYyb-25">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="450" y="178" as="sourcePoint" />
+ <mxPoint x="496.5" y="126" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-5" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="445" y="169.5" width="120" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-6" value="&amp;nbsp;[trigger auth]&amp;nbsp;&lt;i&gt;&amp;lt;spend-delay&amp;gt;&lt;/i&gt; 2 &quot;OP_CSV OP_DROP OP_CTV&quot; &lt;b&gt;OP_VAULT&amp;nbsp;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#336600;" vertex="1" parent="1">
+ <mxGeometry x="199" y="187.5" width="471" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-7" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="454" y="495" width="120" height="100" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-8" value="&amp;nbsp;&lt;i&gt; &lt;font color=&quot;#994c00&quot;&gt;&amp;lt;CTV-hash&amp;gt;&lt;/font&gt;&amp;nbsp;&amp;lt;spend-delay&amp;gt;&lt;/i&gt;&amp;nbsp;OP_CSV OP_DROP OP_CTV&amp;nbsp;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#B01E1E;" vertex="1" parent="1">
+ <mxGeometry x="240" y="515" width="386" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-9" value="[recovery auth]&lt;i&gt; &amp;lt;recovery-sPK-hash&amp;gt;&lt;/i&gt; &lt;b&gt;OP_VAULT_RECOVER&amp;nbsp;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#007FFF;" vertex="1" parent="1">
+ <mxGeometry x="240" y="552" width="386" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-10" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.394;entryY=0.97;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Courier New;fontSize=22;" edge="1" parent="1" source="IdHh1SD0108lOCAqlYyb-11" target="IdHh1SD0108lOCAqlYyb-12">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-11" value="&lt;i&gt;&amp;lt;internal-pubkey&amp;gt;&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=center;" vertex="1" parent="1">
+ <mxGeometry x="305" y="490" width="120" height="16.5" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-12" value="TR" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="405" y="451.5" width="100" height="28.5" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-13" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fontFamily=Courier New;fontSize=22;" edge="1" parent="1" source="IdHh1SD0108lOCAqlYyb-14" target="IdHh1SD0108lOCAqlYyb-12">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-14" value="Tapleaves" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" vertex="1" parent="1">
+ <mxGeometry x="456" y="488" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-15" value="&lt;i&gt;withdrawal&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" vertex="1" parent="1">
+ <mxGeometry x="239" y="506" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-16" value="&lt;i&gt;recover&lt;br&gt;&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" vertex="1" parent="1">
+ <mxGeometry x="235" y="543" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-17" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=1;fontFamily=Courier New;fontSize=9;endWidth=7.5;endSize=4.325;strokeColor=#336600;" edge="1" parent="1">
+ <mxGeometry width="50" height="50" relative="1" as="geometry">
+ <mxPoint x="438" y="301" as="sourcePoint" />
+ <mxPoint x="438" y="371" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-18" value="script-path spend of &lt;i style=&quot;font-size: 11px;&quot;&gt;&lt;font color=&quot;#336600&quot; style=&quot;font-size: 11px;&quot;&gt;trigger&lt;/font&gt;&lt;/i&gt;&amp;nbsp;leaf,&lt;br style=&quot;font-size: 11px;&quot;&gt;supplying &lt;font color=&quot;#cc6600&quot; style=&quot;font-size: 11px;&quot;&gt;CTV hash &lt;/font&gt;in witness,&lt;br style=&quot;font-size: 11px;&quot;&gt;satisfying trigger auth" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=11;" vertex="1" parent="1">
+ <mxGeometry x="248" y="310" width="167" height="43" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-20" value="OP_VAULT allows templated replacement of its leaf during spend (green to red) - otherwise taptree unchanged" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;fontStyle=0" vertex="1" parent="1">
+ <mxGeometry x="417" y="405" width="202" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-22" value="&amp;nbsp;[recovery auth] &lt;i&gt;&amp;lt;recovery-sPK-hash&amp;gt;&lt;/i&gt; &lt;b&gt;OP_VAULT_RECOVER&amp;nbsp;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=right;fontFamily=Courier New;verticalAlign=bottom;strokeColor=#007FFF;" vertex="1" parent="1">
+ <mxGeometry x="199" y="226.5" width="471" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-23" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.394;entryY=0.97;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Courier New;fontSize=22;" edge="1" parent="1" source="IdHh1SD0108lOCAqlYyb-24" target="IdHh1SD0108lOCAqlYyb-25">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-24" value="&lt;i&gt;&amp;lt;internal-pubkey&amp;gt;&lt;/i&gt;" style="rounded=1;whiteSpace=wrap;html=1;align=center;" vertex="1" parent="1">
+ <mxGeometry x="289" y="164.5" width="120" height="16.5" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-25" value="TR" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="389" y="126" width="100" height="28.5" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-26" value="Tapleaves" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" vertex="1" parent="1">
+ <mxGeometry x="444" y="162.5" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-27" value="&lt;i&gt;trigger&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" vertex="1" parent="1">
+ <mxGeometry x="188" y="180.5" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-28" value="&lt;i&gt;recover&lt;br&gt;&lt;/i&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=9;" vertex="1" parent="1">
+ <mxGeometry x="191" y="217.5" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-29" value="1" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;fontFamily=Courier New;" vertex="1" parent="1">
+ <mxGeometry x="444" y="139.5" width="12" height="10" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-30" value="2" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;fontFamily=Courier New;" vertex="1" parent="1">
+ <mxGeometry x="436" y="456" width="60" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-34" value="1. initial vault" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=2;fontColor=#808080;" vertex="1" parent="1">
+ <mxGeometry x="199.5" y="104.5" width="131" height="28" as="geometry" />
+ </mxCell>
+ <mxCell id="IdHh1SD0108lOCAqlYyb-36" value="2. trigger" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;fontStyle=2;fontColor=#808080;" vertex="1" parent="1">
+ <mxGeometry x="216" y="389.5" width="131" height="28" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+</mxfile>
diff --git a/bip-0345/withdrawal-comparison.drawio.png b/bip-0345/withdrawal-comparison.drawio.png
new file mode 100644
index 0000000..8a76d20
--- /dev/null
+++ b/bip-0345/withdrawal-comparison.drawio.png
Binary files differ
diff --git a/bip-0370.mediawiki b/bip-0370.mediawiki
index cb59801..98f1800 100644
--- a/bip-0370.mediawiki
+++ b/bip-0370.mediawiki
@@ -2,7 +2,7 @@
BIP: 370
Layer: Applications
Title: PSBT Version 2
- Author: Andrew Chow <achow101@gmail.com>
+ Author: Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0370
Status: Draft
@@ -248,7 +248,7 @@ Before any input or output may be added, the constructor must check the PSBT_GLO
Inputs may only be added if the Inputs Modifiable flag is True.
Outputs may only be added if the Outputs Modifiable flag is True.
-When an input or output is added, the corresponding PSBT_GLOBAL_INPUT_COUNT or PSBT_GLOBAL_OUTPUT_COUNT must be incremeted to reflect the number of inputs and outputs in the PSBT.
+When an input or output is added, the corresponding PSBT_GLOBAL_INPUT_COUNT or PSBT_GLOBAL_OUTPUT_COUNT must be incremented to reflect the number of inputs and outputs in the PSBT.
When an input is added, it must have PSBT_IN_PREVIOUS_TXID and PSBT_IN_OUTPUT_INDEX set.
When an output is added, it must have PSBT_OUT_VALUE and PSBT_OUT_OUTPUT_SCRIPT set.
If the input has a required timelock, Constructors must set the requisite timelock field.
diff --git a/bip-0371.mediawiki b/bip-0371.mediawiki
index 599aa54..45b69f8 100644
--- a/bip-0371.mediawiki
+++ b/bip-0371.mediawiki
@@ -2,7 +2,7 @@
BIP: 371
Layer: Applications
Title: Taproot Fields for PSBT
- Author: Andrew Chow <andrew@achow101.com>
+ Author: Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0371
Status: Draft
diff --git a/bip-0380.mediawiki b/bip-0380.mediawiki
index 48dd93f..27b7908 100644
--- a/bip-0380.mediawiki
+++ b/bip-0380.mediawiki
@@ -3,7 +3,7 @@
Layer: Applications
Title: Output Script Descriptors General Operation
Author: Pieter Wuille <pieter@wuille.net>
- Andrew Chow <andrew@achow101.com>
+ Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0380
Status: Draft
@@ -26,7 +26,7 @@ This BIP is licensed under the BSD 2-clause license.
Bitcoin wallets traditionally have stored a set of keys which are later serialized and mutated to produce the output scripts that the wallet watches and the addresses it provides to users.
Typically backups have consisted of solely the private keys, nowadays primarily in the form of BIP 39 mnemonics.
-However this backup solution is insuffient, especially since the introduction of Segregated Witness which added new output types.
+However this backup solution is insufficient, especially since the introduction of Segregated Witness which added new output types.
Given just the private keys, it is not possible for restored wallets to know which kinds of output scripts and addresses to produce.
This has lead to incompatibilities between wallets when restoring a backup or exporting data for a watch only wallet.
@@ -238,19 +238,19 @@ Valid expressions:
* Extended private key with hardened derivation and children: <tt>xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc/3h/4h/5h/*h</tt>
* Extended private key with key origin, hardened derivation and children: <tt>[deadbeef/0h/1h/2]xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc/3h/4h/5h/*h</tt>
-Invalid expressiosn:
+Invalid expression:
* Children indicator in key origin: <tt>[deadbeef/0h/0h/0h/*]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
* Trailing slash in key origin: <tt>[deadbeef/0h/0h/0h/]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
* Too short fingerprint: <tt>[deadbef/0h/0h/0h]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
* Too long fingerprint: <tt>[deadbeeef/0h/0h/0h]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
-* Invalid hardened indicators: <tt>[deadbeeef/0f/0f/0f]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
-* Invalid hardened indicators: <tt>[deadbeeef/0H/0H/0H]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
-* Invalid hardened indicators: <tt>[deadbeeef/-0/-0/-0]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
+* Invalid hardened indicators: <tt>[deadbeef/0f/0f/0f]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
+* Invalid hardened indicators: <tt>[deadbeef/0H/0H/0H]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
+* Invalid hardened indicators: <tt>[deadbeef/-0/-0/-0]0260b2003c386519fc9eadf2b5cf124dd8eea4c4e68d5e154050a9346ea98ce600</tt>
* Private key with derivation: <tt>L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1/0</tt>
* Private key with derivation children: <tt>L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1/*</tt>
-* Derivation index out of range: <tt>xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483648)", "pkh(xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/2147483648</tt>
-* Invalid derivation index: <tt>xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/1aa)", "pkh(xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/1aa</tt>
+* Derivation index out of range: <tt>xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483648</tt>
+* Invalid derivation index: <tt>xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/1aa</tt>
* Multiple key origins: <tt>[aaaaaaaa][aaaaaaaa]xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0</tt>
* Missing key origin start: <tt>aaaaaaaa]xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0</tt>
* Non hex fingerprint: <tt>[gaaaaaaa]xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0</tt>
diff --git a/bip-0381.mediawiki b/bip-0381.mediawiki
index 769b42d..bfda2c8 100644
--- a/bip-0381.mediawiki
+++ b/bip-0381.mediawiki
@@ -3,7 +3,7 @@
Layer: Applications
Title: Non-Segwit Output Script Descriptors
Author: Pieter Wuille <pieter@wuille.net>
- Andrew Chow <andrew@achow101.com>
+ Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0381
Status: Draft
@@ -100,8 +100,6 @@ Valid descriptors followed by the scripts they produce. Descriptors involving de
** <tt>a9141a31ad23bf49c247dd531a623c2ef57da3c400c587</tt>
* <tt>pkh(xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U/2147483647'/0)</tt>
** <tt>76a914ebdc90806a9c4356c1c88e42216611e1cb4c1c1788ac</tt>
-* <tt>pkh(xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB/2147483647'/0)</tt>
-** <tt>76a914ebdc90806a9c4356c1c88e42216611e1cb4c1c1788ac</tt>
* <tt>pkh([bd16bee5/2147483647h]xpub69H7F5dQzmVd3vPuLKtcXJziMEQByuDidnX3YdwgtNsecY5HRGtAAQC5mXTt4dsv9RzyjgDjAQs9VGVV6ydYCHnprc9vvaA5YtqWyL6hyds/0)</tt>
** <tt>76a914ebdc90806a9c4356c1c88e42216611e1cb4c1c1788ac</tt>
* <tt>pk(xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L/0)</tt>
diff --git a/bip-0382.mediawiki b/bip-0382.mediawiki
index 1b7c156..bb1951d 100644
--- a/bip-0382.mediawiki
+++ b/bip-0382.mediawiki
@@ -3,7 +3,7 @@
Layer: Applications
Title: Segwit Output Script Descriptors
Author: Pieter Wuille <pieter@wuille.net>
- Andrew Chow <andrew@achow101.com>
+ Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0382
Status: Draft
@@ -73,7 +73,7 @@ Valid descriptors followed by the scripts they produce. Descriptors involving de
** <tt>a9149a4d9901d6af519b2a23d4a2f51650fcba87ce7b87</tt>
** <tt>a914bed59fc0024fae941d6e20a3b44a109ae740129287</tt>
** <tt>a9148483aa1116eb9c05c482a72bada4b1db24af654387</tt>
-* <tt>sh(wpkh(xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8/10/20/30/40/*h))</tt>
+* <tt>sh(wpkh(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi/10/20/30/40/*h))</tt>
** <tt>a9149a4d9901d6af519b2a23d4a2f51650fcba87ce7b87</tt>
** <tt>a914bed59fc0024fae941d6e20a3b44a109ae740129287</tt>
** <tt>a9148483aa1116eb9c05c482a72bada4b1db24af654387</tt>
diff --git a/bip-0383.mediawiki b/bip-0383.mediawiki
index 27fb74b..66e2f16 100644
--- a/bip-0383.mediawiki
+++ b/bip-0383.mediawiki
@@ -3,7 +3,7 @@
Layer: Applications
Title: Multisig Output Script Descriptors
Author: Pieter Wuille <pieter@wuille.net>
- Andrew Chow <andrew@achow101.com>
+ Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0383
Status: Draft
diff --git a/bip-0384.mediawiki b/bip-0384.mediawiki
index 98dca77..ba12b55 100644
--- a/bip-0384.mediawiki
+++ b/bip-0384.mediawiki
@@ -3,7 +3,7 @@
Layer: Applications
Title: combo() Output Script Descriptors
Author: Pieter Wuille <pieter@wuille.net>
- Andrew Chow <andrew@achow101.com>
+ Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0384
Status: Draft
@@ -55,7 +55,7 @@ Valid descriptors followed by the scripts they produce. Descriptors involving de
*** <tt>2102df12b7035bdac8e3bab862a3a83d06ea6b17b6753d52edecba9be46f5d09e076ac</tt>
*** <tt>76a914f90e3178ca25f2c808dc76624032d352fdbdfaf288ac</tt>
*** <tt>0014f90e3178ca25f2c808dc76624032d352fdbdfaf2</tt>
-*** <tt>a91473e39884cb71ae4e5ac9739e9225026c99763e6687</tt>
+*** <tt>a91408f3ea8c68d4a7585bf9e8bda226723f70e445f087</tt>
** Child 1
*** <tt>21032869a233c9adff9a994e4966e5b821fd5bac066da6c3112488dc52383b4a98ecac</tt>
*** <tt>76a914a8409d1b6dfb1ed2a3e8aa5e0ef2ff26b15b75b788ac</tt>
diff --git a/bip-0385.mediawiki b/bip-0385.mediawiki
index f97a331..3e922b3 100644
--- a/bip-0385.mediawiki
+++ b/bip-0385.mediawiki
@@ -3,7 +3,7 @@
Layer: Applications
Title: raw() and addr() Output Script Descriptors
Author: Pieter Wuille <pieter@wuille.net>
- Andrew Chow <andrew@achow101.com>
+ Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0385
Status: Draft
diff --git a/bip-0386.mediawiki b/bip-0386.mediawiki
index 782a6f8..759887d 100644
--- a/bip-0386.mediawiki
+++ b/bip-0386.mediawiki
@@ -3,7 +3,7 @@
Layer: Applications
Title: tr() Output Script Descriptors
Author: Pieter Wuille <pieter@wuille.net>
- Andrew Chow <andrew@achow101.com>
+ Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0386
Status: Draft
diff --git a/bip-0389.mediawiki b/bip-0389.mediawiki
index fe14b62..500d7e3 100644
--- a/bip-0389.mediawiki
+++ b/bip-0389.mediawiki
@@ -2,7 +2,7 @@
BIP: 389
Layer: Applications
Title: Multipath Descriptor Key Expressions
- Author: Andrew Chow <andrew@achow101.com>
+ Author: Ava Chow <me@achow101.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0389
Status: Draft
diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl
index 292f1ee..4923a9e 100755
--- a/scripts/buildtable.pl
+++ b/scripts/buildtable.pl
@@ -96,6 +96,9 @@ my %emails;
my $bipnum = 0;
while (++$bipnum <= $topbip) {
my $fn = sprintf "bip-%04d.mediawiki", $bipnum;
+ if (!-e $fn) {
+ $fn = sprintf "bip-%04d.md", $bipnum;
+ }
-e $fn || next;
open my $F, "<$fn";
while (<$F> !~ m[^(?:\xef\xbb\xbf)?<pre>$]) {
diff --git a/scripts/diffcheck.sh b/scripts/diffcheck.sh
index 4e4c459..aa9f557 100755
--- a/scripts/diffcheck.sh
+++ b/scripts/diffcheck.sh
@@ -1,5 +1,6 @@
#!/bin/bash
+scripts/buildtable.pl >/tmp/table.mediawiki 2> /dev/null
diff README.mediawiki /tmp/table.mediawiki | grep '^[<>] |' >/tmp/after.diff || true
if git checkout HEAD^ && scripts/buildtable.pl >/tmp/table.mediawiki 2>/dev/null; then
diff README.mediawiki /tmp/table.mediawiki | grep '^[<>] |' >/tmp/before.diff || true
@@ -8,6 +9,8 @@ if git checkout HEAD^ && scripts/buildtable.pl >/tmp/table.mediawiki 2>/dev/null
echo "$newdiff"
exit 1
fi
+ echo "README table matches expected table from BIP files"
else
echo 'Cannot build previous commit table for comparison'
+ exit 1
fi
diff --git a/scripts/link-format-chk.sh b/scripts/link-format-chk.sh
index e3f0f6d..9493765 100755
--- a/scripts/link-format-chk.sh
+++ b/scripts/link-format-chk.sh
@@ -8,16 +8,14 @@
ECODE=0
FILES=""
-for fname in $(git diff --name-only HEAD $(git merge-base HEAD master)); do
- if [[ $fname == *.mediawiki ]]; then
- GRES=$(grep -n '](http' $fname)
- if [ "$GRES" != "" ]; then
- if [ $ECODE -eq 0 ]; then
- >&2 echo "Github Mediawiki format writes link as [URL text], not as [text](url):"
- fi
- ECODE=1
- echo "- $fname:$GRES"
+for fname in *.mediawiki; do
+ GRES=$(grep -n '](http' $fname)
+ if [ "$GRES" != "" ]; then
+ if [ $ECODE -eq 0 ]; then
+ >&2 echo "Github Mediawiki format writes link as [URL text], not as [text](url):"
fi
+ ECODE=1
+ echo "- $fname:$GRES"
fi
done
exit $ECODE