* 将 ![Data-inlined] 按照每行54个字符输出。
-
diff --git a/assets/README.HOW_DOES_IT_WORK.md.bak b/assets/README.HOW_DOES_IT_WORK.md.bak
new file mode 100644
index 0000000..336df37
--- /dev/null
+++ b/assets/README.HOW_DOES_IT_WORK.md.bak
@@ -0,0 +1,321 @@
+[GF2-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20%5Ctextrm%7BGF%7D%282%29
+[GF2p15-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20%5Ctextrm%7BGF%7D%282%5E%7B15%7D%29
+[GF2p15p17-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20%5Ctextrm%7BGF%7D%28%282%5E%7B15%7D%29%5E%7B17%7D%29
+[A-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20A
+[B-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20B
+[D-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20D
+[G-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20G
+[M-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20M
+[P-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20P
+[h-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20h
+[k-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20k
+[l-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20l
+[n-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20n
+[r-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20r
+[s-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20s
+[T-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20T
+[UU-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20U
+[LL-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20L
+[Rnd-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20Rnd
+[Temp-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20Temp
+[UID-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20UID
+[Data-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20Data
+[Data0-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20Data%5E0
+[Data1-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20Data%5E1
+[Data2-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20Data%5E2
+[Data3-inlined]: http://latex.codecogs.com/svg.latex?%5Cinline%20Data%5E3
+
+# How is "rarreg.key" generated?
+
+WinRAR uses an ECC-based signature algorithm to generate `rarreg.key`. The algorithm it used is a variant of Chinese SM2 digital signature algorithm. Different to many standard ECDSAs, the curve that WinRAR selected is a curve over composite field ![GF2p15p17-inlined].
+
+## 1. Composite field ![GF2p15p17-inlined]
+
+Elements in ground field ![GF2p15-inlined] are represented with standard basis, i.e. polynomial basis. The irreducible polynomial is
+
+
+
+
+where each coefficients is in ![GF2-inlined]. If we use
+
+
+
+
+as the standard basis of the ground field, an element ![A-inlined] in ![GF2p15-inlined] can be denoted as
+
+
+
+
+---
+
+The irreducible polynomial of composite field ![GF2p15p17-inlined] is
+
+
+
+
+where each coefficients is in ![GF2p15-inlined]. If we use
+
+
+
+
+as the standard basis of the composite field, an element ![B-inlined] in ![GF2p15p17-inlined] can be denoted as
+
+
+
+
+---
+
+For clarity, we use ![D-inlined], which is a 255-bits-long integer to denote an element ![B-inlined] in ![GF2p15p17-inlined]. The map between them is
+
+
+
+
+## 2. Elliptic curve over ![GF2p15p17-inlined]
+
+The equation of the elliptic curve that WinRAR uses is
+
+
+
+
+The base point ![G-inlined] is
+
+
+
+
+whose order ![n-inlined] is
+
+
+
+
+## 3. Message hash algorithm
+
+We use
+
+
+
+
+to denote a message whose length is ![l-inlined]. So the SHA1 value of ![M-inlined] should be
+
+
+
+
+where  are 5 state values when SHA1 outputs. Generally speaking, the final SHA1 value should be the join of these 5 state values while each of state values is serialized in big-endian.
+
+However, WinRAR doesn't serialize the 5 state values. Instead, it use a big integer ![h-inlined] as the hash of the input message.
+
+
+
+
+## 4. ECC digital signature algorithm
+
+We use ![k-inlined] to denote private key, ![P-inlined] to denote public key. So there must be
+
+
+
+
+If we use ![h-inlined] to denote the hash of input data, WinRAR use the following algorithm to perform signing:
+
+1. Generate a random big integer ![Rnd-inlined] which satisfies .
+
+2. Calculate ![r-inlined]
+
+
+
+
+
+ where  means we take X coordinate of  and convert it from ![GF2p15p17-inlined] to a big integer.
+
+ If  or , go back to step 1.
+
+3. Calculate ![s-inlined]
+
+
+
+
+
+ If , go back to step 1.
+
+4. Output .
+
+## 5. WinRAR private key generation algorithm
+
+We use
+
+
+
+
+
+to denote input data whose length is ![l-inlined]. WinRAR use it to generate private key ![k-inlined].
+
+1. We use  to denote 6 32-bits-long integer. So there is
+
+
+
+
+
+2. Let .
+
+3. If , we calculate SHA1 value of ![T-inlined]. Then assign SHA1 state value  to :
+
+
+
+
+
+ Otherwise, when , we let
+
+
+
+
+
+4. Regard  as counter, add itself by 1.
+
+ Calculate SHA1:
+
+
+
+
+
+ We takes the lowest 16 bits of  and donote it as .
+
+5. Repeat step 4 again with 14 times.
+
+6. After that, we will get . Then output private key
+
+
+
+
+
+## 6. The private key and public key of WinRAR
+
+Private key ![k-inlined] is
+
+
+
+
+
+This private key is generated by the algorithm describled in section 5 where the length of data ![T-inlined] is zero.
+
+Public key ![P-inlined] is
+
+
+
+
+
+## 7. Generation of "rarreg.key"
+
+The generation of license file `rarreg.key` requires 2 arguments:
+
+1. Username, an ANSI-encoded string, without null-terminator. Denoted as
+
+
+
+
+
+2. License type, an ANSI-encoded string, without null-terminator. Denoted as
+
+
+
+
+
+The following is the algorithm to generate `rarreg.key`.
+
+1. Use the algorithm describled in section 5, with argument ![UU-inlined], to generate private key  and public key . Then output hexlified public key string with SM2 compressed public key format. The hexlified public key is denoted as ![Temp-inlined].
+
+ The length of ![Temp-inlined] should be 64. If less, pad with `'0'` until the length is 64.
+
+2. Let ![Data3-inlined] be
+
+
+
+
+
+3. Use the algorithm describled in section 5, with argument ![Data3-inlined], to generate private key  and public key . Then output hexlified public key string with SM2 compressed public key format. The hexlified public key is denoted as ![Data0-inlined].
+
+ The length of ![Data0-inlined] should be 64. If less, pad with `'0'` until the length is 64.
+
+4. Let ![UID-inlined] be
+
+
+
+
+
+5. Use the algorithm describled in section 4, with argument ![LL-inlined] and private key ![k-inlined] describled section 6, to get signature .
+
+ The bit length of  and  shall not be more than 240. Otherwise, repeat this step.
+
+6. Convert  and  to hex-integer string  and , without `"0x"` prefix.
+
+ If the length of  or  is less than 60, pad character `'0'` until the length is 60.
+
+7. Let ![Data1-inlined] be
+
+
+
+
+
+8. Let ![Temp-inlined] be
+
+
+
+
+
+ Use the algorithm describled in section 4, with argument ![Temp-inlined] and private key ![k-inlined] describled section 6, to get signature .
+
+ The bit length of  and  shall not be more than 240. Otherwise, repeat this step.
+
+9. Convert  and  to hex-integer string  and , without `"0x"` prefix.
+
+ If the length of  or  is less than 60, pad character `'0'` until the length is 60.
+
+10. Let ![Data2-inlined] be
+
+
+
+
+
+11. Calculate CRC32 value of
+
+
+
+
+
+ The final checksum the complement of CRC32 value.
+
+ Then convert the checksum to decimal string . If the length is less than 10, pad character `'0'` until the length is 10.
+
+12. Let ![Data-inlined] be
+
+
+
+
+
+13. Output with format
+
+ * A fixed header `"RAR registration data"`, taking one line.
+
+ * Username, taking one line.
+
+ * License type, taking one line
+
+ * UID, taking one line, with format:
+
+
+
+ * 将 ![Data-inlined] 按照每行54个字符输出。
diff --git a/assets/formula/1-dark.svg b/assets/formula/1-dark.svg
new file mode 100644
index 0000000..438b9e2
--- /dev/null
+++ b/assets/formula/1-dark.svg
@@ -0,0 +1,29 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/1-light.svg b/assets/formula/1-light.svg
new file mode 100644
index 0000000..438b9e2
--- /dev/null
+++ b/assets/formula/1-light.svg
@@ -0,0 +1,29 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/GF2-inlined-dark.svg b/assets/formula/GF2-inlined-dark.svg
new file mode 100644
index 0000000..5d75e67
--- /dev/null
+++ b/assets/formula/GF2-inlined-dark.svg
@@ -0,0 +1,18 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/GF2-inlined-light.svg b/assets/formula/GF2-inlined-light.svg
new file mode 100644
index 0000000..6814f5c
--- /dev/null
+++ b/assets/formula/GF2-inlined-light.svg
@@ -0,0 +1,18 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/GF2p15-inlined-dark.svg b/assets/formula/GF2p15-inlined-dark.svg
new file mode 100644
index 0000000..f9be827
--- /dev/null
+++ b/assets/formula/GF2p15-inlined-dark.svg
@@ -0,0 +1,22 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/GF2p15-inlined-light.svg b/assets/formula/GF2p15-inlined-light.svg
new file mode 100644
index 0000000..70a4d55
--- /dev/null
+++ b/assets/formula/GF2p15-inlined-light.svg
@@ -0,0 +1,22 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/GF2p15p17-inlined-dark.svg b/assets/formula/GF2p15p17-inlined-dark.svg
new file mode 100644
index 0000000..b5ca082
--- /dev/null
+++ b/assets/formula/GF2p15p17-inlined-dark.svg
@@ -0,0 +1,27 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/GF2p15p17-inlined-light.svg b/assets/formula/GF2p15p17-inlined-light.svg
new file mode 100644
index 0000000..9ddc0c3
--- /dev/null
+++ b/assets/formula/GF2p15p17-inlined-light.svg
@@ -0,0 +1,27 @@
+
+
+
\ No newline at end of file
diff --git a/assets/formula/Image display.txt b/assets/formula/Image display.txt
new file mode 100644
index 0000000..b23e2cb
--- /dev/null
+++ b/assets/formula/Image display.txt
@@ -0,0 +1 @@
+https://stackoverflow.com/questions/65413712/changing-readme-md-image-display-conditional-to-github-light-mode-dark-mode
\ No newline at end of file