diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index d28b70c3..ab24b817 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -3,6 +3,6 @@
# precedence.
# Default owners for everything:
-* @Asamartino
+* @wirednkod
# See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
\ No newline at end of file
diff --git a/assets/Gov_PBA6_Lucerne_2025.pdf b/assets/Gov_PBA6_Lucerne_2025.pdf
new file mode 100644
index 00000000..d03c0dee
Binary files /dev/null and b/assets/Gov_PBA6_Lucerne_2025.pdf differ
diff --git a/assets/Slides_Singapore.odp b/assets/Slides_Singapore.odp
new file mode 100644
index 00000000..e605d450
Binary files /dev/null and b/assets/Slides_Singapore.odp differ
diff --git a/assets/Slides_Singapore.pdf b/assets/Slides_Singapore.pdf
new file mode 100644
index 00000000..2c97ce35
Binary files /dev/null and b/assets/Slides_Singapore.pdf differ
diff --git a/assets/Slides_Singapore.pptx b/assets/Slides_Singapore.pptx
new file mode 100644
index 00000000..308fdf7b
Binary files /dev/null and b/assets/Slides_Singapore.pptx differ
diff --git a/assets/advanced_blockchain-dkg.pdf b/assets/advanced_blockchain-dkg.pdf
new file mode 100644
index 00000000..428efd5b
Binary files /dev/null and b/assets/advanced_blockchain-dkg.pdf differ
diff --git a/assets/favicon.png b/assets/favicon.png
new file mode 100644
index 00000000..fe659d7f
Binary files /dev/null and b/assets/favicon.png differ
diff --git a/assets/favicon.svg b/assets/favicon.svg
new file mode 100644
index 00000000..c2292edf
--- /dev/null
+++ b/assets/favicon.svg
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/AI & Computing.svg b/assets/icons/polkadot/2color/AI & Computing.svg
new file mode 100644
index 00000000..4d7fb0fc
--- /dev/null
+++ b/assets/icons/polkadot/2color/AI & Computing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Account Portability.svg b/assets/icons/polkadot/2color/Account Portability.svg
new file mode 100644
index 00000000..825555af
--- /dev/null
+++ b/assets/icons/polkadot/2color/Account Portability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Action Left.svg b/assets/icons/polkadot/2color/Action Left.svg
new file mode 100644
index 00000000..e4c35357
--- /dev/null
+++ b/assets/icons/polkadot/2color/Action Left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Action Right.svg b/assets/icons/polkadot/2color/Action Right.svg
new file mode 100644
index 00000000..b1c44df6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Action Right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Add key pair.svg b/assets/icons/polkadot/2color/Add key pair.svg
new file mode 100644
index 00000000..a5af3978
--- /dev/null
+++ b/assets/icons/polkadot/2color/Add key pair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Add user.svg b/assets/icons/polkadot/2color/Add user.svg
new file mode 100644
index 00000000..129511f3
--- /dev/null
+++ b/assets/icons/polkadot/2color/Add user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Add.svg b/assets/icons/polkadot/2color/Add.svg
new file mode 100644
index 00000000..2a8fb943
--- /dev/null
+++ b/assets/icons/polkadot/2color/Add.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Address book.svg b/assets/icons/polkadot/2color/Address book.svg
new file mode 100644
index 00000000..e239faa0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Address book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Airplane Mode.svg b/assets/icons/polkadot/2color/Airplane Mode.svg
new file mode 100644
index 00000000..acdee6d1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Airplane Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Alert.svg b/assets/icons/polkadot/2color/Alert.svg
new file mode 100644
index 00000000..8c5746c2
--- /dev/null
+++ b/assets/icons/polkadot/2color/Alert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Algorithm.svg b/assets/icons/polkadot/2color/Algorithm.svg
new file mode 100644
index 00000000..c239d657
--- /dev/null
+++ b/assets/icons/polkadot/2color/Algorithm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Alice.svg b/assets/icons/polkadot/2color/Alice.svg
new file mode 100644
index 00000000..48517b9f
--- /dev/null
+++ b/assets/icons/polkadot/2color/Alice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Ambassadors.svg b/assets/icons/polkadot/2color/Ambassadors.svg
new file mode 100644
index 00000000..3b2c92a1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Ambassadors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Announcement.svg b/assets/icons/polkadot/2color/Announcement.svg
new file mode 100644
index 00000000..1aae71f8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Announcement.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Anonymous Proxy.svg b/assets/icons/polkadot/2color/Anonymous Proxy.svg
new file mode 100644
index 00000000..b7ee05c5
--- /dev/null
+++ b/assets/icons/polkadot/2color/Anonymous Proxy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Arbitrary Message.svg b/assets/icons/polkadot/2color/Arbitrary Message.svg
new file mode 100644
index 00000000..cf272e89
--- /dev/null
+++ b/assets/icons/polkadot/2color/Arbitrary Message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Archive Node.svg b/assets/icons/polkadot/2color/Archive Node.svg
new file mode 100644
index 00000000..3ec27008
--- /dev/null
+++ b/assets/icons/polkadot/2color/Archive Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Arrow Back.svg b/assets/icons/polkadot/2color/Arrow Back.svg
new file mode 100644
index 00000000..3f71da8c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Arrow Back.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Arrow Down.svg b/assets/icons/polkadot/2color/Arrow Down.svg
new file mode 100644
index 00000000..ed10adad
--- /dev/null
+++ b/assets/icons/polkadot/2color/Arrow Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Arrow Left.svg b/assets/icons/polkadot/2color/Arrow Left.svg
new file mode 100644
index 00000000..0f51626b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Arrow Left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Arrow Right.svg b/assets/icons/polkadot/2color/Arrow Right.svg
new file mode 100644
index 00000000..54bec482
--- /dev/null
+++ b/assets/icons/polkadot/2color/Arrow Right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Arrow Up.svg b/assets/icons/polkadot/2color/Arrow Up.svg
new file mode 100644
index 00000000..99d1d976
--- /dev/null
+++ b/assets/icons/polkadot/2color/Arrow Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Article.svg b/assets/icons/polkadot/2color/Article.svg
new file mode 100644
index 00000000..4502fb6c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Article.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Attack.svg b/assets/icons/polkadot/2color/Attack.svg
new file mode 100644
index 00000000..8fadd48a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Attack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Auctions.svg b/assets/icons/polkadot/2color/Auctions.svg
new file mode 100644
index 00000000..276b1e07
--- /dev/null
+++ b/assets/icons/polkadot/2color/Auctions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Authority.svg b/assets/icons/polkadot/2color/Authority.svg
new file mode 100644
index 00000000..1cd1f644
--- /dev/null
+++ b/assets/icons/polkadot/2color/Authority.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Back Up.svg b/assets/icons/polkadot/2color/Back Up.svg
new file mode 100644
index 00000000..10ddea8c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Back Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Balance.svg b/assets/icons/polkadot/2color/Balance.svg
new file mode 100644
index 00000000..bf9cdc3f
--- /dev/null
+++ b/assets/icons/polkadot/2color/Balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Batch Transaction.svg b/assets/icons/polkadot/2color/Batch Transaction.svg
new file mode 100644
index 00000000..6e63f7fd
--- /dev/null
+++ b/assets/icons/polkadot/2color/Batch Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Bid.svg b/assets/icons/polkadot/2color/Bid.svg
new file mode 100644
index 00000000..6bc18e8e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Bid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Block Explorer.svg b/assets/icons/polkadot/2color/Block Explorer.svg
new file mode 100644
index 00000000..945bdfdd
--- /dev/null
+++ b/assets/icons/polkadot/2color/Block Explorer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Block Number.svg b/assets/icons/polkadot/2color/Block Number.svg
new file mode 100644
index 00000000..3b9e269e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Block Number.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Block Search.svg b/assets/icons/polkadot/2color/Block Search.svg
new file mode 100644
index 00000000..ddb2f4f1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Block Search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Block.svg b/assets/icons/polkadot/2color/Block.svg
new file mode 100644
index 00000000..f6bf68a7
--- /dev/null
+++ b/assets/icons/polkadot/2color/Block.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Blockchain.svg b/assets/icons/polkadot/2color/Blockchain.svg
new file mode 100644
index 00000000..e438e25b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Blockchain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Blog Post.svg b/assets/icons/polkadot/2color/Blog Post.svg
new file mode 100644
index 00000000..f7d347a6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Blog Post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Bob.svg b/assets/icons/polkadot/2color/Bob.svg
new file mode 100644
index 00000000..5c31936f
--- /dev/null
+++ b/assets/icons/polkadot/2color/Bob.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Bond.svg b/assets/icons/polkadot/2color/Bond.svg
new file mode 100644
index 00000000..1541ff2a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Bond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Bonded Time.svg b/assets/icons/polkadot/2color/Bonded Time.svg
new file mode 100644
index 00000000..153074c9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Bonded Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Boot Node.svg b/assets/icons/polkadot/2color/Boot Node.svg
new file mode 100644
index 00000000..0ec4980b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Boot Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Bridge.svg b/assets/icons/polkadot/2color/Bridge.svg
new file mode 100644
index 00000000..ea2f4c52
--- /dev/null
+++ b/assets/icons/polkadot/2color/Bridge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Bridges.svg b/assets/icons/polkadot/2color/Bridges.svg
new file mode 100644
index 00000000..1697c805
--- /dev/null
+++ b/assets/icons/polkadot/2color/Bridges.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Build.svg b/assets/icons/polkadot/2color/Build.svg
new file mode 100644
index 00000000..7ea84bdb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Build.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Builders _ Developers.svg b/assets/icons/polkadot/2color/Builders _ Developers.svg
new file mode 100644
index 00000000..4883df53
--- /dev/null
+++ b/assets/icons/polkadot/2color/Builders _ Developers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Built-in Security.svg b/assets/icons/polkadot/2color/Built-in Security.svg
new file mode 100644
index 00000000..70144ddc
--- /dev/null
+++ b/assets/icons/polkadot/2color/Built-in Security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Burn.svg b/assets/icons/polkadot/2color/Burn.svg
new file mode 100644
index 00000000..e416df07
--- /dev/null
+++ b/assets/icons/polkadot/2color/Burn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/C++.svg b/assets/icons/polkadot/2color/C++.svg
new file mode 100644
index 00000000..80168955
--- /dev/null
+++ b/assets/icons/polkadot/2color/C++.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Calendar.svg b/assets/icons/polkadot/2color/Calendar.svg
new file mode 100644
index 00000000..36cd599e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Calendar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Career.svg b/assets/icons/polkadot/2color/Career.svg
new file mode 100644
index 00000000..93bd6dba
--- /dev/null
+++ b/assets/icons/polkadot/2color/Career.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Certificate.svg b/assets/icons/polkadot/2color/Certificate.svg
new file mode 100644
index 00000000..887ae781
--- /dev/null
+++ b/assets/icons/polkadot/2color/Certificate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cex.svg b/assets/icons/polkadot/2color/Cex.svg
new file mode 100644
index 00000000..68bf59d0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cex.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Chain Spec.svg b/assets/icons/polkadot/2color/Chain Spec.svg
new file mode 100644
index 00000000..27c00193
--- /dev/null
+++ b/assets/icons/polkadot/2color/Chain Spec.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Check.svg b/assets/icons/polkadot/2color/Check.svg
new file mode 100644
index 00000000..941f1e29
--- /dev/null
+++ b/assets/icons/polkadot/2color/Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Checked.svg b/assets/icons/polkadot/2color/Checked.svg
new file mode 100644
index 00000000..0f0990b5
--- /dev/null
+++ b/assets/icons/polkadot/2color/Checked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Chevron Down.svg b/assets/icons/polkadot/2color/Chevron Down.svg
new file mode 100644
index 00000000..a3d2614a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Chevron Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Chevron Up.svg b/assets/icons/polkadot/2color/Chevron Up.svg
new file mode 100644
index 00000000..9b937886
--- /dev/null
+++ b/assets/icons/polkadot/2color/Chevron Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Claim.svg b/assets/icons/polkadot/2color/Claim.svg
new file mode 100644
index 00000000..8bd48df8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Claim.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Close.svg b/assets/icons/polkadot/2color/Close.svg
new file mode 100644
index 00000000..6e2bbd2b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cloud.svg b/assets/icons/polkadot/2color/Cloud.svg
new file mode 100644
index 00000000..20be5eb2
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Code.svg b/assets/icons/polkadot/2color/Code.svg
new file mode 100644
index 00000000..1f7de3be
--- /dev/null
+++ b/assets/icons/polkadot/2color/Code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Collapse.svg b/assets/icons/polkadot/2color/Collapse.svg
new file mode 100644
index 00000000..111cfe9d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Collapse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Collators.svg b/assets/icons/polkadot/2color/Collators.svg
new file mode 100644
index 00000000..28968584
--- /dev/null
+++ b/assets/icons/polkadot/2color/Collators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Collective.svg b/assets/icons/polkadot/2color/Collective.svg
new file mode 100644
index 00000000..0813667b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Collective.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Communications And Media.svg b/assets/icons/polkadot/2color/Communications And Media.svg
new file mode 100644
index 00000000..bcd6c445
--- /dev/null
+++ b/assets/icons/polkadot/2color/Communications And Media.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Community Events And Outreach.svg b/assets/icons/polkadot/2color/Community Events And Outreach.svg
new file mode 100644
index 00000000..6b259e01
--- /dev/null
+++ b/assets/icons/polkadot/2color/Community Events And Outreach.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Community.svg b/assets/icons/polkadot/2color/Community.svg
new file mode 100644
index 00000000..6b0b2abc
--- /dev/null
+++ b/assets/icons/polkadot/2color/Community.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Companion Account (in Bridge context).svg b/assets/icons/polkadot/2color/Companion Account (in Bridge context).svg
new file mode 100644
index 00000000..c7313c60
--- /dev/null
+++ b/assets/icons/polkadot/2color/Companion Account (in Bridge context).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Connect Wallet_Address.svg b/assets/icons/polkadot/2color/Connect Wallet_Address.svg
new file mode 100644
index 00000000..3352f8fe
--- /dev/null
+++ b/assets/icons/polkadot/2color/Connect Wallet_Address.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Connected.svg b/assets/icons/polkadot/2color/Connected.svg
new file mode 100644
index 00000000..c60ba3e0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Connected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Connection Via Light Node.svg b/assets/icons/polkadot/2color/Connection Via Light Node.svg
new file mode 100644
index 00000000..1305ed6d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Connection Via Light Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Connection Via Remote Node.svg b/assets/icons/polkadot/2color/Connection Via Remote Node.svg
new file mode 100644
index 00000000..d0b4a563
--- /dev/null
+++ b/assets/icons/polkadot/2color/Connection Via Remote Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Consensus.svg b/assets/icons/polkadot/2color/Consensus.svg
new file mode 100644
index 00000000..d79dd863
--- /dev/null
+++ b/assets/icons/polkadot/2color/Consensus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Contract.svg b/assets/icons/polkadot/2color/Contract.svg
new file mode 100644
index 00000000..77b97bda
--- /dev/null
+++ b/assets/icons/polkadot/2color/Contract.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cooling Period.svg b/assets/icons/polkadot/2color/Cooling Period.svg
new file mode 100644
index 00000000..20c9533d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cooling Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Copy _ Paste.svg b/assets/icons/polkadot/2color/Copy _ Paste.svg
new file mode 100644
index 00000000..85f89d9b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Copy _ Paste.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Costly To Maintain.svg b/assets/icons/polkadot/2color/Costly To Maintain.svg
new file mode 100644
index 00000000..7e919f5e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Costly To Maintain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Council.svg b/assets/icons/polkadot/2color/Council.svg
new file mode 100644
index 00000000..f1017f94
--- /dev/null
+++ b/assets/icons/polkadot/2color/Council.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Countdown.svg b/assets/icons/polkadot/2color/Countdown.svg
new file mode 100644
index 00000000..c27809a8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Countdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Create New From Source.svg b/assets/icons/polkadot/2color/Create New From Source.svg
new file mode 100644
index 00000000..afd066f1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Create New From Source.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cross-Chain Application.svg b/assets/icons/polkadot/2color/Cross-Chain Application.svg
new file mode 100644
index 00000000..88a9ca98
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cross-Chain Application.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cross-Chain Certification.svg b/assets/icons/polkadot/2color/Cross-Chain Certification.svg
new file mode 100644
index 00000000..af99ec4d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cross-Chain Certification.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cross-Chain Transfers.svg b/assets/icons/polkadot/2color/Cross-Chain Transfers.svg
new file mode 100644
index 00000000..188c1554
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cross-Chain Transfers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cross-Chain.svg b/assets/icons/polkadot/2color/Cross-Chain.svg
new file mode 100644
index 00000000..618bea72
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cross-Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Crowdloans.svg b/assets/icons/polkadot/2color/Crowdloans.svg
new file mode 100644
index 00000000..39ca7d44
--- /dev/null
+++ b/assets/icons/polkadot/2color/Crowdloans.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Cryptocurrency.svg b/assets/icons/polkadot/2color/Cryptocurrency.svg
new file mode 100644
index 00000000..76d93b2d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Cryptocurrency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Customisation.svg b/assets/icons/polkadot/2color/Customisation.svg
new file mode 100644
index 00000000..a69d9fff
--- /dev/null
+++ b/assets/icons/polkadot/2color/Customisation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/DAOs.svg b/assets/icons/polkadot/2color/DAOs.svg
new file mode 100644
index 00000000..2870c85d
--- /dev/null
+++ b/assets/icons/polkadot/2color/DAOs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/DEX.svg b/assets/icons/polkadot/2color/DEX.svg
new file mode 100644
index 00000000..707d885f
--- /dev/null
+++ b/assets/icons/polkadot/2color/DEX.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Dapps.svg b/assets/icons/polkadot/2color/Dapps.svg
new file mode 100644
index 00000000..cfb39653
--- /dev/null
+++ b/assets/icons/polkadot/2color/Dapps.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Data & Analytics.svg b/assets/icons/polkadot/2color/Data & Analytics.svg
new file mode 100644
index 00000000..89fe254c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Data & Analytics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Day_Light Mode.svg b/assets/icons/polkadot/2color/Day_Light Mode.svg
new file mode 100644
index 00000000..7c657920
--- /dev/null
+++ b/assets/icons/polkadot/2color/Day_Light Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/DeFi.svg b/assets/icons/polkadot/2color/DeFi.svg
new file mode 100644
index 00000000..586503db
--- /dev/null
+++ b/assets/icons/polkadot/2color/DeFi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Decentralised File Storage.svg b/assets/icons/polkadot/2color/Decentralised File Storage.svg
new file mode 100644
index 00000000..f0be1a97
--- /dev/null
+++ b/assets/icons/polkadot/2color/Decentralised File Storage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Delete_Cancel.svg b/assets/icons/polkadot/2color/Delete_Cancel.svg
new file mode 100644
index 00000000..943855cf
--- /dev/null
+++ b/assets/icons/polkadot/2color/Delete_Cancel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Democracy.svg b/assets/icons/polkadot/2color/Democracy.svg
new file mode 100644
index 00000000..198a634a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Democracy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Deposit.svg b/assets/icons/polkadot/2color/Deposit.svg
new file mode 100644
index 00000000..a50d3b1b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Derivation Path.svg b/assets/icons/polkadot/2color/Derivation Path.svg
new file mode 100644
index 00000000..c25681ea
--- /dev/null
+++ b/assets/icons/polkadot/2color/Derivation Path.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Derive An Address.svg b/assets/icons/polkadot/2color/Derive An Address.svg
new file mode 100644
index 00000000..2b0b4390
--- /dev/null
+++ b/assets/icons/polkadot/2color/Derive An Address.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Derive Key Pair.svg b/assets/icons/polkadot/2color/Derive Key Pair.svg
new file mode 100644
index 00000000..5405ea35
--- /dev/null
+++ b/assets/icons/polkadot/2color/Derive Key Pair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Disconnected.svg b/assets/icons/polkadot/2color/Disconnected.svg
new file mode 100644
index 00000000..e9706e29
--- /dev/null
+++ b/assets/icons/polkadot/2color/Disconnected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Distributed File Storage.svg b/assets/icons/polkadot/2color/Distributed File Storage.svg
new file mode 100644
index 00000000..0b2874ba
--- /dev/null
+++ b/assets/icons/polkadot/2color/Distributed File Storage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Documentations.svg b/assets/icons/polkadot/2color/Documentations.svg
new file mode 100644
index 00000000..080cb059
--- /dev/null
+++ b/assets/icons/polkadot/2color/Documentations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Download.svg b/assets/icons/polkadot/2color/Download.svg
new file mode 100644
index 00000000..a1a92e2d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Draw.svg b/assets/icons/polkadot/2color/Draw.svg
new file mode 100644
index 00000000..d2811b95
--- /dev/null
+++ b/assets/icons/polkadot/2color/Draw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Drip.svg b/assets/icons/polkadot/2color/Drip.svg
new file mode 100644
index 00000000..8a0d95c9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Drip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Dropdown Up.svg b/assets/icons/polkadot/2color/Dropdown Up.svg
new file mode 100644
index 00000000..ffd0d29c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Dropdown Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Dropdown.svg b/assets/icons/polkadot/2color/Dropdown.svg
new file mode 100644
index 00000000..0922524a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Dropdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Ecosystem Provisions.svg b/assets/icons/polkadot/2color/Ecosystem Provisions.svg
new file mode 100644
index 00000000..512d9b06
--- /dev/null
+++ b/assets/icons/polkadot/2color/Ecosystem Provisions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Ecosystem.svg b/assets/icons/polkadot/2color/Ecosystem.svg
new file mode 100644
index 00000000..7bbb5b9c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Ecosystem.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Edit-Off.svg b/assets/icons/polkadot/2color/Edit-Off.svg
new file mode 100644
index 00000000..d45437aa
--- /dev/null
+++ b/assets/icons/polkadot/2color/Edit-Off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Edit-On.svg b/assets/icons/polkadot/2color/Edit-On.svg
new file mode 100644
index 00000000..423160c9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Edit-On.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Elections.svg b/assets/icons/polkadot/2color/Elections.svg
new file mode 100644
index 00000000..788585d9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Elections.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Email.svg b/assets/icons/polkadot/2color/Email.svg
new file mode 100644
index 00000000..84f26dcf
--- /dev/null
+++ b/assets/icons/polkadot/2color/Email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Encryption.svg b/assets/icons/polkadot/2color/Encryption.svg
new file mode 100644
index 00000000..00cc44db
--- /dev/null
+++ b/assets/icons/polkadot/2color/Encryption.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Ending Period.svg b/assets/icons/polkadot/2color/Ending Period.svg
new file mode 100644
index 00000000..bfb7a485
--- /dev/null
+++ b/assets/icons/polkadot/2color/Ending Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Energy Deficiency.svg b/assets/icons/polkadot/2color/Energy Deficiency.svg
new file mode 100644
index 00000000..a5b8de81
--- /dev/null
+++ b/assets/icons/polkadot/2color/Energy Deficiency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Energy Efficiency.svg b/assets/icons/polkadot/2color/Energy Efficiency.svg
new file mode 100644
index 00000000..61349b8b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Energy Efficiency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Energy.svg b/assets/icons/polkadot/2color/Energy.svg
new file mode 100644
index 00000000..3cf91a42
--- /dev/null
+++ b/assets/icons/polkadot/2color/Energy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Enterprise.svg b/assets/icons/polkadot/2color/Enterprise.svg
new file mode 100644
index 00000000..20fed5b4
--- /dev/null
+++ b/assets/icons/polkadot/2color/Enterprise.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Error.svg b/assets/icons/polkadot/2color/Error.svg
new file mode 100644
index 00000000..480cc457
--- /dev/null
+++ b/assets/icons/polkadot/2color/Error.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Eve.svg b/assets/icons/polkadot/2color/Eve.svg
new file mode 100644
index 00000000..e038dac9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Eve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Events.svg b/assets/icons/polkadot/2color/Events.svg
new file mode 100644
index 00000000..bd2195ea
--- /dev/null
+++ b/assets/icons/polkadot/2color/Events.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Existential Deposit.svg b/assets/icons/polkadot/2color/Existential Deposit.svg
new file mode 100644
index 00000000..c22d9d8c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Existential Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Export (M,L).svg b/assets/icons/polkadot/2color/Export (M,L).svg
new file mode 100644
index 00000000..37d81caa
--- /dev/null
+++ b/assets/icons/polkadot/2color/Export (M,L).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Export (XS,S).svg b/assets/icons/polkadot/2color/Export (XS,S).svg
new file mode 100644
index 00000000..5a5c556f
--- /dev/null
+++ b/assets/icons/polkadot/2color/Export (XS,S).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Extension.svg b/assets/icons/polkadot/2color/Extension.svg
new file mode 100644
index 00000000..cec3da84
--- /dev/null
+++ b/assets/icons/polkadot/2color/Extension.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Favorite To-Be.svg b/assets/icons/polkadot/2color/Favorite To-Be.svg
new file mode 100644
index 00000000..8b324f9f
--- /dev/null
+++ b/assets/icons/polkadot/2color/Favorite To-Be.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Favorite.svg b/assets/icons/polkadot/2color/Favorite.svg
new file mode 100644
index 00000000..943cd413
--- /dev/null
+++ b/assets/icons/polkadot/2color/Favorite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Feeless.svg b/assets/icons/polkadot/2color/Feeless.svg
new file mode 100644
index 00000000..a4345075
--- /dev/null
+++ b/assets/icons/polkadot/2color/Feeless.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Fees.svg b/assets/icons/polkadot/2color/Fees.svg
new file mode 100644
index 00000000..7d256878
--- /dev/null
+++ b/assets/icons/polkadot/2color/Fees.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Fiat.svg b/assets/icons/polkadot/2color/Fiat.svg
new file mode 100644
index 00000000..fb9247a1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Fiat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Filter.svg b/assets/icons/polkadot/2color/Filter.svg
new file mode 100644
index 00000000..6e14d79a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Filter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Finances.svg b/assets/icons/polkadot/2color/Finances.svg
new file mode 100644
index 00000000..cd866a0b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Finances.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Fork.svg b/assets/icons/polkadot/2color/Fork.svg
new file mode 100644
index 00000000..c8588f0a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Fork.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/ForklessUpgrades.svg b/assets/icons/polkadot/2color/ForklessUpgrades.svg
new file mode 100644
index 00000000..ebda6826
--- /dev/null
+++ b/assets/icons/polkadot/2color/ForklessUpgrades.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Full Node.svg b/assets/icons/polkadot/2color/Full Node.svg
new file mode 100644
index 00000000..aa99b468
--- /dev/null
+++ b/assets/icons/polkadot/2color/Full Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Fund Account.svg b/assets/icons/polkadot/2color/Fund Account.svg
new file mode 100644
index 00000000..3cbbe8ce
--- /dev/null
+++ b/assets/icons/polkadot/2color/Fund Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Fund Savings.svg b/assets/icons/polkadot/2color/Fund Savings.svg
new file mode 100644
index 00000000..32c683d6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Fund Savings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Gaming.svg b/assets/icons/polkadot/2color/Gaming.svg
new file mode 100644
index 00000000..5a2b3c56
--- /dev/null
+++ b/assets/icons/polkadot/2color/Gaming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Genesis.svg b/assets/icons/polkadot/2color/Genesis.svg
new file mode 100644
index 00000000..c76003d6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Genesis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Gift.svg b/assets/icons/polkadot/2color/Gift.svg
new file mode 100644
index 00000000..2d04830e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Gift.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Glossary.svg b/assets/icons/polkadot/2color/Glossary.svg
new file mode 100644
index 00000000..4b03fcb2
--- /dev/null
+++ b/assets/icons/polkadot/2color/Glossary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Go.svg b/assets/icons/polkadot/2color/Go.svg
new file mode 100644
index 00000000..35481707
--- /dev/null
+++ b/assets/icons/polkadot/2color/Go.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Governance.svg b/assets/icons/polkadot/2color/Governance.svg
new file mode 100644
index 00000000..eb131cbe
--- /dev/null
+++ b/assets/icons/polkadot/2color/Governance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Governments.svg b/assets/icons/polkadot/2color/Governments.svg
new file mode 100644
index 00000000..f3c5e493
--- /dev/null
+++ b/assets/icons/polkadot/2color/Governments.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Hackathon.svg b/assets/icons/polkadot/2color/Hackathon.svg
new file mode 100644
index 00000000..64d3d9d5
--- /dev/null
+++ b/assets/icons/polkadot/2color/Hackathon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Hash Function.svg b/assets/icons/polkadot/2color/Hash Function.svg
new file mode 100644
index 00000000..2208ef9c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Hash Function.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Healthcare.svg b/assets/icons/polkadot/2color/Healthcare.svg
new file mode 100644
index 00000000..95b14d50
--- /dev/null
+++ b/assets/icons/polkadot/2color/Healthcare.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Help.svg b/assets/icons/polkadot/2color/Help.svg
new file mode 100644
index 00000000..cd4a79eb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Help.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Heterogeneous Sharding.svg b/assets/icons/polkadot/2color/Heterogeneous Sharding.svg
new file mode 100644
index 00000000..2613f458
--- /dev/null
+++ b/assets/icons/polkadot/2color/Heterogeneous Sharding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Identify.svg b/assets/icons/polkadot/2color/Identify.svg
new file mode 100644
index 00000000..106e5c53
--- /dev/null
+++ b/assets/icons/polkadot/2color/Identify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Identity.svg b/assets/icons/polkadot/2color/Identity.svg
new file mode 100644
index 00000000..aa78bafc
--- /dev/null
+++ b/assets/icons/polkadot/2color/Identity.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Import Token.svg b/assets/icons/polkadot/2color/Import Token.svg
new file mode 100644
index 00000000..10513c67
--- /dev/null
+++ b/assets/icons/polkadot/2color/Import Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Indeterminate _ Negative.svg b/assets/icons/polkadot/2color/Indeterminate _ Negative.svg
new file mode 100644
index 00000000..52d0b4bf
--- /dev/null
+++ b/assets/icons/polkadot/2color/Indeterminate _ Negative.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Informational.svg b/assets/icons/polkadot/2color/Informational.svg
new file mode 100644
index 00000000..30b1ebd7
--- /dev/null
+++ b/assets/icons/polkadot/2color/Informational.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Infrastructure.svg b/assets/icons/polkadot/2color/Infrastructure.svg
new file mode 100644
index 00000000..3abfacdf
--- /dev/null
+++ b/assets/icons/polkadot/2color/Infrastructure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Injected Account.svg b/assets/icons/polkadot/2color/Injected Account.svg
new file mode 100644
index 00000000..5819d379
--- /dev/null
+++ b/assets/icons/polkadot/2color/Injected Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Interconnected.svg b/assets/icons/polkadot/2color/Interconnected.svg
new file mode 100644
index 00000000..206f620e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Interconnected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Interoperability.svg b/assets/icons/polkadot/2color/Interoperability.svg
new file mode 100644
index 00000000..72353353
--- /dev/null
+++ b/assets/icons/polkadot/2color/Interoperability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Investors.svg b/assets/icons/polkadot/2color/Investors.svg
new file mode 100644
index 00000000..a34a688c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Investors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/IoT And Robotics.svg b/assets/icons/polkadot/2color/IoT And Robotics.svg
new file mode 100644
index 00000000..6ba38c72
--- /dev/null
+++ b/assets/icons/polkadot/2color/IoT And Robotics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/IoT.svg b/assets/icons/polkadot/2color/IoT.svg
new file mode 100644
index 00000000..41f96079
--- /dev/null
+++ b/assets/icons/polkadot/2color/IoT.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Isolated.svg b/assets/icons/polkadot/2color/Isolated.svg
new file mode 100644
index 00000000..66a0e3ad
--- /dev/null
+++ b/assets/icons/polkadot/2color/Isolated.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/KeepAlive Check.svg b/assets/icons/polkadot/2color/KeepAlive Check.svg
new file mode 100644
index 00000000..09f055cd
--- /dev/null
+++ b/assets/icons/polkadot/2color/KeepAlive Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Key.svg b/assets/icons/polkadot/2color/Key.svg
new file mode 100644
index 00000000..7a73183c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Language.svg b/assets/icons/polkadot/2color/Language.svg
new file mode 100644
index 00000000..3528ab4d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Layer (Four).svg b/assets/icons/polkadot/2color/Layer (Four).svg
new file mode 100644
index 00000000..4581cef4
--- /dev/null
+++ b/assets/icons/polkadot/2color/Layer (Four).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Layer (One).svg b/assets/icons/polkadot/2color/Layer (One).svg
new file mode 100644
index 00000000..cd30ff89
--- /dev/null
+++ b/assets/icons/polkadot/2color/Layer (One).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Layer (Three).svg b/assets/icons/polkadot/2color/Layer (Three).svg
new file mode 100644
index 00000000..85eff55e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Layer (Three).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Layer (Two).svg b/assets/icons/polkadot/2color/Layer (Two).svg
new file mode 100644
index 00000000..9a9fe368
--- /dev/null
+++ b/assets/icons/polkadot/2color/Layer (Two).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Layer.svg b/assets/icons/polkadot/2color/Layer.svg
new file mode 100644
index 00000000..e5bb8f31
--- /dev/null
+++ b/assets/icons/polkadot/2color/Layer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Learn More.svg b/assets/icons/polkadot/2color/Learn More.svg
new file mode 100644
index 00000000..8ce3c3cf
--- /dev/null
+++ b/assets/icons/polkadot/2color/Learn More.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Learn.svg b/assets/icons/polkadot/2color/Learn.svg
new file mode 100644
index 00000000..03243c85
--- /dev/null
+++ b/assets/icons/polkadot/2color/Learn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Lease Duration.svg b/assets/icons/polkadot/2color/Lease Duration.svg
new file mode 100644
index 00000000..33651d50
--- /dev/null
+++ b/assets/icons/polkadot/2color/Lease Duration.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Library.svg b/assets/icons/polkadot/2color/Library.svg
new file mode 100644
index 00000000..8511b3df
--- /dev/null
+++ b/assets/icons/polkadot/2color/Library.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Light Node.svg b/assets/icons/polkadot/2color/Light Node.svg
new file mode 100644
index 00000000..96ddd9fb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Light Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Lights On.svg b/assets/icons/polkadot/2color/Lights On.svg
new file mode 100644
index 00000000..adc440cf
--- /dev/null
+++ b/assets/icons/polkadot/2color/Lights On.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Limited Supply.svg b/assets/icons/polkadot/2color/Limited Supply.svg
new file mode 100644
index 00000000..09103588
--- /dev/null
+++ b/assets/icons/polkadot/2color/Limited Supply.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/LinkedIn.svg b/assets/icons/polkadot/2color/LinkedIn.svg
new file mode 100644
index 00000000..46016a56
--- /dev/null
+++ b/assets/icons/polkadot/2color/LinkedIn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Lock.svg b/assets/icons/polkadot/2color/Lock.svg
new file mode 100644
index 00000000..01295407
--- /dev/null
+++ b/assets/icons/polkadot/2color/Lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Maintain.svg b/assets/icons/polkadot/2color/Maintain.svg
new file mode 100644
index 00000000..61fe3daa
--- /dev/null
+++ b/assets/icons/polkadot/2color/Maintain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Marketing.svg b/assets/icons/polkadot/2color/Marketing.svg
new file mode 100644
index 00000000..8fbdc7ac
--- /dev/null
+++ b/assets/icons/polkadot/2color/Marketing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Menu.svg b/assets/icons/polkadot/2color/Menu.svg
new file mode 100644
index 00000000..7243a761
--- /dev/null
+++ b/assets/icons/polkadot/2color/Menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Message.svg b/assets/icons/polkadot/2color/Message.svg
new file mode 100644
index 00000000..5069baa1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Metaverse.svg b/assets/icons/polkadot/2color/Metaverse.svg
new file mode 100644
index 00000000..ed0092c8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Metaverse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Mitigating Mev.svg b/assets/icons/polkadot/2color/Mitigating Mev.svg
new file mode 100644
index 00000000..3dcf534c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Mitigating Mev.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Mobile App.svg b/assets/icons/polkadot/2color/Mobile App.svg
new file mode 100644
index 00000000..269e00ff
--- /dev/null
+++ b/assets/icons/polkadot/2color/Mobile App.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Monitor.svg b/assets/icons/polkadot/2color/Monitor.svg
new file mode 100644
index 00000000..4a5fea94
--- /dev/null
+++ b/assets/icons/polkadot/2color/Monitor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/More Horizontal.svg b/assets/icons/polkadot/2color/More Horizontal.svg
new file mode 100644
index 00000000..e3b34cc9
--- /dev/null
+++ b/assets/icons/polkadot/2color/More Horizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/More Menu.svg b/assets/icons/polkadot/2color/More Menu.svg
new file mode 100644
index 00000000..5c2692d1
--- /dev/null
+++ b/assets/icons/polkadot/2color/More Menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/More Vertical.svg b/assets/icons/polkadot/2color/More Vertical.svg
new file mode 100644
index 00000000..9cd0c77e
--- /dev/null
+++ b/assets/icons/polkadot/2color/More Vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Multichain Smart Contracts.svg b/assets/icons/polkadot/2color/Multichain Smart Contracts.svg
new file mode 100644
index 00000000..b797422c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Multichain Smart Contracts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Multichain Treasuries.svg b/assets/icons/polkadot/2color/Multichain Treasuries.svg
new file mode 100644
index 00000000..407623d0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Multichain Treasuries.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Multisign Account.svg b/assets/icons/polkadot/2color/Multisign Account.svg
new file mode 100644
index 00000000..1555d563
--- /dev/null
+++ b/assets/icons/polkadot/2color/Multisign Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Multisign.svg b/assets/icons/polkadot/2color/Multisign.svg
new file mode 100644
index 00000000..1cd0f54b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Multisign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/NFT Staking.svg b/assets/icons/polkadot/2color/NFT Staking.svg
new file mode 100644
index 00000000..d02a1f55
--- /dev/null
+++ b/assets/icons/polkadot/2color/NFT Staking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Network Is Connected.svg b/assets/icons/polkadot/2color/Network Is Connected.svg
new file mode 100644
index 00000000..7db919a5
--- /dev/null
+++ b/assets/icons/polkadot/2color/Network Is Connected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Network Security Operations.svg b/assets/icons/polkadot/2color/Network Security Operations.svg
new file mode 100644
index 00000000..7715eabc
--- /dev/null
+++ b/assets/icons/polkadot/2color/Network Security Operations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/New Tab.svg b/assets/icons/polkadot/2color/New Tab.svg
new file mode 100644
index 00000000..cd40753a
--- /dev/null
+++ b/assets/icons/polkadot/2color/New Tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/News.svg b/assets/icons/polkadot/2color/News.svg
new file mode 100644
index 00000000..437c9b8b
--- /dev/null
+++ b/assets/icons/polkadot/2color/News.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Nft.svg b/assets/icons/polkadot/2color/Nft.svg
new file mode 100644
index 00000000..d7832bcc
--- /dev/null
+++ b/assets/icons/polkadot/2color/Nft.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Night_Dark Mode.svg b/assets/icons/polkadot/2color/Night_Dark Mode.svg
new file mode 100644
index 00000000..cd78d8d6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Night_Dark Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Node.svg b/assets/icons/polkadot/2color/Node.svg
new file mode 100644
index 00000000..9f31c021
--- /dev/null
+++ b/assets/icons/polkadot/2color/Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Nominating.svg b/assets/icons/polkadot/2color/Nominating.svg
new file mode 100644
index 00000000..607e732d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Nominating.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Nominators.svg b/assets/icons/polkadot/2color/Nominators.svg
new file mode 100644
index 00000000..40e3e3b5
--- /dev/null
+++ b/assets/icons/polkadot/2color/Nominators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Not Able To Upgrade.svg b/assets/icons/polkadot/2color/Not Able To Upgrade.svg
new file mode 100644
index 00000000..b42db7d0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Not Able To Upgrade.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Not Scalable.svg b/assets/icons/polkadot/2color/Not Scalable.svg
new file mode 100644
index 00000000..a70a90cb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Not Scalable.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Notification.svg b/assets/icons/polkadot/2color/Notification.svg
new file mode 100644
index 00000000..4bc0e83d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Notification.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Off-Chain Computations.svg b/assets/icons/polkadot/2color/Off-Chain Computations.svg
new file mode 100644
index 00000000..391f13c9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Off-Chain Computations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Offboarding.svg b/assets/icons/polkadot/2color/Offboarding.svg
new file mode 100644
index 00000000..8234d289
--- /dev/null
+++ b/assets/icons/polkadot/2color/Offboarding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/On-Chain Scheduling.svg b/assets/icons/polkadot/2color/On-Chain Scheduling.svg
new file mode 100644
index 00000000..b5f003ef
--- /dev/null
+++ b/assets/icons/polkadot/2color/On-Chain Scheduling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Onboarding.svg b/assets/icons/polkadot/2color/Onboarding.svg
new file mode 100644
index 00000000..1d12a6ae
--- /dev/null
+++ b/assets/icons/polkadot/2color/Onboarding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Oracle.svg b/assets/icons/polkadot/2color/Oracle.svg
new file mode 100644
index 00000000..1e033aa9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Oracle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Oracles.svg b/assets/icons/polkadot/2color/Oracles.svg
new file mode 100644
index 00000000..840e853a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Oracles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Overview.svg b/assets/icons/polkadot/2color/Overview.svg
new file mode 100644
index 00000000..c552b802
--- /dev/null
+++ b/assets/icons/polkadot/2color/Overview.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Paper Money.svg b/assets/icons/polkadot/2color/Paper Money.svg
new file mode 100644
index 00000000..d7d1d188
--- /dev/null
+++ b/assets/icons/polkadot/2color/Paper Money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Parachains.svg b/assets/icons/polkadot/2color/Parachains.svg
new file mode 100644
index 00000000..4b2d1341
--- /dev/null
+++ b/assets/icons/polkadot/2color/Parachains.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Payout.svg b/assets/icons/polkadot/2color/Payout.svg
new file mode 100644
index 00000000..d7676b04
--- /dev/null
+++ b/assets/icons/polkadot/2color/Payout.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Picture.svg b/assets/icons/polkadot/2color/Picture.svg
new file mode 100644
index 00000000..d67cd713
--- /dev/null
+++ b/assets/icons/polkadot/2color/Picture.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Podcasts.svg b/assets/icons/polkadot/2color/Podcasts.svg
new file mode 100644
index 00000000..9a0cb9c7
--- /dev/null
+++ b/assets/icons/polkadot/2color/Podcasts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Privacy.svg b/assets/icons/polkadot/2color/Privacy.svg
new file mode 100644
index 00000000..3d2885ee
--- /dev/null
+++ b/assets/icons/polkadot/2color/Privacy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Private Key.svg b/assets/icons/polkadot/2color/Private Key.svg
new file mode 100644
index 00000000..037a8123
--- /dev/null
+++ b/assets/icons/polkadot/2color/Private Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Proof Of Stake.svg b/assets/icons/polkadot/2color/Proof Of Stake.svg
new file mode 100644
index 00000000..99bb2358
--- /dev/null
+++ b/assets/icons/polkadot/2color/Proof Of Stake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Proof Of Work.svg b/assets/icons/polkadot/2color/Proof Of Work.svg
new file mode 100644
index 00000000..b6a34655
--- /dev/null
+++ b/assets/icons/polkadot/2color/Proof Of Work.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Proposal.svg b/assets/icons/polkadot/2color/Proposal.svg
new file mode 100644
index 00000000..19517bdb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Proposal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Proxy.svg b/assets/icons/polkadot/2color/Proxy.svg
new file mode 100644
index 00000000..2748ff32
--- /dev/null
+++ b/assets/icons/polkadot/2color/Proxy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/ProxyAccount.svg b/assets/icons/polkadot/2color/ProxyAccount.svg
new file mode 100644
index 00000000..3aaa697a
--- /dev/null
+++ b/assets/icons/polkadot/2color/ProxyAccount.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Public Key.svg b/assets/icons/polkadot/2color/Public Key.svg
new file mode 100644
index 00000000..df357b3b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Public Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/QR Code.svg b/assets/icons/polkadot/2color/QR Code.svg
new file mode 100644
index 00000000..2f4ea903
--- /dev/null
+++ b/assets/icons/polkadot/2color/QR Code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Randomness.svg b/assets/icons/polkadot/2color/Randomness.svg
new file mode 100644
index 00000000..116c491f
--- /dev/null
+++ b/assets/icons/polkadot/2color/Randomness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Read Time.svg b/assets/icons/polkadot/2color/Read Time.svg
new file mode 100644
index 00000000..f20c9037
--- /dev/null
+++ b/assets/icons/polkadot/2color/Read Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Recover Keys.svg b/assets/icons/polkadot/2color/Recover Keys.svg
new file mode 100644
index 00000000..7da5e30d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Recover Keys.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Recovery.svg b/assets/icons/polkadot/2color/Recovery.svg
new file mode 100644
index 00000000..54f614e6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Recovery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Reddit.svg b/assets/icons/polkadot/2color/Reddit.svg
new file mode 100644
index 00000000..4ff5c52a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Reddit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Referenda.svg b/assets/icons/polkadot/2color/Referenda.svg
new file mode 100644
index 00000000..c69fa522
--- /dev/null
+++ b/assets/icons/polkadot/2color/Referenda.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Refresh _ Redo.svg b/assets/icons/polkadot/2color/Refresh _ Redo.svg
new file mode 100644
index 00000000..621d4e33
--- /dev/null
+++ b/assets/icons/polkadot/2color/Refresh _ Redo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Registrars.svg b/assets/icons/polkadot/2color/Registrars.svg
new file mode 100644
index 00000000..7114cb76
--- /dev/null
+++ b/assets/icons/polkadot/2color/Registrars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Regulators.svg b/assets/icons/polkadot/2color/Regulators.svg
new file mode 100644
index 00000000..ee3c7568
--- /dev/null
+++ b/assets/icons/polkadot/2color/Regulators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Relay Chain.svg b/assets/icons/polkadot/2color/Relay Chain.svg
new file mode 100644
index 00000000..696f33da
--- /dev/null
+++ b/assets/icons/polkadot/2color/Relay Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Remote Node.svg b/assets/icons/polkadot/2color/Remote Node.svg
new file mode 100644
index 00000000..3bbfd9b0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Remote Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Remove User.svg b/assets/icons/polkadot/2color/Remove User.svg
new file mode 100644
index 00000000..3b5b8814
--- /dev/null
+++ b/assets/icons/polkadot/2color/Remove User.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Remove.svg b/assets/icons/polkadot/2color/Remove.svg
new file mode 100644
index 00000000..44ccf6b7
--- /dev/null
+++ b/assets/icons/polkadot/2color/Remove.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Report.svg b/assets/icons/polkadot/2color/Report.svg
new file mode 100644
index 00000000..f763d126
--- /dev/null
+++ b/assets/icons/polkadot/2color/Report.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Reputation Systems.svg b/assets/icons/polkadot/2color/Reputation Systems.svg
new file mode 100644
index 00000000..890d2f0d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Reputation Systems.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Research.svg b/assets/icons/polkadot/2color/Research.svg
new file mode 100644
index 00000000..05bd6a3b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Research.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Reserve Back Assets.svg b/assets/icons/polkadot/2color/Reserve Back Assets.svg
new file mode 100644
index 00000000..c4fccb29
--- /dev/null
+++ b/assets/icons/polkadot/2color/Reserve Back Assets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Restore From BackUp.svg b/assets/icons/polkadot/2color/Restore From BackUp.svg
new file mode 100644
index 00000000..6ee41e83
--- /dev/null
+++ b/assets/icons/polkadot/2color/Restore From BackUp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Retail And Ecommerce.svg b/assets/icons/polkadot/2color/Retail And Ecommerce.svg
new file mode 100644
index 00000000..5ea1fffb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Retail And Ecommerce.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Robust System.svg b/assets/icons/polkadot/2color/Robust System.svg
new file mode 100644
index 00000000..fac7f659
--- /dev/null
+++ b/assets/icons/polkadot/2color/Robust System.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Rust.svg b/assets/icons/polkadot/2color/Rust.svg
new file mode 100644
index 00000000..6dd69c8e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Rust.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Save.svg b/assets/icons/polkadot/2color/Save.svg
new file mode 100644
index 00000000..5e0bffd9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Save.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Scalability.svg b/assets/icons/polkadot/2color/Scalability.svg
new file mode 100644
index 00000000..5883737e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Scalability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Scale.svg b/assets/icons/polkadot/2color/Scale.svg
new file mode 100644
index 00000000..c12d9e2c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Scale.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Scaling.svg b/assets/icons/polkadot/2color/Scaling.svg
new file mode 100644
index 00000000..c07d7eff
--- /dev/null
+++ b/assets/icons/polkadot/2color/Scaling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Scam Alert.svg b/assets/icons/polkadot/2color/Scam Alert.svg
new file mode 100644
index 00000000..f64ac333
--- /dev/null
+++ b/assets/icons/polkadot/2color/Scam Alert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Search.svg b/assets/icons/polkadot/2color/Search.svg
new file mode 100644
index 00000000..f365e63b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Second A Proposal.svg b/assets/icons/polkadot/2color/Second A Proposal.svg
new file mode 100644
index 00000000..0a09cd61
--- /dev/null
+++ b/assets/icons/polkadot/2color/Second A Proposal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Secret Part Of The Derivation Path.svg b/assets/icons/polkadot/2color/Secret Part Of The Derivation Path.svg
new file mode 100644
index 00000000..261dd1f8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Secret Part Of The Derivation Path.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Secure Device.svg b/assets/icons/polkadot/2color/Secure Device.svg
new file mode 100644
index 00000000..41f069fc
--- /dev/null
+++ b/assets/icons/polkadot/2color/Secure Device.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Security Check.svg b/assets/icons/polkadot/2color/Security Check.svg
new file mode 100644
index 00000000..19671682
--- /dev/null
+++ b/assets/icons/polkadot/2color/Security Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Seed Phrase.svg b/assets/icons/polkadot/2color/Seed Phrase.svg
new file mode 100644
index 00000000..4c677207
--- /dev/null
+++ b/assets/icons/polkadot/2color/Seed Phrase.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Select List Item.svg b/assets/icons/polkadot/2color/Select List Item.svg
new file mode 100644
index 00000000..03812eab
--- /dev/null
+++ b/assets/icons/polkadot/2color/Select List Item.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Session.svg b/assets/icons/polkadot/2color/Session.svg
new file mode 100644
index 00000000..fb7b6d50
--- /dev/null
+++ b/assets/icons/polkadot/2color/Session.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Settings.svg b/assets/icons/polkadot/2color/Settings.svg
new file mode 100644
index 00000000..1d36a691
--- /dev/null
+++ b/assets/icons/polkadot/2color/Settings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Sharding.svg b/assets/icons/polkadot/2color/Sharding.svg
new file mode 100644
index 00000000..741b19f6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Sharding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Share.svg b/assets/icons/polkadot/2color/Share.svg
new file mode 100644
index 00000000..7d5c8b35
--- /dev/null
+++ b/assets/icons/polkadot/2color/Share.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Shared Security.svg b/assets/icons/polkadot/2color/Shared Security.svg
new file mode 100644
index 00000000..3959757b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Shared Security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Sign A Transaction.svg b/assets/icons/polkadot/2color/Sign A Transaction.svg
new file mode 100644
index 00000000..5bb07c1a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Sign A Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Sign Specs.svg b/assets/icons/polkadot/2color/Sign Specs.svg
new file mode 100644
index 00000000..7f2a32a2
--- /dev/null
+++ b/assets/icons/polkadot/2color/Sign Specs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Sign.svg b/assets/icons/polkadot/2color/Sign.svg
new file mode 100644
index 00000000..fe6fe37b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Signal.svg b/assets/icons/polkadot/2color/Signal.svg
new file mode 100644
index 00000000..f3759fc0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Signal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Signature.svg b/assets/icons/polkadot/2color/Signature.svg
new file mode 100644
index 00000000..fbaed11e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Signature.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Signifier Tab.svg b/assets/icons/polkadot/2color/Signifier Tab.svg
new file mode 100644
index 00000000..a8596b0b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Signifier Tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Smart Contract.svg b/assets/icons/polkadot/2color/Smart Contract.svg
new file mode 100644
index 00000000..842e4416
--- /dev/null
+++ b/assets/icons/polkadot/2color/Smart Contract.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Social Impact & Humanitarian.svg b/assets/icons/polkadot/2color/Social Impact & Humanitarian.svg
new file mode 100644
index 00000000..9865c88a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Social Impact & Humanitarian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Social Networking.svg b/assets/icons/polkadot/2color/Social Networking.svg
new file mode 100644
index 00000000..28e0a30a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Social Networking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Software Development.svg b/assets/icons/polkadot/2color/Software Development.svg
new file mode 100644
index 00000000..337682d3
--- /dev/null
+++ b/assets/icons/polkadot/2color/Software Development.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Specialised.svg b/assets/icons/polkadot/2color/Specialised.svg
new file mode 100644
index 00000000..3d48e9a9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Specialised.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Stablecoin.svg b/assets/icons/polkadot/2color/Stablecoin.svg
new file mode 100644
index 00000000..4885480a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Stablecoin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Stake.svg b/assets/icons/polkadot/2color/Stake.svg
new file mode 100644
index 00000000..bceaf135
--- /dev/null
+++ b/assets/icons/polkadot/2color/Stake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Staking.svg b/assets/icons/polkadot/2color/Staking.svg
new file mode 100644
index 00000000..d3068fe6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Staking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Starting Period.svg b/assets/icons/polkadot/2color/Starting Period.svg
new file mode 100644
index 00000000..54a1a84b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Starting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Success.svg b/assets/icons/polkadot/2color/Success.svg
new file mode 100644
index 00000000..70eb70f1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Success.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Supply Chain.svg b/assets/icons/polkadot/2color/Supply Chain.svg
new file mode 100644
index 00000000..95825eea
--- /dev/null
+++ b/assets/icons/polkadot/2color/Supply Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Talent.svg b/assets/icons/polkadot/2color/Talent.svg
new file mode 100644
index 00000000..755fccbb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Talent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Technical Committee.svg b/assets/icons/polkadot/2color/Technical Committee.svg
new file mode 100644
index 00000000..83104957
--- /dev/null
+++ b/assets/icons/polkadot/2color/Technical Committee.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Teleport.svg b/assets/icons/polkadot/2color/Teleport.svg
new file mode 100644
index 00000000..8efe6b52
--- /dev/null
+++ b/assets/icons/polkadot/2color/Teleport.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Testnet Token.svg b/assets/icons/polkadot/2color/Testnet Token.svg
new file mode 100644
index 00000000..c91a801c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Testnet Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Thumbs Down.svg b/assets/icons/polkadot/2color/Thumbs Down.svg
new file mode 100644
index 00000000..ce54299d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Thumbs Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Thumbs Up.svg b/assets/icons/polkadot/2color/Thumbs Up.svg
new file mode 100644
index 00000000..2dd9c6a7
--- /dev/null
+++ b/assets/icons/polkadot/2color/Thumbs Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Time.svg b/assets/icons/polkadot/2color/Time.svg
new file mode 100644
index 00000000..43eebc8d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Token Holders.svg b/assets/icons/polkadot/2color/Token Holders.svg
new file mode 100644
index 00000000..f79e3063
--- /dev/null
+++ b/assets/icons/polkadot/2color/Token Holders.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Token.svg b/assets/icons/polkadot/2color/Token.svg
new file mode 100644
index 00000000..a674de05
--- /dev/null
+++ b/assets/icons/polkadot/2color/Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Tools.svg b/assets/icons/polkadot/2color/Tools.svg
new file mode 100644
index 00000000..831307c1
--- /dev/null
+++ b/assets/icons/polkadot/2color/Tools.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Transaction.svg b/assets/icons/polkadot/2color/Transaction.svg
new file mode 100644
index 00000000..e8a6a7e0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Translate.svg b/assets/icons/polkadot/2color/Translate.svg
new file mode 100644
index 00000000..2a115997
--- /dev/null
+++ b/assets/icons/polkadot/2color/Translate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Transparency.svg b/assets/icons/polkadot/2color/Transparency.svg
new file mode 100644
index 00000000..42a399b8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Transparency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Treasury.svg b/assets/icons/polkadot/2color/Treasury.svg
new file mode 100644
index 00000000..9d96ee9a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Treasury.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Twitter.svg b/assets/icons/polkadot/2color/Twitter.svg
new file mode 100644
index 00000000..553641ca
--- /dev/null
+++ b/assets/icons/polkadot/2color/Twitter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Ui.svg b/assets/icons/polkadot/2color/Ui.svg
new file mode 100644
index 00000000..a8699148
--- /dev/null
+++ b/assets/icons/polkadot/2color/Ui.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Unbond.svg b/assets/icons/polkadot/2color/Unbond.svg
new file mode 100644
index 00000000..8283144b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Unbond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Unchecked.svg b/assets/icons/polkadot/2color/Unchecked.svg
new file mode 100644
index 00000000..57b1f69a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Unchecked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Unlock.svg b/assets/icons/polkadot/2color/Unlock.svg
new file mode 100644
index 00000000..e69de13a
--- /dev/null
+++ b/assets/icons/polkadot/2color/Unlock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Unstake.svg b/assets/icons/polkadot/2color/Unstake.svg
new file mode 100644
index 00000000..c448fec0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Unstake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Upgrade.svg b/assets/icons/polkadot/2color/Upgrade.svg
new file mode 100644
index 00000000..3fe34bbb
--- /dev/null
+++ b/assets/icons/polkadot/2color/Upgrade.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Use Cases.svg b/assets/icons/polkadot/2color/Use Cases.svg
new file mode 100644
index 00000000..4aaa34d8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Use Cases.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Users.svg b/assets/icons/polkadot/2color/Users.svg
new file mode 100644
index 00000000..dd18a721
--- /dev/null
+++ b/assets/icons/polkadot/2color/Users.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Utility.svg b/assets/icons/polkadot/2color/Utility.svg
new file mode 100644
index 00000000..11652f38
--- /dev/null
+++ b/assets/icons/polkadot/2color/Utility.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Ux.svg b/assets/icons/polkadot/2color/Ux.svg
new file mode 100644
index 00000000..8919a0f9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Ux.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Validators.svg b/assets/icons/polkadot/2color/Validators.svg
new file mode 100644
index 00000000..1e2dc0c5
--- /dev/null
+++ b/assets/icons/polkadot/2color/Validators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Value Bearing Token.svg b/assets/icons/polkadot/2color/Value Bearing Token.svg
new file mode 100644
index 00000000..93307165
--- /dev/null
+++ b/assets/icons/polkadot/2color/Value Bearing Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Verified Account.svg b/assets/icons/polkadot/2color/Verified Account.svg
new file mode 100644
index 00000000..abf054fc
--- /dev/null
+++ b/assets/icons/polkadot/2color/Verified Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Verified Signed.svg b/assets/icons/polkadot/2color/Verified Signed.svg
new file mode 100644
index 00000000..eafd67f0
--- /dev/null
+++ b/assets/icons/polkadot/2color/Verified Signed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Verify.svg b/assets/icons/polkadot/2color/Verify.svg
new file mode 100644
index 00000000..db6f20b3
--- /dev/null
+++ b/assets/icons/polkadot/2color/Verify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Version.svg b/assets/icons/polkadot/2color/Version.svg
new file mode 100644
index 00000000..6038a5fe
--- /dev/null
+++ b/assets/icons/polkadot/2color/Version.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Vesting Period.svg b/assets/icons/polkadot/2color/Vesting Period.svg
new file mode 100644
index 00000000..177c6652
--- /dev/null
+++ b/assets/icons/polkadot/2color/Vesting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Vesting.svg b/assets/icons/polkadot/2color/Vesting.svg
new file mode 100644
index 00000000..17337391
--- /dev/null
+++ b/assets/icons/polkadot/2color/Vesting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Video Pause.svg b/assets/icons/polkadot/2color/Video Pause.svg
new file mode 100644
index 00000000..1b9cddd6
--- /dev/null
+++ b/assets/icons/polkadot/2color/Video Pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Video Play.svg b/assets/icons/polkadot/2color/Video Play.svg
new file mode 100644
index 00000000..1d89d8b5
--- /dev/null
+++ b/assets/icons/polkadot/2color/Video Play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Video.svg b/assets/icons/polkadot/2color/Video.svg
new file mode 100644
index 00000000..a6ea3d9c
--- /dev/null
+++ b/assets/icons/polkadot/2color/Video.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Videos.svg b/assets/icons/polkadot/2color/Videos.svg
new file mode 100644
index 00000000..ce47a27b
--- /dev/null
+++ b/assets/icons/polkadot/2color/Videos.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Vote.svg b/assets/icons/polkadot/2color/Vote.svg
new file mode 100644
index 00000000..1ceaacd8
--- /dev/null
+++ b/assets/icons/polkadot/2color/Vote.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Voting Period.svg b/assets/icons/polkadot/2color/Voting Period.svg
new file mode 100644
index 00000000..0142eb06
--- /dev/null
+++ b/assets/icons/polkadot/2color/Voting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Wallet Deposit.svg b/assets/icons/polkadot/2color/Wallet Deposit.svg
new file mode 100644
index 00000000..89a0a124
--- /dev/null
+++ b/assets/icons/polkadot/2color/Wallet Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Wallet Withdraw.svg b/assets/icons/polkadot/2color/Wallet Withdraw.svg
new file mode 100644
index 00000000..a5f597b2
--- /dev/null
+++ b/assets/icons/polkadot/2color/Wallet Withdraw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Wallet.svg b/assets/icons/polkadot/2color/Wallet.svg
new file mode 100644
index 00000000..dfaf590e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Wallet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Wallets.svg b/assets/icons/polkadot/2color/Wallets.svg
new file mode 100644
index 00000000..245afeb3
--- /dev/null
+++ b/assets/icons/polkadot/2color/Wallets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Wasm.svg b/assets/icons/polkadot/2color/Wasm.svg
new file mode 100644
index 00000000..623d6ffe
--- /dev/null
+++ b/assets/icons/polkadot/2color/Wasm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Web3.svg b/assets/icons/polkadot/2color/Web3.svg
new file mode 100644
index 00000000..072fce6e
--- /dev/null
+++ b/assets/icons/polkadot/2color/Web3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Whitepaper Download.svg b/assets/icons/polkadot/2color/Whitepaper Download.svg
new file mode 100644
index 00000000..a4d2a122
--- /dev/null
+++ b/assets/icons/polkadot/2color/Whitepaper Download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Whitepaper Upload.svg b/assets/icons/polkadot/2color/Whitepaper Upload.svg
new file mode 100644
index 00000000..3962e262
--- /dev/null
+++ b/assets/icons/polkadot/2color/Whitepaper Upload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Whitepaper.svg b/assets/icons/polkadot/2color/Whitepaper.svg
new file mode 100644
index 00000000..f707cf08
--- /dev/null
+++ b/assets/icons/polkadot/2color/Whitepaper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/WiFi Off.svg b/assets/icons/polkadot/2color/WiFi Off.svg
new file mode 100644
index 00000000..689d7366
--- /dev/null
+++ b/assets/icons/polkadot/2color/WiFi Off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/WiFi.svg b/assets/icons/polkadot/2color/WiFi.svg
new file mode 100644
index 00000000..80510fb5
--- /dev/null
+++ b/assets/icons/polkadot/2color/WiFi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Wiki.svg b/assets/icons/polkadot/2color/Wiki.svg
new file mode 100644
index 00000000..298e28f9
--- /dev/null
+++ b/assets/icons/polkadot/2color/Wiki.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Withdraw.svg b/assets/icons/polkadot/2color/Withdraw.svg
new file mode 100644
index 00000000..f694e397
--- /dev/null
+++ b/assets/icons/polkadot/2color/Withdraw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Workshop.svg b/assets/icons/polkadot/2color/Workshop.svg
new file mode 100644
index 00000000..ec41012d
--- /dev/null
+++ b/assets/icons/polkadot/2color/Workshop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/XCM (Message).svg b/assets/icons/polkadot/2color/XCM (Message).svg
new file mode 100644
index 00000000..d1c06564
--- /dev/null
+++ b/assets/icons/polkadot/2color/XCM (Message).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/2color/Youtube.svg b/assets/icons/polkadot/2color/Youtube.svg
new file mode 100644
index 00000000..71230aa4
--- /dev/null
+++ b/assets/icons/polkadot/2color/Youtube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/AI & Computing.svg b/assets/icons/polkadot/line/AI & Computing.svg
new file mode 100644
index 00000000..33cacaa1
--- /dev/null
+++ b/assets/icons/polkadot/line/AI & Computing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Account Portability.svg b/assets/icons/polkadot/line/Account Portability.svg
new file mode 100644
index 00000000..601abe23
--- /dev/null
+++ b/assets/icons/polkadot/line/Account Portability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Action Left.svg b/assets/icons/polkadot/line/Action Left.svg
new file mode 100644
index 00000000..863c22e1
--- /dev/null
+++ b/assets/icons/polkadot/line/Action Left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Action Right.svg b/assets/icons/polkadot/line/Action Right.svg
new file mode 100644
index 00000000..1ad062c8
--- /dev/null
+++ b/assets/icons/polkadot/line/Action Right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Add key pair.svg b/assets/icons/polkadot/line/Add key pair.svg
new file mode 100644
index 00000000..2879ec19
--- /dev/null
+++ b/assets/icons/polkadot/line/Add key pair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Add user.svg b/assets/icons/polkadot/line/Add user.svg
new file mode 100644
index 00000000..424af4f5
--- /dev/null
+++ b/assets/icons/polkadot/line/Add user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Add.svg b/assets/icons/polkadot/line/Add.svg
new file mode 100644
index 00000000..f9dceb8c
--- /dev/null
+++ b/assets/icons/polkadot/line/Add.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Address book.svg b/assets/icons/polkadot/line/Address book.svg
new file mode 100644
index 00000000..5cb28bc3
--- /dev/null
+++ b/assets/icons/polkadot/line/Address book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Airplane Mode.svg b/assets/icons/polkadot/line/Airplane Mode.svg
new file mode 100644
index 00000000..87799346
--- /dev/null
+++ b/assets/icons/polkadot/line/Airplane Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Alert.svg b/assets/icons/polkadot/line/Alert.svg
new file mode 100644
index 00000000..9c92c3ed
--- /dev/null
+++ b/assets/icons/polkadot/line/Alert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Algorithm.svg b/assets/icons/polkadot/line/Algorithm.svg
new file mode 100644
index 00000000..62b1d320
--- /dev/null
+++ b/assets/icons/polkadot/line/Algorithm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Alice.svg b/assets/icons/polkadot/line/Alice.svg
new file mode 100644
index 00000000..7259c905
--- /dev/null
+++ b/assets/icons/polkadot/line/Alice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Ambassadors.svg b/assets/icons/polkadot/line/Ambassadors.svg
new file mode 100644
index 00000000..41b3d380
--- /dev/null
+++ b/assets/icons/polkadot/line/Ambassadors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Announcement.svg b/assets/icons/polkadot/line/Announcement.svg
new file mode 100644
index 00000000..15d158f3
--- /dev/null
+++ b/assets/icons/polkadot/line/Announcement.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Anonymous Proxy.svg b/assets/icons/polkadot/line/Anonymous Proxy.svg
new file mode 100644
index 00000000..3d45f11e
--- /dev/null
+++ b/assets/icons/polkadot/line/Anonymous Proxy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Arbitrary Message.svg b/assets/icons/polkadot/line/Arbitrary Message.svg
new file mode 100644
index 00000000..ac803df0
--- /dev/null
+++ b/assets/icons/polkadot/line/Arbitrary Message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Archive Node.svg b/assets/icons/polkadot/line/Archive Node.svg
new file mode 100644
index 00000000..3cd82bd3
--- /dev/null
+++ b/assets/icons/polkadot/line/Archive Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Arrow Back.svg b/assets/icons/polkadot/line/Arrow Back.svg
new file mode 100644
index 00000000..96b70a2a
--- /dev/null
+++ b/assets/icons/polkadot/line/Arrow Back.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Arrow Down.svg b/assets/icons/polkadot/line/Arrow Down.svg
new file mode 100644
index 00000000..045e4672
--- /dev/null
+++ b/assets/icons/polkadot/line/Arrow Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Arrow Left.svg b/assets/icons/polkadot/line/Arrow Left.svg
new file mode 100644
index 00000000..2342bc53
--- /dev/null
+++ b/assets/icons/polkadot/line/Arrow Left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Arrow Right.svg b/assets/icons/polkadot/line/Arrow Right.svg
new file mode 100644
index 00000000..81832ba2
--- /dev/null
+++ b/assets/icons/polkadot/line/Arrow Right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Arrow Up.svg b/assets/icons/polkadot/line/Arrow Up.svg
new file mode 100644
index 00000000..5dcddb82
--- /dev/null
+++ b/assets/icons/polkadot/line/Arrow Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Article.svg b/assets/icons/polkadot/line/Article.svg
new file mode 100644
index 00000000..160e6701
--- /dev/null
+++ b/assets/icons/polkadot/line/Article.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Attack.svg b/assets/icons/polkadot/line/Attack.svg
new file mode 100644
index 00000000..4c767bcc
--- /dev/null
+++ b/assets/icons/polkadot/line/Attack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Auctions.svg b/assets/icons/polkadot/line/Auctions.svg
new file mode 100644
index 00000000..43075259
--- /dev/null
+++ b/assets/icons/polkadot/line/Auctions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Authority.svg b/assets/icons/polkadot/line/Authority.svg
new file mode 100644
index 00000000..13e04e75
--- /dev/null
+++ b/assets/icons/polkadot/line/Authority.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Back Up.svg b/assets/icons/polkadot/line/Back Up.svg
new file mode 100644
index 00000000..1f1b9fdc
--- /dev/null
+++ b/assets/icons/polkadot/line/Back Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Balance.svg b/assets/icons/polkadot/line/Balance.svg
new file mode 100644
index 00000000..124dd5f8
--- /dev/null
+++ b/assets/icons/polkadot/line/Balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Batch Transaction.svg b/assets/icons/polkadot/line/Batch Transaction.svg
new file mode 100644
index 00000000..ad06cefb
--- /dev/null
+++ b/assets/icons/polkadot/line/Batch Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Bid.svg b/assets/icons/polkadot/line/Bid.svg
new file mode 100644
index 00000000..486284bd
--- /dev/null
+++ b/assets/icons/polkadot/line/Bid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Block Explorer.svg b/assets/icons/polkadot/line/Block Explorer.svg
new file mode 100644
index 00000000..099cbc94
--- /dev/null
+++ b/assets/icons/polkadot/line/Block Explorer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Block Number.svg b/assets/icons/polkadot/line/Block Number.svg
new file mode 100644
index 00000000..f1085491
--- /dev/null
+++ b/assets/icons/polkadot/line/Block Number.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Block Search.svg b/assets/icons/polkadot/line/Block Search.svg
new file mode 100644
index 00000000..909abf5b
--- /dev/null
+++ b/assets/icons/polkadot/line/Block Search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Block.svg b/assets/icons/polkadot/line/Block.svg
new file mode 100644
index 00000000..8ffae0f4
--- /dev/null
+++ b/assets/icons/polkadot/line/Block.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Blockchain.svg b/assets/icons/polkadot/line/Blockchain.svg
new file mode 100644
index 00000000..61175e9d
--- /dev/null
+++ b/assets/icons/polkadot/line/Blockchain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Blog Post.svg b/assets/icons/polkadot/line/Blog Post.svg
new file mode 100644
index 00000000..956ece00
--- /dev/null
+++ b/assets/icons/polkadot/line/Blog Post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Bob.svg b/assets/icons/polkadot/line/Bob.svg
new file mode 100644
index 00000000..5043e52d
--- /dev/null
+++ b/assets/icons/polkadot/line/Bob.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Bond.svg b/assets/icons/polkadot/line/Bond.svg
new file mode 100644
index 00000000..13e01451
--- /dev/null
+++ b/assets/icons/polkadot/line/Bond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Bonded Time.svg b/assets/icons/polkadot/line/Bonded Time.svg
new file mode 100644
index 00000000..6c915451
--- /dev/null
+++ b/assets/icons/polkadot/line/Bonded Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Boot Node.svg b/assets/icons/polkadot/line/Boot Node.svg
new file mode 100644
index 00000000..473c4274
--- /dev/null
+++ b/assets/icons/polkadot/line/Boot Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Bridge.svg b/assets/icons/polkadot/line/Bridge.svg
new file mode 100644
index 00000000..7d5fc3bc
--- /dev/null
+++ b/assets/icons/polkadot/line/Bridge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Bridges.svg b/assets/icons/polkadot/line/Bridges.svg
new file mode 100644
index 00000000..7849a067
--- /dev/null
+++ b/assets/icons/polkadot/line/Bridges.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Build.svg b/assets/icons/polkadot/line/Build.svg
new file mode 100644
index 00000000..93e3ab5b
--- /dev/null
+++ b/assets/icons/polkadot/line/Build.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Builders _ Developers.svg b/assets/icons/polkadot/line/Builders _ Developers.svg
new file mode 100644
index 00000000..308a14a9
--- /dev/null
+++ b/assets/icons/polkadot/line/Builders _ Developers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Built-in Security.svg b/assets/icons/polkadot/line/Built-in Security.svg
new file mode 100644
index 00000000..f26e553f
--- /dev/null
+++ b/assets/icons/polkadot/line/Built-in Security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Burn.svg b/assets/icons/polkadot/line/Burn.svg
new file mode 100644
index 00000000..2bb64dad
--- /dev/null
+++ b/assets/icons/polkadot/line/Burn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/C++.svg b/assets/icons/polkadot/line/C++.svg
new file mode 100644
index 00000000..d6cc128a
--- /dev/null
+++ b/assets/icons/polkadot/line/C++.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Calendar.svg b/assets/icons/polkadot/line/Calendar.svg
new file mode 100644
index 00000000..39b6535c
--- /dev/null
+++ b/assets/icons/polkadot/line/Calendar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Career.svg b/assets/icons/polkadot/line/Career.svg
new file mode 100644
index 00000000..dadc5600
--- /dev/null
+++ b/assets/icons/polkadot/line/Career.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Certificate.svg b/assets/icons/polkadot/line/Certificate.svg
new file mode 100644
index 00000000..687ee391
--- /dev/null
+++ b/assets/icons/polkadot/line/Certificate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cex.svg b/assets/icons/polkadot/line/Cex.svg
new file mode 100644
index 00000000..56e9c6c8
--- /dev/null
+++ b/assets/icons/polkadot/line/Cex.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Chain Spec.svg b/assets/icons/polkadot/line/Chain Spec.svg
new file mode 100644
index 00000000..616e632d
--- /dev/null
+++ b/assets/icons/polkadot/line/Chain Spec.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Check.svg b/assets/icons/polkadot/line/Check.svg
new file mode 100644
index 00000000..09432dfc
--- /dev/null
+++ b/assets/icons/polkadot/line/Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Checked.svg b/assets/icons/polkadot/line/Checked.svg
new file mode 100644
index 00000000..24a433b8
--- /dev/null
+++ b/assets/icons/polkadot/line/Checked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Chevron Down.svg b/assets/icons/polkadot/line/Chevron Down.svg
new file mode 100644
index 00000000..b9282b1e
--- /dev/null
+++ b/assets/icons/polkadot/line/Chevron Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Chevron Up.svg b/assets/icons/polkadot/line/Chevron Up.svg
new file mode 100644
index 00000000..f1f9d634
--- /dev/null
+++ b/assets/icons/polkadot/line/Chevron Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Claim.svg b/assets/icons/polkadot/line/Claim.svg
new file mode 100644
index 00000000..b2069f6b
--- /dev/null
+++ b/assets/icons/polkadot/line/Claim.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Close.svg b/assets/icons/polkadot/line/Close.svg
new file mode 100644
index 00000000..ba586549
--- /dev/null
+++ b/assets/icons/polkadot/line/Close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cloud.svg b/assets/icons/polkadot/line/Cloud.svg
new file mode 100644
index 00000000..85e9e6c2
--- /dev/null
+++ b/assets/icons/polkadot/line/Cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Code.svg b/assets/icons/polkadot/line/Code.svg
new file mode 100644
index 00000000..9d2a51c5
--- /dev/null
+++ b/assets/icons/polkadot/line/Code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Collapse.svg b/assets/icons/polkadot/line/Collapse.svg
new file mode 100644
index 00000000..70d19dc8
--- /dev/null
+++ b/assets/icons/polkadot/line/Collapse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Collators.svg b/assets/icons/polkadot/line/Collators.svg
new file mode 100644
index 00000000..0902dcd1
--- /dev/null
+++ b/assets/icons/polkadot/line/Collators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Collective.svg b/assets/icons/polkadot/line/Collective.svg
new file mode 100644
index 00000000..0e9ae3bb
--- /dev/null
+++ b/assets/icons/polkadot/line/Collective.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Communications And Media.svg b/assets/icons/polkadot/line/Communications And Media.svg
new file mode 100644
index 00000000..846bd572
--- /dev/null
+++ b/assets/icons/polkadot/line/Communications And Media.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Community Events And Outreach.svg b/assets/icons/polkadot/line/Community Events And Outreach.svg
new file mode 100644
index 00000000..c98dd271
--- /dev/null
+++ b/assets/icons/polkadot/line/Community Events And Outreach.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Community.svg b/assets/icons/polkadot/line/Community.svg
new file mode 100644
index 00000000..f1302854
--- /dev/null
+++ b/assets/icons/polkadot/line/Community.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Companion Account (in Bridge context).svg b/assets/icons/polkadot/line/Companion Account (in Bridge context).svg
new file mode 100644
index 00000000..f9dbc720
--- /dev/null
+++ b/assets/icons/polkadot/line/Companion Account (in Bridge context).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Connect Wallet_Address.svg b/assets/icons/polkadot/line/Connect Wallet_Address.svg
new file mode 100644
index 00000000..f6e9b4fa
--- /dev/null
+++ b/assets/icons/polkadot/line/Connect Wallet_Address.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Connected.svg b/assets/icons/polkadot/line/Connected.svg
new file mode 100644
index 00000000..573c4ef5
--- /dev/null
+++ b/assets/icons/polkadot/line/Connected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Connection Via Light Node.svg b/assets/icons/polkadot/line/Connection Via Light Node.svg
new file mode 100644
index 00000000..c96f6bdf
--- /dev/null
+++ b/assets/icons/polkadot/line/Connection Via Light Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Connection Via Remote Node.svg b/assets/icons/polkadot/line/Connection Via Remote Node.svg
new file mode 100644
index 00000000..d61052f4
--- /dev/null
+++ b/assets/icons/polkadot/line/Connection Via Remote Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Consensus.svg b/assets/icons/polkadot/line/Consensus.svg
new file mode 100644
index 00000000..14edb247
--- /dev/null
+++ b/assets/icons/polkadot/line/Consensus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Contract.svg b/assets/icons/polkadot/line/Contract.svg
new file mode 100644
index 00000000..798c1bdf
--- /dev/null
+++ b/assets/icons/polkadot/line/Contract.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cooling Period.svg b/assets/icons/polkadot/line/Cooling Period.svg
new file mode 100644
index 00000000..abe7a3c5
--- /dev/null
+++ b/assets/icons/polkadot/line/Cooling Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Copy _ Paste.svg b/assets/icons/polkadot/line/Copy _ Paste.svg
new file mode 100644
index 00000000..474d3012
--- /dev/null
+++ b/assets/icons/polkadot/line/Copy _ Paste.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Costly To Maintain.svg b/assets/icons/polkadot/line/Costly To Maintain.svg
new file mode 100644
index 00000000..4de82f7e
--- /dev/null
+++ b/assets/icons/polkadot/line/Costly To Maintain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Council.svg b/assets/icons/polkadot/line/Council.svg
new file mode 100644
index 00000000..4336c1db
--- /dev/null
+++ b/assets/icons/polkadot/line/Council.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Countdown.svg b/assets/icons/polkadot/line/Countdown.svg
new file mode 100644
index 00000000..49e87711
--- /dev/null
+++ b/assets/icons/polkadot/line/Countdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Create New From Source.svg b/assets/icons/polkadot/line/Create New From Source.svg
new file mode 100644
index 00000000..4527e980
--- /dev/null
+++ b/assets/icons/polkadot/line/Create New From Source.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cross-Chain Application.svg b/assets/icons/polkadot/line/Cross-Chain Application.svg
new file mode 100644
index 00000000..852e28dc
--- /dev/null
+++ b/assets/icons/polkadot/line/Cross-Chain Application.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cross-Chain Certification.svg b/assets/icons/polkadot/line/Cross-Chain Certification.svg
new file mode 100644
index 00000000..10dfe874
--- /dev/null
+++ b/assets/icons/polkadot/line/Cross-Chain Certification.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cross-Chain Transfers.svg b/assets/icons/polkadot/line/Cross-Chain Transfers.svg
new file mode 100644
index 00000000..d277d318
--- /dev/null
+++ b/assets/icons/polkadot/line/Cross-Chain Transfers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cross-Chain.svg b/assets/icons/polkadot/line/Cross-Chain.svg
new file mode 100644
index 00000000..17d77478
--- /dev/null
+++ b/assets/icons/polkadot/line/Cross-Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Crowdloans.svg b/assets/icons/polkadot/line/Crowdloans.svg
new file mode 100644
index 00000000..93c0b349
--- /dev/null
+++ b/assets/icons/polkadot/line/Crowdloans.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Cryptocurrency.svg b/assets/icons/polkadot/line/Cryptocurrency.svg
new file mode 100644
index 00000000..9fe48c1a
--- /dev/null
+++ b/assets/icons/polkadot/line/Cryptocurrency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Customisation.svg b/assets/icons/polkadot/line/Customisation.svg
new file mode 100644
index 00000000..29e6f8c5
--- /dev/null
+++ b/assets/icons/polkadot/line/Customisation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/DAOs.svg b/assets/icons/polkadot/line/DAOs.svg
new file mode 100644
index 00000000..3e23d6da
--- /dev/null
+++ b/assets/icons/polkadot/line/DAOs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/DEX.svg b/assets/icons/polkadot/line/DEX.svg
new file mode 100644
index 00000000..036953ef
--- /dev/null
+++ b/assets/icons/polkadot/line/DEX.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Dapps.svg b/assets/icons/polkadot/line/Dapps.svg
new file mode 100644
index 00000000..9db16584
--- /dev/null
+++ b/assets/icons/polkadot/line/Dapps.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Data & Analytics.svg b/assets/icons/polkadot/line/Data & Analytics.svg
new file mode 100644
index 00000000..aa9e2cb0
--- /dev/null
+++ b/assets/icons/polkadot/line/Data & Analytics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Day_Light Mode.svg b/assets/icons/polkadot/line/Day_Light Mode.svg
new file mode 100644
index 00000000..50b4c80f
--- /dev/null
+++ b/assets/icons/polkadot/line/Day_Light Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/DeFi.svg b/assets/icons/polkadot/line/DeFi.svg
new file mode 100644
index 00000000..12c9a2d8
--- /dev/null
+++ b/assets/icons/polkadot/line/DeFi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Decentralised File Storage.svg b/assets/icons/polkadot/line/Decentralised File Storage.svg
new file mode 100644
index 00000000..6c1821b5
--- /dev/null
+++ b/assets/icons/polkadot/line/Decentralised File Storage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Delete_Cancel.svg b/assets/icons/polkadot/line/Delete_Cancel.svg
new file mode 100644
index 00000000..4f3dce41
--- /dev/null
+++ b/assets/icons/polkadot/line/Delete_Cancel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Democracy.svg b/assets/icons/polkadot/line/Democracy.svg
new file mode 100644
index 00000000..8311f6f6
--- /dev/null
+++ b/assets/icons/polkadot/line/Democracy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Deposit.svg b/assets/icons/polkadot/line/Deposit.svg
new file mode 100644
index 00000000..604f1ddc
--- /dev/null
+++ b/assets/icons/polkadot/line/Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Derivation Path.svg b/assets/icons/polkadot/line/Derivation Path.svg
new file mode 100644
index 00000000..9c7f7163
--- /dev/null
+++ b/assets/icons/polkadot/line/Derivation Path.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Derive An Address.svg b/assets/icons/polkadot/line/Derive An Address.svg
new file mode 100644
index 00000000..e04b5da2
--- /dev/null
+++ b/assets/icons/polkadot/line/Derive An Address.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Derive Key Pair.svg b/assets/icons/polkadot/line/Derive Key Pair.svg
new file mode 100644
index 00000000..b34b1367
--- /dev/null
+++ b/assets/icons/polkadot/line/Derive Key Pair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Disconnected.svg b/assets/icons/polkadot/line/Disconnected.svg
new file mode 100644
index 00000000..aeb1c115
--- /dev/null
+++ b/assets/icons/polkadot/line/Disconnected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Distributed File Storage.svg b/assets/icons/polkadot/line/Distributed File Storage.svg
new file mode 100644
index 00000000..d2128aea
--- /dev/null
+++ b/assets/icons/polkadot/line/Distributed File Storage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Documentations.svg b/assets/icons/polkadot/line/Documentations.svg
new file mode 100644
index 00000000..48db6f52
--- /dev/null
+++ b/assets/icons/polkadot/line/Documentations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Download.svg b/assets/icons/polkadot/line/Download.svg
new file mode 100644
index 00000000..714a30a5
--- /dev/null
+++ b/assets/icons/polkadot/line/Download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Draw.svg b/assets/icons/polkadot/line/Draw.svg
new file mode 100644
index 00000000..6c4d1fde
--- /dev/null
+++ b/assets/icons/polkadot/line/Draw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Drip.svg b/assets/icons/polkadot/line/Drip.svg
new file mode 100644
index 00000000..09c49e63
--- /dev/null
+++ b/assets/icons/polkadot/line/Drip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Dropdown Up.svg b/assets/icons/polkadot/line/Dropdown Up.svg
new file mode 100644
index 00000000..7f51aede
--- /dev/null
+++ b/assets/icons/polkadot/line/Dropdown Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Dropdown.svg b/assets/icons/polkadot/line/Dropdown.svg
new file mode 100644
index 00000000..17c1a46e
--- /dev/null
+++ b/assets/icons/polkadot/line/Dropdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Ecosystem Provisions.svg b/assets/icons/polkadot/line/Ecosystem Provisions.svg
new file mode 100644
index 00000000..07a009ba
--- /dev/null
+++ b/assets/icons/polkadot/line/Ecosystem Provisions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Ecosystem.svg b/assets/icons/polkadot/line/Ecosystem.svg
new file mode 100644
index 00000000..7e041ed8
--- /dev/null
+++ b/assets/icons/polkadot/line/Ecosystem.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Edit-Off.svg b/assets/icons/polkadot/line/Edit-Off.svg
new file mode 100644
index 00000000..05450ad3
--- /dev/null
+++ b/assets/icons/polkadot/line/Edit-Off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Edit-On.svg b/assets/icons/polkadot/line/Edit-On.svg
new file mode 100644
index 00000000..4ba03b68
--- /dev/null
+++ b/assets/icons/polkadot/line/Edit-On.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Elections.svg b/assets/icons/polkadot/line/Elections.svg
new file mode 100644
index 00000000..669e7af5
--- /dev/null
+++ b/assets/icons/polkadot/line/Elections.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Email.svg b/assets/icons/polkadot/line/Email.svg
new file mode 100644
index 00000000..c93e32fa
--- /dev/null
+++ b/assets/icons/polkadot/line/Email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Encryption.svg b/assets/icons/polkadot/line/Encryption.svg
new file mode 100644
index 00000000..45bcde6a
--- /dev/null
+++ b/assets/icons/polkadot/line/Encryption.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Ending Period.svg b/assets/icons/polkadot/line/Ending Period.svg
new file mode 100644
index 00000000..e45a6462
--- /dev/null
+++ b/assets/icons/polkadot/line/Ending Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Energy Deficiency.svg b/assets/icons/polkadot/line/Energy Deficiency.svg
new file mode 100644
index 00000000..787818b4
--- /dev/null
+++ b/assets/icons/polkadot/line/Energy Deficiency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Energy Efficiency.svg b/assets/icons/polkadot/line/Energy Efficiency.svg
new file mode 100644
index 00000000..40c69fe2
--- /dev/null
+++ b/assets/icons/polkadot/line/Energy Efficiency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Energy.svg b/assets/icons/polkadot/line/Energy.svg
new file mode 100644
index 00000000..80701add
--- /dev/null
+++ b/assets/icons/polkadot/line/Energy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Enterprise.svg b/assets/icons/polkadot/line/Enterprise.svg
new file mode 100644
index 00000000..b02958b4
--- /dev/null
+++ b/assets/icons/polkadot/line/Enterprise.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Error.svg b/assets/icons/polkadot/line/Error.svg
new file mode 100644
index 00000000..0c7ac72a
--- /dev/null
+++ b/assets/icons/polkadot/line/Error.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Eve.svg b/assets/icons/polkadot/line/Eve.svg
new file mode 100644
index 00000000..bd901f2e
--- /dev/null
+++ b/assets/icons/polkadot/line/Eve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Events.svg b/assets/icons/polkadot/line/Events.svg
new file mode 100644
index 00000000..5d76d90c
--- /dev/null
+++ b/assets/icons/polkadot/line/Events.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Existential Deposit.svg b/assets/icons/polkadot/line/Existential Deposit.svg
new file mode 100644
index 00000000..5cdda962
--- /dev/null
+++ b/assets/icons/polkadot/line/Existential Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Export (M,L).svg b/assets/icons/polkadot/line/Export (M,L).svg
new file mode 100644
index 00000000..037a25ef
--- /dev/null
+++ b/assets/icons/polkadot/line/Export (M,L).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Export (XS,S).svg b/assets/icons/polkadot/line/Export (XS,S).svg
new file mode 100644
index 00000000..91768f25
--- /dev/null
+++ b/assets/icons/polkadot/line/Export (XS,S).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Extension.svg b/assets/icons/polkadot/line/Extension.svg
new file mode 100644
index 00000000..7cf63d30
--- /dev/null
+++ b/assets/icons/polkadot/line/Extension.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Favorite To-Be.svg b/assets/icons/polkadot/line/Favorite To-Be.svg
new file mode 100644
index 00000000..42597465
--- /dev/null
+++ b/assets/icons/polkadot/line/Favorite To-Be.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Favorite.svg b/assets/icons/polkadot/line/Favorite.svg
new file mode 100644
index 00000000..22de1107
--- /dev/null
+++ b/assets/icons/polkadot/line/Favorite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Feeless.svg b/assets/icons/polkadot/line/Feeless.svg
new file mode 100644
index 00000000..5458f705
--- /dev/null
+++ b/assets/icons/polkadot/line/Feeless.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Fees.svg b/assets/icons/polkadot/line/Fees.svg
new file mode 100644
index 00000000..ab4523d7
--- /dev/null
+++ b/assets/icons/polkadot/line/Fees.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Fiat.svg b/assets/icons/polkadot/line/Fiat.svg
new file mode 100644
index 00000000..107e7b01
--- /dev/null
+++ b/assets/icons/polkadot/line/Fiat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Filter.svg b/assets/icons/polkadot/line/Filter.svg
new file mode 100644
index 00000000..0092bc16
--- /dev/null
+++ b/assets/icons/polkadot/line/Filter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Finances.svg b/assets/icons/polkadot/line/Finances.svg
new file mode 100644
index 00000000..cd71e9e6
--- /dev/null
+++ b/assets/icons/polkadot/line/Finances.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Fork.svg b/assets/icons/polkadot/line/Fork.svg
new file mode 100644
index 00000000..a53598e7
--- /dev/null
+++ b/assets/icons/polkadot/line/Fork.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/ForklessUpgrades.svg b/assets/icons/polkadot/line/ForklessUpgrades.svg
new file mode 100644
index 00000000..b8f39298
--- /dev/null
+++ b/assets/icons/polkadot/line/ForklessUpgrades.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Full Node.svg b/assets/icons/polkadot/line/Full Node.svg
new file mode 100644
index 00000000..ecd39e75
--- /dev/null
+++ b/assets/icons/polkadot/line/Full Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Fund Account.svg b/assets/icons/polkadot/line/Fund Account.svg
new file mode 100644
index 00000000..bbc3696c
--- /dev/null
+++ b/assets/icons/polkadot/line/Fund Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Fund Savings.svg b/assets/icons/polkadot/line/Fund Savings.svg
new file mode 100644
index 00000000..a6345cf9
--- /dev/null
+++ b/assets/icons/polkadot/line/Fund Savings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Gaming.svg b/assets/icons/polkadot/line/Gaming.svg
new file mode 100644
index 00000000..97211371
--- /dev/null
+++ b/assets/icons/polkadot/line/Gaming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Genesis.svg b/assets/icons/polkadot/line/Genesis.svg
new file mode 100644
index 00000000..6be683e6
--- /dev/null
+++ b/assets/icons/polkadot/line/Genesis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Gift.svg b/assets/icons/polkadot/line/Gift.svg
new file mode 100644
index 00000000..700dfffb
--- /dev/null
+++ b/assets/icons/polkadot/line/Gift.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Glossary.svg b/assets/icons/polkadot/line/Glossary.svg
new file mode 100644
index 00000000..dc0b73c4
--- /dev/null
+++ b/assets/icons/polkadot/line/Glossary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Go.svg b/assets/icons/polkadot/line/Go.svg
new file mode 100644
index 00000000..9ba08f25
--- /dev/null
+++ b/assets/icons/polkadot/line/Go.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Governance.svg b/assets/icons/polkadot/line/Governance.svg
new file mode 100644
index 00000000..94364f8f
--- /dev/null
+++ b/assets/icons/polkadot/line/Governance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Governments.svg b/assets/icons/polkadot/line/Governments.svg
new file mode 100644
index 00000000..ea445d61
--- /dev/null
+++ b/assets/icons/polkadot/line/Governments.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Hackathon.svg b/assets/icons/polkadot/line/Hackathon.svg
new file mode 100644
index 00000000..845b5184
--- /dev/null
+++ b/assets/icons/polkadot/line/Hackathon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Hash Function.svg b/assets/icons/polkadot/line/Hash Function.svg
new file mode 100644
index 00000000..993eb00c
--- /dev/null
+++ b/assets/icons/polkadot/line/Hash Function.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Healthcare.svg b/assets/icons/polkadot/line/Healthcare.svg
new file mode 100644
index 00000000..50915d6d
--- /dev/null
+++ b/assets/icons/polkadot/line/Healthcare.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Help.svg b/assets/icons/polkadot/line/Help.svg
new file mode 100644
index 00000000..9516994f
--- /dev/null
+++ b/assets/icons/polkadot/line/Help.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Heterogeneous Sharding.svg b/assets/icons/polkadot/line/Heterogeneous Sharding.svg
new file mode 100644
index 00000000..c36fa883
--- /dev/null
+++ b/assets/icons/polkadot/line/Heterogeneous Sharding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Identify.svg b/assets/icons/polkadot/line/Identify.svg
new file mode 100644
index 00000000..eee4bf28
--- /dev/null
+++ b/assets/icons/polkadot/line/Identify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Identity.svg b/assets/icons/polkadot/line/Identity.svg
new file mode 100644
index 00000000..a172c9f5
--- /dev/null
+++ b/assets/icons/polkadot/line/Identity.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Import Token.svg b/assets/icons/polkadot/line/Import Token.svg
new file mode 100644
index 00000000..1bcd3a53
--- /dev/null
+++ b/assets/icons/polkadot/line/Import Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Indeterminate _ Negative.svg b/assets/icons/polkadot/line/Indeterminate _ Negative.svg
new file mode 100644
index 00000000..55bf9972
--- /dev/null
+++ b/assets/icons/polkadot/line/Indeterminate _ Negative.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Informational.svg b/assets/icons/polkadot/line/Informational.svg
new file mode 100644
index 00000000..f8eea970
--- /dev/null
+++ b/assets/icons/polkadot/line/Informational.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Infrastructure.svg b/assets/icons/polkadot/line/Infrastructure.svg
new file mode 100644
index 00000000..004ce9a1
--- /dev/null
+++ b/assets/icons/polkadot/line/Infrastructure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Injected Account.svg b/assets/icons/polkadot/line/Injected Account.svg
new file mode 100644
index 00000000..d72c17e9
--- /dev/null
+++ b/assets/icons/polkadot/line/Injected Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Interconnected.svg b/assets/icons/polkadot/line/Interconnected.svg
new file mode 100644
index 00000000..27e774b7
--- /dev/null
+++ b/assets/icons/polkadot/line/Interconnected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Interoperability.svg b/assets/icons/polkadot/line/Interoperability.svg
new file mode 100644
index 00000000..a9f81a5a
--- /dev/null
+++ b/assets/icons/polkadot/line/Interoperability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Investors.svg b/assets/icons/polkadot/line/Investors.svg
new file mode 100644
index 00000000..694d0b36
--- /dev/null
+++ b/assets/icons/polkadot/line/Investors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/IoT And Robotics.svg b/assets/icons/polkadot/line/IoT And Robotics.svg
new file mode 100644
index 00000000..b076c410
--- /dev/null
+++ b/assets/icons/polkadot/line/IoT And Robotics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/IoT.svg b/assets/icons/polkadot/line/IoT.svg
new file mode 100644
index 00000000..3757875b
--- /dev/null
+++ b/assets/icons/polkadot/line/IoT.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Isolated.svg b/assets/icons/polkadot/line/Isolated.svg
new file mode 100644
index 00000000..c61484bd
--- /dev/null
+++ b/assets/icons/polkadot/line/Isolated.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/KeepAlive Check.svg b/assets/icons/polkadot/line/KeepAlive Check.svg
new file mode 100644
index 00000000..1248aa49
--- /dev/null
+++ b/assets/icons/polkadot/line/KeepAlive Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Key.svg b/assets/icons/polkadot/line/Key.svg
new file mode 100644
index 00000000..7b79daa2
--- /dev/null
+++ b/assets/icons/polkadot/line/Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Language.svg b/assets/icons/polkadot/line/Language.svg
new file mode 100644
index 00000000..c8daf7e1
--- /dev/null
+++ b/assets/icons/polkadot/line/Language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Layer (Four).svg b/assets/icons/polkadot/line/Layer (Four).svg
new file mode 100644
index 00000000..ee9f4832
--- /dev/null
+++ b/assets/icons/polkadot/line/Layer (Four).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Layer (One).svg b/assets/icons/polkadot/line/Layer (One).svg
new file mode 100644
index 00000000..1ff50f2a
--- /dev/null
+++ b/assets/icons/polkadot/line/Layer (One).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Layer (Three).svg b/assets/icons/polkadot/line/Layer (Three).svg
new file mode 100644
index 00000000..c8da74a2
--- /dev/null
+++ b/assets/icons/polkadot/line/Layer (Three).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Layer (Two).svg b/assets/icons/polkadot/line/Layer (Two).svg
new file mode 100644
index 00000000..312e8aee
--- /dev/null
+++ b/assets/icons/polkadot/line/Layer (Two).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Layer.svg b/assets/icons/polkadot/line/Layer.svg
new file mode 100644
index 00000000..d2d4e6d4
--- /dev/null
+++ b/assets/icons/polkadot/line/Layer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Learn More.svg b/assets/icons/polkadot/line/Learn More.svg
new file mode 100644
index 00000000..0906bc57
--- /dev/null
+++ b/assets/icons/polkadot/line/Learn More.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Learn.svg b/assets/icons/polkadot/line/Learn.svg
new file mode 100644
index 00000000..f54dbf45
--- /dev/null
+++ b/assets/icons/polkadot/line/Learn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Lease Duration.svg b/assets/icons/polkadot/line/Lease Duration.svg
new file mode 100644
index 00000000..dd0f8388
--- /dev/null
+++ b/assets/icons/polkadot/line/Lease Duration.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Library.svg b/assets/icons/polkadot/line/Library.svg
new file mode 100644
index 00000000..a6103e16
--- /dev/null
+++ b/assets/icons/polkadot/line/Library.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Light Node.svg b/assets/icons/polkadot/line/Light Node.svg
new file mode 100644
index 00000000..fdaef6eb
--- /dev/null
+++ b/assets/icons/polkadot/line/Light Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Lights On.svg b/assets/icons/polkadot/line/Lights On.svg
new file mode 100644
index 00000000..5ec3af77
--- /dev/null
+++ b/assets/icons/polkadot/line/Lights On.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Limited Supply.svg b/assets/icons/polkadot/line/Limited Supply.svg
new file mode 100644
index 00000000..997ef629
--- /dev/null
+++ b/assets/icons/polkadot/line/Limited Supply.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/LinkedIn.svg b/assets/icons/polkadot/line/LinkedIn.svg
new file mode 100644
index 00000000..002695a2
--- /dev/null
+++ b/assets/icons/polkadot/line/LinkedIn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Lock.svg b/assets/icons/polkadot/line/Lock.svg
new file mode 100644
index 00000000..af3317af
--- /dev/null
+++ b/assets/icons/polkadot/line/Lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Maintain.svg b/assets/icons/polkadot/line/Maintain.svg
new file mode 100644
index 00000000..ffd69169
--- /dev/null
+++ b/assets/icons/polkadot/line/Maintain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Marketing.svg b/assets/icons/polkadot/line/Marketing.svg
new file mode 100644
index 00000000..3ab53915
--- /dev/null
+++ b/assets/icons/polkadot/line/Marketing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Menu.svg b/assets/icons/polkadot/line/Menu.svg
new file mode 100644
index 00000000..01058006
--- /dev/null
+++ b/assets/icons/polkadot/line/Menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Message.svg b/assets/icons/polkadot/line/Message.svg
new file mode 100644
index 00000000..81c62d5c
--- /dev/null
+++ b/assets/icons/polkadot/line/Message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Metaverse.svg b/assets/icons/polkadot/line/Metaverse.svg
new file mode 100644
index 00000000..b668c9e9
--- /dev/null
+++ b/assets/icons/polkadot/line/Metaverse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Mitigating Mev.svg b/assets/icons/polkadot/line/Mitigating Mev.svg
new file mode 100644
index 00000000..cf78f831
--- /dev/null
+++ b/assets/icons/polkadot/line/Mitigating Mev.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Mobile App.svg b/assets/icons/polkadot/line/Mobile App.svg
new file mode 100644
index 00000000..c4477713
--- /dev/null
+++ b/assets/icons/polkadot/line/Mobile App.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Monitor.svg b/assets/icons/polkadot/line/Monitor.svg
new file mode 100644
index 00000000..410bf322
--- /dev/null
+++ b/assets/icons/polkadot/line/Monitor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/More Horizontal.svg b/assets/icons/polkadot/line/More Horizontal.svg
new file mode 100644
index 00000000..d0a478fc
--- /dev/null
+++ b/assets/icons/polkadot/line/More Horizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/More Menu.svg b/assets/icons/polkadot/line/More Menu.svg
new file mode 100644
index 00000000..55b5de6c
--- /dev/null
+++ b/assets/icons/polkadot/line/More Menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/More Vertical.svg b/assets/icons/polkadot/line/More Vertical.svg
new file mode 100644
index 00000000..b41e94ad
--- /dev/null
+++ b/assets/icons/polkadot/line/More Vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Multichain Smart Contracts.svg b/assets/icons/polkadot/line/Multichain Smart Contracts.svg
new file mode 100644
index 00000000..0ecece74
--- /dev/null
+++ b/assets/icons/polkadot/line/Multichain Smart Contracts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Multichain Treasuries.svg b/assets/icons/polkadot/line/Multichain Treasuries.svg
new file mode 100644
index 00000000..8214a165
--- /dev/null
+++ b/assets/icons/polkadot/line/Multichain Treasuries.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Multisign Account.svg b/assets/icons/polkadot/line/Multisign Account.svg
new file mode 100644
index 00000000..24440b1e
--- /dev/null
+++ b/assets/icons/polkadot/line/Multisign Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Multisign.svg b/assets/icons/polkadot/line/Multisign.svg
new file mode 100644
index 00000000..af9387b9
--- /dev/null
+++ b/assets/icons/polkadot/line/Multisign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/NFT Staking.svg b/assets/icons/polkadot/line/NFT Staking.svg
new file mode 100644
index 00000000..5c8fa33d
--- /dev/null
+++ b/assets/icons/polkadot/line/NFT Staking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Network Is Connected.svg b/assets/icons/polkadot/line/Network Is Connected.svg
new file mode 100644
index 00000000..676a7649
--- /dev/null
+++ b/assets/icons/polkadot/line/Network Is Connected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Network Security Operations.svg b/assets/icons/polkadot/line/Network Security Operations.svg
new file mode 100644
index 00000000..5d40d754
--- /dev/null
+++ b/assets/icons/polkadot/line/Network Security Operations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/New Tab.svg b/assets/icons/polkadot/line/New Tab.svg
new file mode 100644
index 00000000..868591b9
--- /dev/null
+++ b/assets/icons/polkadot/line/New Tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/News.svg b/assets/icons/polkadot/line/News.svg
new file mode 100644
index 00000000..5e104292
--- /dev/null
+++ b/assets/icons/polkadot/line/News.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Nft.svg b/assets/icons/polkadot/line/Nft.svg
new file mode 100644
index 00000000..09f96fbc
--- /dev/null
+++ b/assets/icons/polkadot/line/Nft.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Night_Dark Mode.svg b/assets/icons/polkadot/line/Night_Dark Mode.svg
new file mode 100644
index 00000000..20d507e2
--- /dev/null
+++ b/assets/icons/polkadot/line/Night_Dark Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Node.svg b/assets/icons/polkadot/line/Node.svg
new file mode 100644
index 00000000..e5735391
--- /dev/null
+++ b/assets/icons/polkadot/line/Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Nominating.svg b/assets/icons/polkadot/line/Nominating.svg
new file mode 100644
index 00000000..88207802
--- /dev/null
+++ b/assets/icons/polkadot/line/Nominating.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Nominators.svg b/assets/icons/polkadot/line/Nominators.svg
new file mode 100644
index 00000000..2119b3cd
--- /dev/null
+++ b/assets/icons/polkadot/line/Nominators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Not Able To Upgrade.svg b/assets/icons/polkadot/line/Not Able To Upgrade.svg
new file mode 100644
index 00000000..5904c3ac
--- /dev/null
+++ b/assets/icons/polkadot/line/Not Able To Upgrade.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Not Scalable.svg b/assets/icons/polkadot/line/Not Scalable.svg
new file mode 100644
index 00000000..18b1f5b4
--- /dev/null
+++ b/assets/icons/polkadot/line/Not Scalable.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Notification.svg b/assets/icons/polkadot/line/Notification.svg
new file mode 100644
index 00000000..e815adb5
--- /dev/null
+++ b/assets/icons/polkadot/line/Notification.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Off-Chain Computations.svg b/assets/icons/polkadot/line/Off-Chain Computations.svg
new file mode 100644
index 00000000..c0276598
--- /dev/null
+++ b/assets/icons/polkadot/line/Off-Chain Computations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Offboarding.svg b/assets/icons/polkadot/line/Offboarding.svg
new file mode 100644
index 00000000..de0f82bb
--- /dev/null
+++ b/assets/icons/polkadot/line/Offboarding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/On-Chain Scheduling.svg b/assets/icons/polkadot/line/On-Chain Scheduling.svg
new file mode 100644
index 00000000..d9ee57b2
--- /dev/null
+++ b/assets/icons/polkadot/line/On-Chain Scheduling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Onboarding.svg b/assets/icons/polkadot/line/Onboarding.svg
new file mode 100644
index 00000000..9cf4f12f
--- /dev/null
+++ b/assets/icons/polkadot/line/Onboarding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Oracle.svg b/assets/icons/polkadot/line/Oracle.svg
new file mode 100644
index 00000000..8d90f259
--- /dev/null
+++ b/assets/icons/polkadot/line/Oracle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Oracles.svg b/assets/icons/polkadot/line/Oracles.svg
new file mode 100644
index 00000000..9082b35b
--- /dev/null
+++ b/assets/icons/polkadot/line/Oracles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Overview.svg b/assets/icons/polkadot/line/Overview.svg
new file mode 100644
index 00000000..5b2fc514
--- /dev/null
+++ b/assets/icons/polkadot/line/Overview.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Paper Money.svg b/assets/icons/polkadot/line/Paper Money.svg
new file mode 100644
index 00000000..b46e8f3c
--- /dev/null
+++ b/assets/icons/polkadot/line/Paper Money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Parachains.svg b/assets/icons/polkadot/line/Parachains.svg
new file mode 100644
index 00000000..ba7dd01f
--- /dev/null
+++ b/assets/icons/polkadot/line/Parachains.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Payout.svg b/assets/icons/polkadot/line/Payout.svg
new file mode 100644
index 00000000..e38e43cd
--- /dev/null
+++ b/assets/icons/polkadot/line/Payout.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Picture.svg b/assets/icons/polkadot/line/Picture.svg
new file mode 100644
index 00000000..a3aa5c2d
--- /dev/null
+++ b/assets/icons/polkadot/line/Picture.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Podcasts.svg b/assets/icons/polkadot/line/Podcasts.svg
new file mode 100644
index 00000000..e2c8fbec
--- /dev/null
+++ b/assets/icons/polkadot/line/Podcasts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Privacy.svg b/assets/icons/polkadot/line/Privacy.svg
new file mode 100644
index 00000000..521f3cb2
--- /dev/null
+++ b/assets/icons/polkadot/line/Privacy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Private Key.svg b/assets/icons/polkadot/line/Private Key.svg
new file mode 100644
index 00000000..83f53d53
--- /dev/null
+++ b/assets/icons/polkadot/line/Private Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Proof Of Stake.svg b/assets/icons/polkadot/line/Proof Of Stake.svg
new file mode 100644
index 00000000..4ac0bf4f
--- /dev/null
+++ b/assets/icons/polkadot/line/Proof Of Stake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Proof Of Work.svg b/assets/icons/polkadot/line/Proof Of Work.svg
new file mode 100644
index 00000000..fb4e2f24
--- /dev/null
+++ b/assets/icons/polkadot/line/Proof Of Work.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Proposal.svg b/assets/icons/polkadot/line/Proposal.svg
new file mode 100644
index 00000000..c74c4cca
--- /dev/null
+++ b/assets/icons/polkadot/line/Proposal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Proxy.svg b/assets/icons/polkadot/line/Proxy.svg
new file mode 100644
index 00000000..5da42bdd
--- /dev/null
+++ b/assets/icons/polkadot/line/Proxy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/ProxyAccount.svg b/assets/icons/polkadot/line/ProxyAccount.svg
new file mode 100644
index 00000000..f14c74b5
--- /dev/null
+++ b/assets/icons/polkadot/line/ProxyAccount.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Public Key.svg b/assets/icons/polkadot/line/Public Key.svg
new file mode 100644
index 00000000..be99728f
--- /dev/null
+++ b/assets/icons/polkadot/line/Public Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/QR Code.svg b/assets/icons/polkadot/line/QR Code.svg
new file mode 100644
index 00000000..17359907
--- /dev/null
+++ b/assets/icons/polkadot/line/QR Code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Randomness.svg b/assets/icons/polkadot/line/Randomness.svg
new file mode 100644
index 00000000..43805a0b
--- /dev/null
+++ b/assets/icons/polkadot/line/Randomness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Read Time.svg b/assets/icons/polkadot/line/Read Time.svg
new file mode 100644
index 00000000..7c2496a5
--- /dev/null
+++ b/assets/icons/polkadot/line/Read Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Recover Keys.svg b/assets/icons/polkadot/line/Recover Keys.svg
new file mode 100644
index 00000000..fdeaf363
--- /dev/null
+++ b/assets/icons/polkadot/line/Recover Keys.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Recovery.svg b/assets/icons/polkadot/line/Recovery.svg
new file mode 100644
index 00000000..0618ea71
--- /dev/null
+++ b/assets/icons/polkadot/line/Recovery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Reddit.svg b/assets/icons/polkadot/line/Reddit.svg
new file mode 100644
index 00000000..eb387b14
--- /dev/null
+++ b/assets/icons/polkadot/line/Reddit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Referenda.svg b/assets/icons/polkadot/line/Referenda.svg
new file mode 100644
index 00000000..a522f750
--- /dev/null
+++ b/assets/icons/polkadot/line/Referenda.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Refresh _ Redo.svg b/assets/icons/polkadot/line/Refresh _ Redo.svg
new file mode 100644
index 00000000..a90fc453
--- /dev/null
+++ b/assets/icons/polkadot/line/Refresh _ Redo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Registrars.svg b/assets/icons/polkadot/line/Registrars.svg
new file mode 100644
index 00000000..6d542a9b
--- /dev/null
+++ b/assets/icons/polkadot/line/Registrars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Regulators.svg b/assets/icons/polkadot/line/Regulators.svg
new file mode 100644
index 00000000..7adb8bff
--- /dev/null
+++ b/assets/icons/polkadot/line/Regulators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Relay Chain.svg b/assets/icons/polkadot/line/Relay Chain.svg
new file mode 100644
index 00000000..2e92c4e5
--- /dev/null
+++ b/assets/icons/polkadot/line/Relay Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Remote Node.svg b/assets/icons/polkadot/line/Remote Node.svg
new file mode 100644
index 00000000..168f7d09
--- /dev/null
+++ b/assets/icons/polkadot/line/Remote Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Remove User.svg b/assets/icons/polkadot/line/Remove User.svg
new file mode 100644
index 00000000..cf37c7e7
--- /dev/null
+++ b/assets/icons/polkadot/line/Remove User.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Remove.svg b/assets/icons/polkadot/line/Remove.svg
new file mode 100644
index 00000000..02e2b3d8
--- /dev/null
+++ b/assets/icons/polkadot/line/Remove.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Report.svg b/assets/icons/polkadot/line/Report.svg
new file mode 100644
index 00000000..5b2c4206
--- /dev/null
+++ b/assets/icons/polkadot/line/Report.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Reputation Systems.svg b/assets/icons/polkadot/line/Reputation Systems.svg
new file mode 100644
index 00000000..b48ca917
--- /dev/null
+++ b/assets/icons/polkadot/line/Reputation Systems.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Research.svg b/assets/icons/polkadot/line/Research.svg
new file mode 100644
index 00000000..bef29bf1
--- /dev/null
+++ b/assets/icons/polkadot/line/Research.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Reserve Back Assets.svg b/assets/icons/polkadot/line/Reserve Back Assets.svg
new file mode 100644
index 00000000..920ebd7b
--- /dev/null
+++ b/assets/icons/polkadot/line/Reserve Back Assets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Restore From BackUp.svg b/assets/icons/polkadot/line/Restore From BackUp.svg
new file mode 100644
index 00000000..34b9641d
--- /dev/null
+++ b/assets/icons/polkadot/line/Restore From BackUp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Retail And Ecommerce.svg b/assets/icons/polkadot/line/Retail And Ecommerce.svg
new file mode 100644
index 00000000..ff178454
--- /dev/null
+++ b/assets/icons/polkadot/line/Retail And Ecommerce.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Robust System.svg b/assets/icons/polkadot/line/Robust System.svg
new file mode 100644
index 00000000..2b4eb01e
--- /dev/null
+++ b/assets/icons/polkadot/line/Robust System.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Rust.svg b/assets/icons/polkadot/line/Rust.svg
new file mode 100644
index 00000000..90aed145
--- /dev/null
+++ b/assets/icons/polkadot/line/Rust.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Save.svg b/assets/icons/polkadot/line/Save.svg
new file mode 100644
index 00000000..cb0a5673
--- /dev/null
+++ b/assets/icons/polkadot/line/Save.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Scalability.svg b/assets/icons/polkadot/line/Scalability.svg
new file mode 100644
index 00000000..2ab3552f
--- /dev/null
+++ b/assets/icons/polkadot/line/Scalability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Scale.svg b/assets/icons/polkadot/line/Scale.svg
new file mode 100644
index 00000000..a7b7f0dd
--- /dev/null
+++ b/assets/icons/polkadot/line/Scale.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Scaling.svg b/assets/icons/polkadot/line/Scaling.svg
new file mode 100644
index 00000000..6ad7a570
--- /dev/null
+++ b/assets/icons/polkadot/line/Scaling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Scam Alert.svg b/assets/icons/polkadot/line/Scam Alert.svg
new file mode 100644
index 00000000..918e0335
--- /dev/null
+++ b/assets/icons/polkadot/line/Scam Alert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Search.svg b/assets/icons/polkadot/line/Search.svg
new file mode 100644
index 00000000..ec0a5ec0
--- /dev/null
+++ b/assets/icons/polkadot/line/Search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Second A Proposal.svg b/assets/icons/polkadot/line/Second A Proposal.svg
new file mode 100644
index 00000000..53b1f847
--- /dev/null
+++ b/assets/icons/polkadot/line/Second A Proposal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Secret Part Of The Derivation Path.svg b/assets/icons/polkadot/line/Secret Part Of The Derivation Path.svg
new file mode 100644
index 00000000..af0d122d
--- /dev/null
+++ b/assets/icons/polkadot/line/Secret Part Of The Derivation Path.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Secure Device.svg b/assets/icons/polkadot/line/Secure Device.svg
new file mode 100644
index 00000000..88a82b00
--- /dev/null
+++ b/assets/icons/polkadot/line/Secure Device.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Security Check.svg b/assets/icons/polkadot/line/Security Check.svg
new file mode 100644
index 00000000..4532d5aa
--- /dev/null
+++ b/assets/icons/polkadot/line/Security Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Seed Phrase.svg b/assets/icons/polkadot/line/Seed Phrase.svg
new file mode 100644
index 00000000..c6e8df77
--- /dev/null
+++ b/assets/icons/polkadot/line/Seed Phrase.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Select List Item.svg b/assets/icons/polkadot/line/Select List Item.svg
new file mode 100644
index 00000000..66d3ad0c
--- /dev/null
+++ b/assets/icons/polkadot/line/Select List Item.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Session.svg b/assets/icons/polkadot/line/Session.svg
new file mode 100644
index 00000000..f89cdda7
--- /dev/null
+++ b/assets/icons/polkadot/line/Session.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Settings.svg b/assets/icons/polkadot/line/Settings.svg
new file mode 100644
index 00000000..001886a0
--- /dev/null
+++ b/assets/icons/polkadot/line/Settings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Sharding.svg b/assets/icons/polkadot/line/Sharding.svg
new file mode 100644
index 00000000..216d4c0a
--- /dev/null
+++ b/assets/icons/polkadot/line/Sharding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Share.svg b/assets/icons/polkadot/line/Share.svg
new file mode 100644
index 00000000..52d79c68
--- /dev/null
+++ b/assets/icons/polkadot/line/Share.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Shared Security.svg b/assets/icons/polkadot/line/Shared Security.svg
new file mode 100644
index 00000000..d34e7099
--- /dev/null
+++ b/assets/icons/polkadot/line/Shared Security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Sign A Transaction.svg b/assets/icons/polkadot/line/Sign A Transaction.svg
new file mode 100644
index 00000000..60ebeaa0
--- /dev/null
+++ b/assets/icons/polkadot/line/Sign A Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Sign Specs.svg b/assets/icons/polkadot/line/Sign Specs.svg
new file mode 100644
index 00000000..49cebca8
--- /dev/null
+++ b/assets/icons/polkadot/line/Sign Specs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Sign.svg b/assets/icons/polkadot/line/Sign.svg
new file mode 100644
index 00000000..913191f2
--- /dev/null
+++ b/assets/icons/polkadot/line/Sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Signal.svg b/assets/icons/polkadot/line/Signal.svg
new file mode 100644
index 00000000..85da05b7
--- /dev/null
+++ b/assets/icons/polkadot/line/Signal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Signature.svg b/assets/icons/polkadot/line/Signature.svg
new file mode 100644
index 00000000..60a4d6f0
--- /dev/null
+++ b/assets/icons/polkadot/line/Signature.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Signifier Tab.svg b/assets/icons/polkadot/line/Signifier Tab.svg
new file mode 100644
index 00000000..b24ca4d2
--- /dev/null
+++ b/assets/icons/polkadot/line/Signifier Tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Smart Contract.svg b/assets/icons/polkadot/line/Smart Contract.svg
new file mode 100644
index 00000000..78217ea2
--- /dev/null
+++ b/assets/icons/polkadot/line/Smart Contract.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Social Impact & Humanitarian.svg b/assets/icons/polkadot/line/Social Impact & Humanitarian.svg
new file mode 100644
index 00000000..f6967975
--- /dev/null
+++ b/assets/icons/polkadot/line/Social Impact & Humanitarian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Social Networking.svg b/assets/icons/polkadot/line/Social Networking.svg
new file mode 100644
index 00000000..7eb85c4c
--- /dev/null
+++ b/assets/icons/polkadot/line/Social Networking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Software Development.svg b/assets/icons/polkadot/line/Software Development.svg
new file mode 100644
index 00000000..9e24365d
--- /dev/null
+++ b/assets/icons/polkadot/line/Software Development.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Specialised.svg b/assets/icons/polkadot/line/Specialised.svg
new file mode 100644
index 00000000..772fb026
--- /dev/null
+++ b/assets/icons/polkadot/line/Specialised.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Stablecoin.svg b/assets/icons/polkadot/line/Stablecoin.svg
new file mode 100644
index 00000000..9f072ec4
--- /dev/null
+++ b/assets/icons/polkadot/line/Stablecoin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Stake.svg b/assets/icons/polkadot/line/Stake.svg
new file mode 100644
index 00000000..d544969d
--- /dev/null
+++ b/assets/icons/polkadot/line/Stake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Staking.svg b/assets/icons/polkadot/line/Staking.svg
new file mode 100644
index 00000000..45bf6ca7
--- /dev/null
+++ b/assets/icons/polkadot/line/Staking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Starting Period.svg b/assets/icons/polkadot/line/Starting Period.svg
new file mode 100644
index 00000000..7e74587c
--- /dev/null
+++ b/assets/icons/polkadot/line/Starting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Success.svg b/assets/icons/polkadot/line/Success.svg
new file mode 100644
index 00000000..29198d2c
--- /dev/null
+++ b/assets/icons/polkadot/line/Success.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Supply Chain.svg b/assets/icons/polkadot/line/Supply Chain.svg
new file mode 100644
index 00000000..5ce10c43
--- /dev/null
+++ b/assets/icons/polkadot/line/Supply Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Talent.svg b/assets/icons/polkadot/line/Talent.svg
new file mode 100644
index 00000000..5455f26a
--- /dev/null
+++ b/assets/icons/polkadot/line/Talent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Technical Committee.svg b/assets/icons/polkadot/line/Technical Committee.svg
new file mode 100644
index 00000000..142e320e
--- /dev/null
+++ b/assets/icons/polkadot/line/Technical Committee.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Teleport.svg b/assets/icons/polkadot/line/Teleport.svg
new file mode 100644
index 00000000..2635f5fa
--- /dev/null
+++ b/assets/icons/polkadot/line/Teleport.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Testnet Token.svg b/assets/icons/polkadot/line/Testnet Token.svg
new file mode 100644
index 00000000..7668789e
--- /dev/null
+++ b/assets/icons/polkadot/line/Testnet Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Thumbs Down.svg b/assets/icons/polkadot/line/Thumbs Down.svg
new file mode 100644
index 00000000..1061c5f1
--- /dev/null
+++ b/assets/icons/polkadot/line/Thumbs Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Thumbs Up.svg b/assets/icons/polkadot/line/Thumbs Up.svg
new file mode 100644
index 00000000..7230d76b
--- /dev/null
+++ b/assets/icons/polkadot/line/Thumbs Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Time.svg b/assets/icons/polkadot/line/Time.svg
new file mode 100644
index 00000000..510c4f18
--- /dev/null
+++ b/assets/icons/polkadot/line/Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Token Holders.svg b/assets/icons/polkadot/line/Token Holders.svg
new file mode 100644
index 00000000..2a8ab669
--- /dev/null
+++ b/assets/icons/polkadot/line/Token Holders.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Token.svg b/assets/icons/polkadot/line/Token.svg
new file mode 100644
index 00000000..02d2a25f
--- /dev/null
+++ b/assets/icons/polkadot/line/Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Tools.svg b/assets/icons/polkadot/line/Tools.svg
new file mode 100644
index 00000000..27025388
--- /dev/null
+++ b/assets/icons/polkadot/line/Tools.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Transaction.svg b/assets/icons/polkadot/line/Transaction.svg
new file mode 100644
index 00000000..e4747597
--- /dev/null
+++ b/assets/icons/polkadot/line/Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Translate.svg b/assets/icons/polkadot/line/Translate.svg
new file mode 100644
index 00000000..230aefd4
--- /dev/null
+++ b/assets/icons/polkadot/line/Translate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Transparency.svg b/assets/icons/polkadot/line/Transparency.svg
new file mode 100644
index 00000000..8f986197
--- /dev/null
+++ b/assets/icons/polkadot/line/Transparency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Treasury.svg b/assets/icons/polkadot/line/Treasury.svg
new file mode 100644
index 00000000..cfd0eef0
--- /dev/null
+++ b/assets/icons/polkadot/line/Treasury.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Twitter.svg b/assets/icons/polkadot/line/Twitter.svg
new file mode 100644
index 00000000..1f9013c2
--- /dev/null
+++ b/assets/icons/polkadot/line/Twitter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Ui.svg b/assets/icons/polkadot/line/Ui.svg
new file mode 100644
index 00000000..eb1180c0
--- /dev/null
+++ b/assets/icons/polkadot/line/Ui.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Unbond.svg b/assets/icons/polkadot/line/Unbond.svg
new file mode 100644
index 00000000..20178848
--- /dev/null
+++ b/assets/icons/polkadot/line/Unbond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Unchecked.svg b/assets/icons/polkadot/line/Unchecked.svg
new file mode 100644
index 00000000..00df8c5a
--- /dev/null
+++ b/assets/icons/polkadot/line/Unchecked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Unlock.svg b/assets/icons/polkadot/line/Unlock.svg
new file mode 100644
index 00000000..d272ef5e
--- /dev/null
+++ b/assets/icons/polkadot/line/Unlock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Unstake.svg b/assets/icons/polkadot/line/Unstake.svg
new file mode 100644
index 00000000..b4003b94
--- /dev/null
+++ b/assets/icons/polkadot/line/Unstake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Upgrade.svg b/assets/icons/polkadot/line/Upgrade.svg
new file mode 100644
index 00000000..c726b1dc
--- /dev/null
+++ b/assets/icons/polkadot/line/Upgrade.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Use Cases.svg b/assets/icons/polkadot/line/Use Cases.svg
new file mode 100644
index 00000000..c2ab4bc5
--- /dev/null
+++ b/assets/icons/polkadot/line/Use Cases.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Users.svg b/assets/icons/polkadot/line/Users.svg
new file mode 100644
index 00000000..7f21daa9
--- /dev/null
+++ b/assets/icons/polkadot/line/Users.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Utility.svg b/assets/icons/polkadot/line/Utility.svg
new file mode 100644
index 00000000..4a399fc2
--- /dev/null
+++ b/assets/icons/polkadot/line/Utility.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Ux.svg b/assets/icons/polkadot/line/Ux.svg
new file mode 100644
index 00000000..7d8e5045
--- /dev/null
+++ b/assets/icons/polkadot/line/Ux.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Validators.svg b/assets/icons/polkadot/line/Validators.svg
new file mode 100644
index 00000000..dd035752
--- /dev/null
+++ b/assets/icons/polkadot/line/Validators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Value Bearing Token.svg b/assets/icons/polkadot/line/Value Bearing Token.svg
new file mode 100644
index 00000000..6b2f8939
--- /dev/null
+++ b/assets/icons/polkadot/line/Value Bearing Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Verified Account.svg b/assets/icons/polkadot/line/Verified Account.svg
new file mode 100644
index 00000000..6f7b1634
--- /dev/null
+++ b/assets/icons/polkadot/line/Verified Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Verified Signed.svg b/assets/icons/polkadot/line/Verified Signed.svg
new file mode 100644
index 00000000..bf91f036
--- /dev/null
+++ b/assets/icons/polkadot/line/Verified Signed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Verify.svg b/assets/icons/polkadot/line/Verify.svg
new file mode 100644
index 00000000..4abb7b8a
--- /dev/null
+++ b/assets/icons/polkadot/line/Verify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Version.svg b/assets/icons/polkadot/line/Version.svg
new file mode 100644
index 00000000..b415ffe1
--- /dev/null
+++ b/assets/icons/polkadot/line/Version.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Vesting Period.svg b/assets/icons/polkadot/line/Vesting Period.svg
new file mode 100644
index 00000000..7a99c45e
--- /dev/null
+++ b/assets/icons/polkadot/line/Vesting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Vesting.svg b/assets/icons/polkadot/line/Vesting.svg
new file mode 100644
index 00000000..f60491cf
--- /dev/null
+++ b/assets/icons/polkadot/line/Vesting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Video Pause.svg b/assets/icons/polkadot/line/Video Pause.svg
new file mode 100644
index 00000000..f640f571
--- /dev/null
+++ b/assets/icons/polkadot/line/Video Pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Video Play.svg b/assets/icons/polkadot/line/Video Play.svg
new file mode 100644
index 00000000..9c3e0fca
--- /dev/null
+++ b/assets/icons/polkadot/line/Video Play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Video.svg b/assets/icons/polkadot/line/Video.svg
new file mode 100644
index 00000000..c106a141
--- /dev/null
+++ b/assets/icons/polkadot/line/Video.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Videos.svg b/assets/icons/polkadot/line/Videos.svg
new file mode 100644
index 00000000..91cf84d1
--- /dev/null
+++ b/assets/icons/polkadot/line/Videos.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Vote.svg b/assets/icons/polkadot/line/Vote.svg
new file mode 100644
index 00000000..9fd80096
--- /dev/null
+++ b/assets/icons/polkadot/line/Vote.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Voting Period.svg b/assets/icons/polkadot/line/Voting Period.svg
new file mode 100644
index 00000000..024503e8
--- /dev/null
+++ b/assets/icons/polkadot/line/Voting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Wallet Deposit.svg b/assets/icons/polkadot/line/Wallet Deposit.svg
new file mode 100644
index 00000000..3b58c8dd
--- /dev/null
+++ b/assets/icons/polkadot/line/Wallet Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Wallet Withdraw.svg b/assets/icons/polkadot/line/Wallet Withdraw.svg
new file mode 100644
index 00000000..18dc2bbe
--- /dev/null
+++ b/assets/icons/polkadot/line/Wallet Withdraw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Wallet.svg b/assets/icons/polkadot/line/Wallet.svg
new file mode 100644
index 00000000..e68fc2a8
--- /dev/null
+++ b/assets/icons/polkadot/line/Wallet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Wallets.svg b/assets/icons/polkadot/line/Wallets.svg
new file mode 100644
index 00000000..40ffa30c
--- /dev/null
+++ b/assets/icons/polkadot/line/Wallets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Wasm.svg b/assets/icons/polkadot/line/Wasm.svg
new file mode 100644
index 00000000..9c1a08b8
--- /dev/null
+++ b/assets/icons/polkadot/line/Wasm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Web3.svg b/assets/icons/polkadot/line/Web3.svg
new file mode 100644
index 00000000..bc47f792
--- /dev/null
+++ b/assets/icons/polkadot/line/Web3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Whitepaper Download.svg b/assets/icons/polkadot/line/Whitepaper Download.svg
new file mode 100644
index 00000000..bfa896b3
--- /dev/null
+++ b/assets/icons/polkadot/line/Whitepaper Download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Whitepaper Upload.svg b/assets/icons/polkadot/line/Whitepaper Upload.svg
new file mode 100644
index 00000000..c82da475
--- /dev/null
+++ b/assets/icons/polkadot/line/Whitepaper Upload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Whitepaper.svg b/assets/icons/polkadot/line/Whitepaper.svg
new file mode 100644
index 00000000..8c16979c
--- /dev/null
+++ b/assets/icons/polkadot/line/Whitepaper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/WiFi Off.svg b/assets/icons/polkadot/line/WiFi Off.svg
new file mode 100644
index 00000000..7e9beeda
--- /dev/null
+++ b/assets/icons/polkadot/line/WiFi Off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/WiFi.svg b/assets/icons/polkadot/line/WiFi.svg
new file mode 100644
index 00000000..debd659a
--- /dev/null
+++ b/assets/icons/polkadot/line/WiFi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Wiki.svg b/assets/icons/polkadot/line/Wiki.svg
new file mode 100644
index 00000000..5bdfba6c
--- /dev/null
+++ b/assets/icons/polkadot/line/Wiki.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Withdraw.svg b/assets/icons/polkadot/line/Withdraw.svg
new file mode 100644
index 00000000..c704e7fb
--- /dev/null
+++ b/assets/icons/polkadot/line/Withdraw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Workshop.svg b/assets/icons/polkadot/line/Workshop.svg
new file mode 100644
index 00000000..39610ada
--- /dev/null
+++ b/assets/icons/polkadot/line/Workshop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/XCM (Message).svg b/assets/icons/polkadot/line/XCM (Message).svg
new file mode 100644
index 00000000..31e1c373
--- /dev/null
+++ b/assets/icons/polkadot/line/XCM (Message).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/line/Youtube.svg b/assets/icons/polkadot/line/Youtube.svg
new file mode 100644
index 00000000..9b5db360
--- /dev/null
+++ b/assets/icons/polkadot/line/Youtube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/AI & Computing.svg b/assets/icons/polkadot/solid/AI & Computing.svg
new file mode 100644
index 00000000..8929dd02
--- /dev/null
+++ b/assets/icons/polkadot/solid/AI & Computing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Account Portability.svg b/assets/icons/polkadot/solid/Account Portability.svg
new file mode 100644
index 00000000..34f10cf8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Account Portability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Action Left.svg b/assets/icons/polkadot/solid/Action Left.svg
new file mode 100644
index 00000000..0f07205e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Action Left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Action Right.svg b/assets/icons/polkadot/solid/Action Right.svg
new file mode 100644
index 00000000..3a2d7bbe
--- /dev/null
+++ b/assets/icons/polkadot/solid/Action Right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Add key pair.svg b/assets/icons/polkadot/solid/Add key pair.svg
new file mode 100644
index 00000000..011cac4c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Add key pair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Add user.svg b/assets/icons/polkadot/solid/Add user.svg
new file mode 100644
index 00000000..e25f2b84
--- /dev/null
+++ b/assets/icons/polkadot/solid/Add user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Add.svg b/assets/icons/polkadot/solid/Add.svg
new file mode 100644
index 00000000..b805ec68
--- /dev/null
+++ b/assets/icons/polkadot/solid/Add.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Address book.svg b/assets/icons/polkadot/solid/Address book.svg
new file mode 100644
index 00000000..ea216c0b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Address book.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Airplane Mode.svg b/assets/icons/polkadot/solid/Airplane Mode.svg
new file mode 100644
index 00000000..1e8b0f37
--- /dev/null
+++ b/assets/icons/polkadot/solid/Airplane Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Alert.svg b/assets/icons/polkadot/solid/Alert.svg
new file mode 100644
index 00000000..1c21a678
--- /dev/null
+++ b/assets/icons/polkadot/solid/Alert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Algorithm.svg b/assets/icons/polkadot/solid/Algorithm.svg
new file mode 100644
index 00000000..1af4b3fc
--- /dev/null
+++ b/assets/icons/polkadot/solid/Algorithm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Alice.svg b/assets/icons/polkadot/solid/Alice.svg
new file mode 100644
index 00000000..194be375
--- /dev/null
+++ b/assets/icons/polkadot/solid/Alice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Ambassadors.svg b/assets/icons/polkadot/solid/Ambassadors.svg
new file mode 100644
index 00000000..ac679ccf
--- /dev/null
+++ b/assets/icons/polkadot/solid/Ambassadors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Announcement.svg b/assets/icons/polkadot/solid/Announcement.svg
new file mode 100644
index 00000000..bdf196de
--- /dev/null
+++ b/assets/icons/polkadot/solid/Announcement.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Anonymous Proxy.svg b/assets/icons/polkadot/solid/Anonymous Proxy.svg
new file mode 100644
index 00000000..d011bee5
--- /dev/null
+++ b/assets/icons/polkadot/solid/Anonymous Proxy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Arbitrary Message.svg b/assets/icons/polkadot/solid/Arbitrary Message.svg
new file mode 100644
index 00000000..1c50ce9f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Arbitrary Message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Archive Node.svg b/assets/icons/polkadot/solid/Archive Node.svg
new file mode 100644
index 00000000..59db2271
--- /dev/null
+++ b/assets/icons/polkadot/solid/Archive Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Arrow Back.svg b/assets/icons/polkadot/solid/Arrow Back.svg
new file mode 100644
index 00000000..b3a0060e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Arrow Back.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Arrow Down.svg b/assets/icons/polkadot/solid/Arrow Down.svg
new file mode 100644
index 00000000..a7269bda
--- /dev/null
+++ b/assets/icons/polkadot/solid/Arrow Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Arrow Left.svg b/assets/icons/polkadot/solid/Arrow Left.svg
new file mode 100644
index 00000000..a5a1ce5c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Arrow Left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Arrow Right.svg b/assets/icons/polkadot/solid/Arrow Right.svg
new file mode 100644
index 00000000..a55a9e97
--- /dev/null
+++ b/assets/icons/polkadot/solid/Arrow Right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Arrow Up.svg b/assets/icons/polkadot/solid/Arrow Up.svg
new file mode 100644
index 00000000..bdd34eab
--- /dev/null
+++ b/assets/icons/polkadot/solid/Arrow Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Article.svg b/assets/icons/polkadot/solid/Article.svg
new file mode 100644
index 00000000..62418f6a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Article.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Attack.svg b/assets/icons/polkadot/solid/Attack.svg
new file mode 100644
index 00000000..1a82c987
--- /dev/null
+++ b/assets/icons/polkadot/solid/Attack.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Auctions.svg b/assets/icons/polkadot/solid/Auctions.svg
new file mode 100644
index 00000000..6f83acf1
--- /dev/null
+++ b/assets/icons/polkadot/solid/Auctions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Authority.svg b/assets/icons/polkadot/solid/Authority.svg
new file mode 100644
index 00000000..3e9d7eaf
--- /dev/null
+++ b/assets/icons/polkadot/solid/Authority.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Back Up.svg b/assets/icons/polkadot/solid/Back Up.svg
new file mode 100644
index 00000000..921325ff
--- /dev/null
+++ b/assets/icons/polkadot/solid/Back Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Balance.svg b/assets/icons/polkadot/solid/Balance.svg
new file mode 100644
index 00000000..8186b29a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Batch Transaction.svg b/assets/icons/polkadot/solid/Batch Transaction.svg
new file mode 100644
index 00000000..47cbb22b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Batch Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Bid.svg b/assets/icons/polkadot/solid/Bid.svg
new file mode 100644
index 00000000..b8c55619
--- /dev/null
+++ b/assets/icons/polkadot/solid/Bid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Block Explorer.svg b/assets/icons/polkadot/solid/Block Explorer.svg
new file mode 100644
index 00000000..8d8047ba
--- /dev/null
+++ b/assets/icons/polkadot/solid/Block Explorer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Block Number.svg b/assets/icons/polkadot/solid/Block Number.svg
new file mode 100644
index 00000000..6efdcbee
--- /dev/null
+++ b/assets/icons/polkadot/solid/Block Number.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Block Search.svg b/assets/icons/polkadot/solid/Block Search.svg
new file mode 100644
index 00000000..889515b8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Block Search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Block.svg b/assets/icons/polkadot/solid/Block.svg
new file mode 100644
index 00000000..d1433e66
--- /dev/null
+++ b/assets/icons/polkadot/solid/Block.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Blockchain.svg b/assets/icons/polkadot/solid/Blockchain.svg
new file mode 100644
index 00000000..4066afe3
--- /dev/null
+++ b/assets/icons/polkadot/solid/Blockchain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Blog Post.svg b/assets/icons/polkadot/solid/Blog Post.svg
new file mode 100644
index 00000000..870506c2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Blog Post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Bob.svg b/assets/icons/polkadot/solid/Bob.svg
new file mode 100644
index 00000000..04647271
--- /dev/null
+++ b/assets/icons/polkadot/solid/Bob.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Bond.svg b/assets/icons/polkadot/solid/Bond.svg
new file mode 100644
index 00000000..605b4cd1
--- /dev/null
+++ b/assets/icons/polkadot/solid/Bond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Bonded Time.svg b/assets/icons/polkadot/solid/Bonded Time.svg
new file mode 100644
index 00000000..a86d7bb9
--- /dev/null
+++ b/assets/icons/polkadot/solid/Bonded Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Boot Node.svg b/assets/icons/polkadot/solid/Boot Node.svg
new file mode 100644
index 00000000..7005e178
--- /dev/null
+++ b/assets/icons/polkadot/solid/Boot Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Bridge.svg b/assets/icons/polkadot/solid/Bridge.svg
new file mode 100644
index 00000000..0b42b604
--- /dev/null
+++ b/assets/icons/polkadot/solid/Bridge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Bridges.svg b/assets/icons/polkadot/solid/Bridges.svg
new file mode 100644
index 00000000..5dfe5854
--- /dev/null
+++ b/assets/icons/polkadot/solid/Bridges.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Build.svg b/assets/icons/polkadot/solid/Build.svg
new file mode 100644
index 00000000..c92d599a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Build.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Builders _ Developers.svg b/assets/icons/polkadot/solid/Builders _ Developers.svg
new file mode 100644
index 00000000..758dfc8e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Builders _ Developers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Built-in Security.svg b/assets/icons/polkadot/solid/Built-in Security.svg
new file mode 100644
index 00000000..d15eee00
--- /dev/null
+++ b/assets/icons/polkadot/solid/Built-in Security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Burn.svg b/assets/icons/polkadot/solid/Burn.svg
new file mode 100644
index 00000000..922c273e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Burn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/C++.svg b/assets/icons/polkadot/solid/C++.svg
new file mode 100644
index 00000000..6d9d7d47
--- /dev/null
+++ b/assets/icons/polkadot/solid/C++.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Calendar.svg b/assets/icons/polkadot/solid/Calendar.svg
new file mode 100644
index 00000000..6f948179
--- /dev/null
+++ b/assets/icons/polkadot/solid/Calendar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Career.svg b/assets/icons/polkadot/solid/Career.svg
new file mode 100644
index 00000000..a198a16d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Career.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Certificate.svg b/assets/icons/polkadot/solid/Certificate.svg
new file mode 100644
index 00000000..e2d6d4b6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Certificate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cex.svg b/assets/icons/polkadot/solid/Cex.svg
new file mode 100644
index 00000000..d5d6658e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cex.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Chain Spec.svg b/assets/icons/polkadot/solid/Chain Spec.svg
new file mode 100644
index 00000000..2a11e309
--- /dev/null
+++ b/assets/icons/polkadot/solid/Chain Spec.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Check.svg b/assets/icons/polkadot/solid/Check.svg
new file mode 100644
index 00000000..41064270
--- /dev/null
+++ b/assets/icons/polkadot/solid/Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Checked.svg b/assets/icons/polkadot/solid/Checked.svg
new file mode 100644
index 00000000..70e6b6f8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Checked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Chevron Down.svg b/assets/icons/polkadot/solid/Chevron Down.svg
new file mode 100644
index 00000000..665f63c6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Chevron Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Chevron Up.svg b/assets/icons/polkadot/solid/Chevron Up.svg
new file mode 100644
index 00000000..695aa064
--- /dev/null
+++ b/assets/icons/polkadot/solid/Chevron Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Claim.svg b/assets/icons/polkadot/solid/Claim.svg
new file mode 100644
index 00000000..4c332126
--- /dev/null
+++ b/assets/icons/polkadot/solid/Claim.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Close.svg b/assets/icons/polkadot/solid/Close.svg
new file mode 100644
index 00000000..f908ffaf
--- /dev/null
+++ b/assets/icons/polkadot/solid/Close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cloud.svg b/assets/icons/polkadot/solid/Cloud.svg
new file mode 100644
index 00000000..4bf65ae2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cloud.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Code.svg b/assets/icons/polkadot/solid/Code.svg
new file mode 100644
index 00000000..44eac3dd
--- /dev/null
+++ b/assets/icons/polkadot/solid/Code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Collapse.svg b/assets/icons/polkadot/solid/Collapse.svg
new file mode 100644
index 00000000..f225431a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Collapse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Collators.svg b/assets/icons/polkadot/solid/Collators.svg
new file mode 100644
index 00000000..d471f754
--- /dev/null
+++ b/assets/icons/polkadot/solid/Collators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Collective.svg b/assets/icons/polkadot/solid/Collective.svg
new file mode 100644
index 00000000..9292c995
--- /dev/null
+++ b/assets/icons/polkadot/solid/Collective.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Communications And Media.svg b/assets/icons/polkadot/solid/Communications And Media.svg
new file mode 100644
index 00000000..1430f2d8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Communications And Media.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Community Events And Outreach.svg b/assets/icons/polkadot/solid/Community Events And Outreach.svg
new file mode 100644
index 00000000..96187925
--- /dev/null
+++ b/assets/icons/polkadot/solid/Community Events And Outreach.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Community.svg b/assets/icons/polkadot/solid/Community.svg
new file mode 100644
index 00000000..3a655499
--- /dev/null
+++ b/assets/icons/polkadot/solid/Community.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Companion Account (in Bridge context).svg b/assets/icons/polkadot/solid/Companion Account (in Bridge context).svg
new file mode 100644
index 00000000..00533485
--- /dev/null
+++ b/assets/icons/polkadot/solid/Companion Account (in Bridge context).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Connect Wallet_Address.svg b/assets/icons/polkadot/solid/Connect Wallet_Address.svg
new file mode 100644
index 00000000..3cd6f674
--- /dev/null
+++ b/assets/icons/polkadot/solid/Connect Wallet_Address.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Connected.svg b/assets/icons/polkadot/solid/Connected.svg
new file mode 100644
index 00000000..68175aac
--- /dev/null
+++ b/assets/icons/polkadot/solid/Connected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Connection Via Light Node.svg b/assets/icons/polkadot/solid/Connection Via Light Node.svg
new file mode 100644
index 00000000..dc21b069
--- /dev/null
+++ b/assets/icons/polkadot/solid/Connection Via Light Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Connection Via Remote Node.svg b/assets/icons/polkadot/solid/Connection Via Remote Node.svg
new file mode 100644
index 00000000..da4e1c18
--- /dev/null
+++ b/assets/icons/polkadot/solid/Connection Via Remote Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Consensus.svg b/assets/icons/polkadot/solid/Consensus.svg
new file mode 100644
index 00000000..02ce5ecc
--- /dev/null
+++ b/assets/icons/polkadot/solid/Consensus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Contract.svg b/assets/icons/polkadot/solid/Contract.svg
new file mode 100644
index 00000000..0d98d07b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Contract.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cooling Period.svg b/assets/icons/polkadot/solid/Cooling Period.svg
new file mode 100644
index 00000000..a788db3f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cooling Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Copy _ Paste.svg b/assets/icons/polkadot/solid/Copy _ Paste.svg
new file mode 100644
index 00000000..c901e801
--- /dev/null
+++ b/assets/icons/polkadot/solid/Copy _ Paste.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Costly To Maintain.svg b/assets/icons/polkadot/solid/Costly To Maintain.svg
new file mode 100644
index 00000000..f7041e9f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Costly To Maintain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Council.svg b/assets/icons/polkadot/solid/Council.svg
new file mode 100644
index 00000000..4a643df7
--- /dev/null
+++ b/assets/icons/polkadot/solid/Council.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Countdown.svg b/assets/icons/polkadot/solid/Countdown.svg
new file mode 100644
index 00000000..aeea2293
--- /dev/null
+++ b/assets/icons/polkadot/solid/Countdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Create New From Source.svg b/assets/icons/polkadot/solid/Create New From Source.svg
new file mode 100644
index 00000000..7e8f1838
--- /dev/null
+++ b/assets/icons/polkadot/solid/Create New From Source.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cross-Chain Application.svg b/assets/icons/polkadot/solid/Cross-Chain Application.svg
new file mode 100644
index 00000000..aef4cf0c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cross-Chain Application.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cross-Chain Certification.svg b/assets/icons/polkadot/solid/Cross-Chain Certification.svg
new file mode 100644
index 00000000..62bcd3d3
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cross-Chain Certification.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cross-Chain Transfers.svg b/assets/icons/polkadot/solid/Cross-Chain Transfers.svg
new file mode 100644
index 00000000..8c3e8206
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cross-Chain Transfers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cross-Chain.svg b/assets/icons/polkadot/solid/Cross-Chain.svg
new file mode 100644
index 00000000..49df5f9c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cross-Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Crowdloans.svg b/assets/icons/polkadot/solid/Crowdloans.svg
new file mode 100644
index 00000000..a4d6c856
--- /dev/null
+++ b/assets/icons/polkadot/solid/Crowdloans.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Cryptocurrency.svg b/assets/icons/polkadot/solid/Cryptocurrency.svg
new file mode 100644
index 00000000..f76dc93c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Cryptocurrency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Customisation.svg b/assets/icons/polkadot/solid/Customisation.svg
new file mode 100644
index 00000000..c7dd2051
--- /dev/null
+++ b/assets/icons/polkadot/solid/Customisation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/DAOs.svg b/assets/icons/polkadot/solid/DAOs.svg
new file mode 100644
index 00000000..1991860f
--- /dev/null
+++ b/assets/icons/polkadot/solid/DAOs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/DEX.svg b/assets/icons/polkadot/solid/DEX.svg
new file mode 100644
index 00000000..bf16b733
--- /dev/null
+++ b/assets/icons/polkadot/solid/DEX.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Dapps.svg b/assets/icons/polkadot/solid/Dapps.svg
new file mode 100644
index 00000000..de79a172
--- /dev/null
+++ b/assets/icons/polkadot/solid/Dapps.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Data & Analytics.svg b/assets/icons/polkadot/solid/Data & Analytics.svg
new file mode 100644
index 00000000..64fe522b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Data & Analytics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Day_Light Mode.svg b/assets/icons/polkadot/solid/Day_Light Mode.svg
new file mode 100644
index 00000000..a9e6819f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Day_Light Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/DeFi.svg b/assets/icons/polkadot/solid/DeFi.svg
new file mode 100644
index 00000000..8c8a9b8c
--- /dev/null
+++ b/assets/icons/polkadot/solid/DeFi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Decentralised File Storage.svg b/assets/icons/polkadot/solid/Decentralised File Storage.svg
new file mode 100644
index 00000000..cfa2e8df
--- /dev/null
+++ b/assets/icons/polkadot/solid/Decentralised File Storage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Delete_Cancel.svg b/assets/icons/polkadot/solid/Delete_Cancel.svg
new file mode 100644
index 00000000..2590b4ac
--- /dev/null
+++ b/assets/icons/polkadot/solid/Delete_Cancel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Democracy.svg b/assets/icons/polkadot/solid/Democracy.svg
new file mode 100644
index 00000000..d560961f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Democracy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Deposit.svg b/assets/icons/polkadot/solid/Deposit.svg
new file mode 100644
index 00000000..97cebe83
--- /dev/null
+++ b/assets/icons/polkadot/solid/Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Derivation Path.svg b/assets/icons/polkadot/solid/Derivation Path.svg
new file mode 100644
index 00000000..3d368c67
--- /dev/null
+++ b/assets/icons/polkadot/solid/Derivation Path.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Derive An Address.svg b/assets/icons/polkadot/solid/Derive An Address.svg
new file mode 100644
index 00000000..c41605bd
--- /dev/null
+++ b/assets/icons/polkadot/solid/Derive An Address.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Derive Key Pair.svg b/assets/icons/polkadot/solid/Derive Key Pair.svg
new file mode 100644
index 00000000..fb238c57
--- /dev/null
+++ b/assets/icons/polkadot/solid/Derive Key Pair.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Disconnected.svg b/assets/icons/polkadot/solid/Disconnected.svg
new file mode 100644
index 00000000..38ead071
--- /dev/null
+++ b/assets/icons/polkadot/solid/Disconnected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Distributed File Storage.svg b/assets/icons/polkadot/solid/Distributed File Storage.svg
new file mode 100644
index 00000000..bba294ad
--- /dev/null
+++ b/assets/icons/polkadot/solid/Distributed File Storage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Documentations.svg b/assets/icons/polkadot/solid/Documentations.svg
new file mode 100644
index 00000000..a4833b19
--- /dev/null
+++ b/assets/icons/polkadot/solid/Documentations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Download.svg b/assets/icons/polkadot/solid/Download.svg
new file mode 100644
index 00000000..dc2f7b4b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Draw.svg b/assets/icons/polkadot/solid/Draw.svg
new file mode 100644
index 00000000..e571b4e8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Draw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Drip.svg b/assets/icons/polkadot/solid/Drip.svg
new file mode 100644
index 00000000..5b1181ec
--- /dev/null
+++ b/assets/icons/polkadot/solid/Drip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Dropdown Up.svg b/assets/icons/polkadot/solid/Dropdown Up.svg
new file mode 100644
index 00000000..81b52756
--- /dev/null
+++ b/assets/icons/polkadot/solid/Dropdown Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Dropdown.svg b/assets/icons/polkadot/solid/Dropdown.svg
new file mode 100644
index 00000000..8577c38b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Dropdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Ecosystem Provisions.svg b/assets/icons/polkadot/solid/Ecosystem Provisions.svg
new file mode 100644
index 00000000..b789bda5
--- /dev/null
+++ b/assets/icons/polkadot/solid/Ecosystem Provisions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Ecosystem.svg b/assets/icons/polkadot/solid/Ecosystem.svg
new file mode 100644
index 00000000..61af539e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Ecosystem.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Edit-Off.svg b/assets/icons/polkadot/solid/Edit-Off.svg
new file mode 100644
index 00000000..19aec48c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Edit-Off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Edit-On.svg b/assets/icons/polkadot/solid/Edit-On.svg
new file mode 100644
index 00000000..0319a725
--- /dev/null
+++ b/assets/icons/polkadot/solid/Edit-On.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Elections.svg b/assets/icons/polkadot/solid/Elections.svg
new file mode 100644
index 00000000..5a05e93a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Elections.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Email.svg b/assets/icons/polkadot/solid/Email.svg
new file mode 100644
index 00000000..32f62697
--- /dev/null
+++ b/assets/icons/polkadot/solid/Email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Encryption.svg b/assets/icons/polkadot/solid/Encryption.svg
new file mode 100644
index 00000000..fc0b09ce
--- /dev/null
+++ b/assets/icons/polkadot/solid/Encryption.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Ending Period.svg b/assets/icons/polkadot/solid/Ending Period.svg
new file mode 100644
index 00000000..e291b812
--- /dev/null
+++ b/assets/icons/polkadot/solid/Ending Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Energy Deficiency.svg b/assets/icons/polkadot/solid/Energy Deficiency.svg
new file mode 100644
index 00000000..96338cca
--- /dev/null
+++ b/assets/icons/polkadot/solid/Energy Deficiency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Energy Efficiency.svg b/assets/icons/polkadot/solid/Energy Efficiency.svg
new file mode 100644
index 00000000..d6edb6dd
--- /dev/null
+++ b/assets/icons/polkadot/solid/Energy Efficiency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Energy.svg b/assets/icons/polkadot/solid/Energy.svg
new file mode 100644
index 00000000..e1bb9d18
--- /dev/null
+++ b/assets/icons/polkadot/solid/Energy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Enterprise.svg b/assets/icons/polkadot/solid/Enterprise.svg
new file mode 100644
index 00000000..e2ad7a85
--- /dev/null
+++ b/assets/icons/polkadot/solid/Enterprise.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Error.svg b/assets/icons/polkadot/solid/Error.svg
new file mode 100644
index 00000000..77612a00
--- /dev/null
+++ b/assets/icons/polkadot/solid/Error.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Eve.svg b/assets/icons/polkadot/solid/Eve.svg
new file mode 100644
index 00000000..f27c17cf
--- /dev/null
+++ b/assets/icons/polkadot/solid/Eve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Events.svg b/assets/icons/polkadot/solid/Events.svg
new file mode 100644
index 00000000..0cd3740f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Events.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Existential Deposit.svg b/assets/icons/polkadot/solid/Existential Deposit.svg
new file mode 100644
index 00000000..c636eb6e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Existential Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Export (M,L).svg b/assets/icons/polkadot/solid/Export (M,L).svg
new file mode 100644
index 00000000..e3b0da12
--- /dev/null
+++ b/assets/icons/polkadot/solid/Export (M,L).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Export (XS,S).svg b/assets/icons/polkadot/solid/Export (XS,S).svg
new file mode 100644
index 00000000..3a51009d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Export (XS,S).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Extension.svg b/assets/icons/polkadot/solid/Extension.svg
new file mode 100644
index 00000000..030b0ccd
--- /dev/null
+++ b/assets/icons/polkadot/solid/Extension.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Favorite To-Be.svg b/assets/icons/polkadot/solid/Favorite To-Be.svg
new file mode 100644
index 00000000..1148e01d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Favorite To-Be.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Favorite.svg b/assets/icons/polkadot/solid/Favorite.svg
new file mode 100644
index 00000000..f524f17a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Favorite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Feeless.svg b/assets/icons/polkadot/solid/Feeless.svg
new file mode 100644
index 00000000..0e04f290
--- /dev/null
+++ b/assets/icons/polkadot/solid/Feeless.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Fees.svg b/assets/icons/polkadot/solid/Fees.svg
new file mode 100644
index 00000000..087df8a8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Fees.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Fiat.svg b/assets/icons/polkadot/solid/Fiat.svg
new file mode 100644
index 00000000..dcc3b753
--- /dev/null
+++ b/assets/icons/polkadot/solid/Fiat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Filter.svg b/assets/icons/polkadot/solid/Filter.svg
new file mode 100644
index 00000000..66b83013
--- /dev/null
+++ b/assets/icons/polkadot/solid/Filter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Finances.svg b/assets/icons/polkadot/solid/Finances.svg
new file mode 100644
index 00000000..c6eb45f0
--- /dev/null
+++ b/assets/icons/polkadot/solid/Finances.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Fork.svg b/assets/icons/polkadot/solid/Fork.svg
new file mode 100644
index 00000000..a30adc78
--- /dev/null
+++ b/assets/icons/polkadot/solid/Fork.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/ForklessUpgrades.svg b/assets/icons/polkadot/solid/ForklessUpgrades.svg
new file mode 100644
index 00000000..e45e0d08
--- /dev/null
+++ b/assets/icons/polkadot/solid/ForklessUpgrades.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Full Node.svg b/assets/icons/polkadot/solid/Full Node.svg
new file mode 100644
index 00000000..fe02c8b8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Full Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Fund Account.svg b/assets/icons/polkadot/solid/Fund Account.svg
new file mode 100644
index 00000000..af3459ac
--- /dev/null
+++ b/assets/icons/polkadot/solid/Fund Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Fund Savings.svg b/assets/icons/polkadot/solid/Fund Savings.svg
new file mode 100644
index 00000000..8b58ad5b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Fund Savings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Gaming.svg b/assets/icons/polkadot/solid/Gaming.svg
new file mode 100644
index 00000000..4e16f279
--- /dev/null
+++ b/assets/icons/polkadot/solid/Gaming.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Genesis.svg b/assets/icons/polkadot/solid/Genesis.svg
new file mode 100644
index 00000000..69cc474e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Genesis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Gift.svg b/assets/icons/polkadot/solid/Gift.svg
new file mode 100644
index 00000000..b30b1d50
--- /dev/null
+++ b/assets/icons/polkadot/solid/Gift.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Glossary.svg b/assets/icons/polkadot/solid/Glossary.svg
new file mode 100644
index 00000000..30ffdc7d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Glossary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Go.svg b/assets/icons/polkadot/solid/Go.svg
new file mode 100644
index 00000000..8390d272
--- /dev/null
+++ b/assets/icons/polkadot/solid/Go.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Governance.svg b/assets/icons/polkadot/solid/Governance.svg
new file mode 100644
index 00000000..d5a61667
--- /dev/null
+++ b/assets/icons/polkadot/solid/Governance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Governments.svg b/assets/icons/polkadot/solid/Governments.svg
new file mode 100644
index 00000000..57adef7d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Governments.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Hackathon.svg b/assets/icons/polkadot/solid/Hackathon.svg
new file mode 100644
index 00000000..943159ce
--- /dev/null
+++ b/assets/icons/polkadot/solid/Hackathon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Hash Function.svg b/assets/icons/polkadot/solid/Hash Function.svg
new file mode 100644
index 00000000..20e6a0e0
--- /dev/null
+++ b/assets/icons/polkadot/solid/Hash Function.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Healthcare.svg b/assets/icons/polkadot/solid/Healthcare.svg
new file mode 100644
index 00000000..aed5b11f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Healthcare.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Help.svg b/assets/icons/polkadot/solid/Help.svg
new file mode 100644
index 00000000..1576c9cd
--- /dev/null
+++ b/assets/icons/polkadot/solid/Help.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Heterogeneous Sharding.svg b/assets/icons/polkadot/solid/Heterogeneous Sharding.svg
new file mode 100644
index 00000000..7edb5673
--- /dev/null
+++ b/assets/icons/polkadot/solid/Heterogeneous Sharding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Identify.svg b/assets/icons/polkadot/solid/Identify.svg
new file mode 100644
index 00000000..98b52005
--- /dev/null
+++ b/assets/icons/polkadot/solid/Identify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Identity.svg b/assets/icons/polkadot/solid/Identity.svg
new file mode 100644
index 00000000..eafe72bb
--- /dev/null
+++ b/assets/icons/polkadot/solid/Identity.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Import Token.svg b/assets/icons/polkadot/solid/Import Token.svg
new file mode 100644
index 00000000..63ae0fed
--- /dev/null
+++ b/assets/icons/polkadot/solid/Import Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Indeterminate _ Negative.svg b/assets/icons/polkadot/solid/Indeterminate _ Negative.svg
new file mode 100644
index 00000000..bc6e3971
--- /dev/null
+++ b/assets/icons/polkadot/solid/Indeterminate _ Negative.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Informational.svg b/assets/icons/polkadot/solid/Informational.svg
new file mode 100644
index 00000000..19472f11
--- /dev/null
+++ b/assets/icons/polkadot/solid/Informational.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Infrastructure.svg b/assets/icons/polkadot/solid/Infrastructure.svg
new file mode 100644
index 00000000..3e2bb941
--- /dev/null
+++ b/assets/icons/polkadot/solid/Infrastructure.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Injected Account.svg b/assets/icons/polkadot/solid/Injected Account.svg
new file mode 100644
index 00000000..ab3f0185
--- /dev/null
+++ b/assets/icons/polkadot/solid/Injected Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Interconnected.svg b/assets/icons/polkadot/solid/Interconnected.svg
new file mode 100644
index 00000000..b3d63510
--- /dev/null
+++ b/assets/icons/polkadot/solid/Interconnected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Interoperability.svg b/assets/icons/polkadot/solid/Interoperability.svg
new file mode 100644
index 00000000..1ed2987c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Interoperability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Investors.svg b/assets/icons/polkadot/solid/Investors.svg
new file mode 100644
index 00000000..dbdc8169
--- /dev/null
+++ b/assets/icons/polkadot/solid/Investors.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/IoT And Robotics.svg b/assets/icons/polkadot/solid/IoT And Robotics.svg
new file mode 100644
index 00000000..c0fca16f
--- /dev/null
+++ b/assets/icons/polkadot/solid/IoT And Robotics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/IoT.svg b/assets/icons/polkadot/solid/IoT.svg
new file mode 100644
index 00000000..09d4abf1
--- /dev/null
+++ b/assets/icons/polkadot/solid/IoT.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Isolated.svg b/assets/icons/polkadot/solid/Isolated.svg
new file mode 100644
index 00000000..6a433d07
--- /dev/null
+++ b/assets/icons/polkadot/solid/Isolated.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/KeepAlive Check.svg b/assets/icons/polkadot/solid/KeepAlive Check.svg
new file mode 100644
index 00000000..0504daf5
--- /dev/null
+++ b/assets/icons/polkadot/solid/KeepAlive Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Key.svg b/assets/icons/polkadot/solid/Key.svg
new file mode 100644
index 00000000..6e8b237c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Language.svg b/assets/icons/polkadot/solid/Language.svg
new file mode 100644
index 00000000..d85175d8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Layer (Four).svg b/assets/icons/polkadot/solid/Layer (Four).svg
new file mode 100644
index 00000000..a9e26c9f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Layer (Four).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Layer (One).svg b/assets/icons/polkadot/solid/Layer (One).svg
new file mode 100644
index 00000000..d7d19272
--- /dev/null
+++ b/assets/icons/polkadot/solid/Layer (One).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Layer (Three).svg b/assets/icons/polkadot/solid/Layer (Three).svg
new file mode 100644
index 00000000..1a698978
--- /dev/null
+++ b/assets/icons/polkadot/solid/Layer (Three).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Layer (Two).svg b/assets/icons/polkadot/solid/Layer (Two).svg
new file mode 100644
index 00000000..56c9bab0
--- /dev/null
+++ b/assets/icons/polkadot/solid/Layer (Two).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Layer.svg b/assets/icons/polkadot/solid/Layer.svg
new file mode 100644
index 00000000..11f14910
--- /dev/null
+++ b/assets/icons/polkadot/solid/Layer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Learn More.svg b/assets/icons/polkadot/solid/Learn More.svg
new file mode 100644
index 00000000..65023b8c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Learn More.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Learn.svg b/assets/icons/polkadot/solid/Learn.svg
new file mode 100644
index 00000000..2ffd3872
--- /dev/null
+++ b/assets/icons/polkadot/solid/Learn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Lease Duration.svg b/assets/icons/polkadot/solid/Lease Duration.svg
new file mode 100644
index 00000000..17ad5f24
--- /dev/null
+++ b/assets/icons/polkadot/solid/Lease Duration.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Library.svg b/assets/icons/polkadot/solid/Library.svg
new file mode 100644
index 00000000..d15bdffd
--- /dev/null
+++ b/assets/icons/polkadot/solid/Library.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Light Node.svg b/assets/icons/polkadot/solid/Light Node.svg
new file mode 100644
index 00000000..f46b5572
--- /dev/null
+++ b/assets/icons/polkadot/solid/Light Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Lights On.svg b/assets/icons/polkadot/solid/Lights On.svg
new file mode 100644
index 00000000..499634a0
--- /dev/null
+++ b/assets/icons/polkadot/solid/Lights On.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Limited Supply.svg b/assets/icons/polkadot/solid/Limited Supply.svg
new file mode 100644
index 00000000..b965441b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Limited Supply.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/LinkedIn.svg b/assets/icons/polkadot/solid/LinkedIn.svg
new file mode 100644
index 00000000..29251287
--- /dev/null
+++ b/assets/icons/polkadot/solid/LinkedIn.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Lock.svg b/assets/icons/polkadot/solid/Lock.svg
new file mode 100644
index 00000000..f10e412d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Maintain.svg b/assets/icons/polkadot/solid/Maintain.svg
new file mode 100644
index 00000000..44c43eb6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Maintain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Marketing.svg b/assets/icons/polkadot/solid/Marketing.svg
new file mode 100644
index 00000000..091866f8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Marketing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Menu.svg b/assets/icons/polkadot/solid/Menu.svg
new file mode 100644
index 00000000..8b25bcad
--- /dev/null
+++ b/assets/icons/polkadot/solid/Menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Message.svg b/assets/icons/polkadot/solid/Message.svg
new file mode 100644
index 00000000..bdc57c78
--- /dev/null
+++ b/assets/icons/polkadot/solid/Message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Metaverse.svg b/assets/icons/polkadot/solid/Metaverse.svg
new file mode 100644
index 00000000..277a8cba
--- /dev/null
+++ b/assets/icons/polkadot/solid/Metaverse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Mitigating Mev.svg b/assets/icons/polkadot/solid/Mitigating Mev.svg
new file mode 100644
index 00000000..7d703af6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Mitigating Mev.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Mobile App.svg b/assets/icons/polkadot/solid/Mobile App.svg
new file mode 100644
index 00000000..5715361f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Mobile App.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Monitor.svg b/assets/icons/polkadot/solid/Monitor.svg
new file mode 100644
index 00000000..2566890c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Monitor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/More Horizontal.svg b/assets/icons/polkadot/solid/More Horizontal.svg
new file mode 100644
index 00000000..091b2efe
--- /dev/null
+++ b/assets/icons/polkadot/solid/More Horizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/More Menu.svg b/assets/icons/polkadot/solid/More Menu.svg
new file mode 100644
index 00000000..31fc356f
--- /dev/null
+++ b/assets/icons/polkadot/solid/More Menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/More Vertical.svg b/assets/icons/polkadot/solid/More Vertical.svg
new file mode 100644
index 00000000..d57c823e
--- /dev/null
+++ b/assets/icons/polkadot/solid/More Vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Multichain Smart Contracts.svg b/assets/icons/polkadot/solid/Multichain Smart Contracts.svg
new file mode 100644
index 00000000..610043ec
--- /dev/null
+++ b/assets/icons/polkadot/solid/Multichain Smart Contracts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Multichain Treasuries.svg b/assets/icons/polkadot/solid/Multichain Treasuries.svg
new file mode 100644
index 00000000..b13a3f42
--- /dev/null
+++ b/assets/icons/polkadot/solid/Multichain Treasuries.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Multisign Account.svg b/assets/icons/polkadot/solid/Multisign Account.svg
new file mode 100644
index 00000000..223c6c69
--- /dev/null
+++ b/assets/icons/polkadot/solid/Multisign Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Multisign.svg b/assets/icons/polkadot/solid/Multisign.svg
new file mode 100644
index 00000000..bc217dfa
--- /dev/null
+++ b/assets/icons/polkadot/solid/Multisign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/NFT Staking.svg b/assets/icons/polkadot/solid/NFT Staking.svg
new file mode 100644
index 00000000..8930c6da
--- /dev/null
+++ b/assets/icons/polkadot/solid/NFT Staking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Network Is Connected.svg b/assets/icons/polkadot/solid/Network Is Connected.svg
new file mode 100644
index 00000000..c02bf3b5
--- /dev/null
+++ b/assets/icons/polkadot/solid/Network Is Connected.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Network Security Operations.svg b/assets/icons/polkadot/solid/Network Security Operations.svg
new file mode 100644
index 00000000..9b17ad39
--- /dev/null
+++ b/assets/icons/polkadot/solid/Network Security Operations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/New Tab.svg b/assets/icons/polkadot/solid/New Tab.svg
new file mode 100644
index 00000000..224f76ed
--- /dev/null
+++ b/assets/icons/polkadot/solid/New Tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/News.svg b/assets/icons/polkadot/solid/News.svg
new file mode 100644
index 00000000..b7db72e3
--- /dev/null
+++ b/assets/icons/polkadot/solid/News.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Nft.svg b/assets/icons/polkadot/solid/Nft.svg
new file mode 100644
index 00000000..80f1c6b5
--- /dev/null
+++ b/assets/icons/polkadot/solid/Nft.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Night_Dark Mode.svg b/assets/icons/polkadot/solid/Night_Dark Mode.svg
new file mode 100644
index 00000000..0df7c220
--- /dev/null
+++ b/assets/icons/polkadot/solid/Night_Dark Mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Node.svg b/assets/icons/polkadot/solid/Node.svg
new file mode 100644
index 00000000..d7fb61ba
--- /dev/null
+++ b/assets/icons/polkadot/solid/Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Nominating.svg b/assets/icons/polkadot/solid/Nominating.svg
new file mode 100644
index 00000000..ab7695fc
--- /dev/null
+++ b/assets/icons/polkadot/solid/Nominating.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Nominators.svg b/assets/icons/polkadot/solid/Nominators.svg
new file mode 100644
index 00000000..03dc1766
--- /dev/null
+++ b/assets/icons/polkadot/solid/Nominators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Not Able To Upgrade.svg b/assets/icons/polkadot/solid/Not Able To Upgrade.svg
new file mode 100644
index 00000000..56f8503e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Not Able To Upgrade.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Not Scalable.svg b/assets/icons/polkadot/solid/Not Scalable.svg
new file mode 100644
index 00000000..ba22c217
--- /dev/null
+++ b/assets/icons/polkadot/solid/Not Scalable.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Notification.svg b/assets/icons/polkadot/solid/Notification.svg
new file mode 100644
index 00000000..25f3c268
--- /dev/null
+++ b/assets/icons/polkadot/solid/Notification.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Off-Chain Computations.svg b/assets/icons/polkadot/solid/Off-Chain Computations.svg
new file mode 100644
index 00000000..ab5f9e6e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Off-Chain Computations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Offboarding.svg b/assets/icons/polkadot/solid/Offboarding.svg
new file mode 100644
index 00000000..92dc5c1a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Offboarding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/On-Chain Scheduling.svg b/assets/icons/polkadot/solid/On-Chain Scheduling.svg
new file mode 100644
index 00000000..56800c16
--- /dev/null
+++ b/assets/icons/polkadot/solid/On-Chain Scheduling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Onboarding.svg b/assets/icons/polkadot/solid/Onboarding.svg
new file mode 100644
index 00000000..d234f6da
--- /dev/null
+++ b/assets/icons/polkadot/solid/Onboarding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Oracle.svg b/assets/icons/polkadot/solid/Oracle.svg
new file mode 100644
index 00000000..a5bd15c6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Oracle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Oracles.svg b/assets/icons/polkadot/solid/Oracles.svg
new file mode 100644
index 00000000..87802687
--- /dev/null
+++ b/assets/icons/polkadot/solid/Oracles.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Overview.svg b/assets/icons/polkadot/solid/Overview.svg
new file mode 100644
index 00000000..125e4c78
--- /dev/null
+++ b/assets/icons/polkadot/solid/Overview.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Paper Money.svg b/assets/icons/polkadot/solid/Paper Money.svg
new file mode 100644
index 00000000..a7ce3421
--- /dev/null
+++ b/assets/icons/polkadot/solid/Paper Money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Parachains.svg b/assets/icons/polkadot/solid/Parachains.svg
new file mode 100644
index 00000000..60eda3a9
--- /dev/null
+++ b/assets/icons/polkadot/solid/Parachains.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Payout.svg b/assets/icons/polkadot/solid/Payout.svg
new file mode 100644
index 00000000..cf57b92d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Payout.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Picture.svg b/assets/icons/polkadot/solid/Picture.svg
new file mode 100644
index 00000000..a1ebb7f2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Picture.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Podcasts.svg b/assets/icons/polkadot/solid/Podcasts.svg
new file mode 100644
index 00000000..eb84801f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Podcasts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Privacy.svg b/assets/icons/polkadot/solid/Privacy.svg
new file mode 100644
index 00000000..1bb88093
--- /dev/null
+++ b/assets/icons/polkadot/solid/Privacy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Private Key.svg b/assets/icons/polkadot/solid/Private Key.svg
new file mode 100644
index 00000000..6e11e058
--- /dev/null
+++ b/assets/icons/polkadot/solid/Private Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Proof Of Stake.svg b/assets/icons/polkadot/solid/Proof Of Stake.svg
new file mode 100644
index 00000000..96c7712d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Proof Of Stake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Proof Of Work.svg b/assets/icons/polkadot/solid/Proof Of Work.svg
new file mode 100644
index 00000000..783b1171
--- /dev/null
+++ b/assets/icons/polkadot/solid/Proof Of Work.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Proposal.svg b/assets/icons/polkadot/solid/Proposal.svg
new file mode 100644
index 00000000..eeac7adc
--- /dev/null
+++ b/assets/icons/polkadot/solid/Proposal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Proxy.svg b/assets/icons/polkadot/solid/Proxy.svg
new file mode 100644
index 00000000..5a0f27fe
--- /dev/null
+++ b/assets/icons/polkadot/solid/Proxy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/ProxyAccount.svg b/assets/icons/polkadot/solid/ProxyAccount.svg
new file mode 100644
index 00000000..a58d4a9b
--- /dev/null
+++ b/assets/icons/polkadot/solid/ProxyAccount.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Public Key.svg b/assets/icons/polkadot/solid/Public Key.svg
new file mode 100644
index 00000000..838d15ca
--- /dev/null
+++ b/assets/icons/polkadot/solid/Public Key.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/QR Code.svg b/assets/icons/polkadot/solid/QR Code.svg
new file mode 100644
index 00000000..3ae67607
--- /dev/null
+++ b/assets/icons/polkadot/solid/QR Code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Randomness.svg b/assets/icons/polkadot/solid/Randomness.svg
new file mode 100644
index 00000000..835fd9a4
--- /dev/null
+++ b/assets/icons/polkadot/solid/Randomness.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Read Time.svg b/assets/icons/polkadot/solid/Read Time.svg
new file mode 100644
index 00000000..89b7c96f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Read Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Recover Keys.svg b/assets/icons/polkadot/solid/Recover Keys.svg
new file mode 100644
index 00000000..2bd063b3
--- /dev/null
+++ b/assets/icons/polkadot/solid/Recover Keys.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Recovery.svg b/assets/icons/polkadot/solid/Recovery.svg
new file mode 100644
index 00000000..cb34c6fb
--- /dev/null
+++ b/assets/icons/polkadot/solid/Recovery.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Reddit.svg b/assets/icons/polkadot/solid/Reddit.svg
new file mode 100644
index 00000000..dd7c9151
--- /dev/null
+++ b/assets/icons/polkadot/solid/Reddit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Referenda.svg b/assets/icons/polkadot/solid/Referenda.svg
new file mode 100644
index 00000000..b97c7336
--- /dev/null
+++ b/assets/icons/polkadot/solid/Referenda.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Refresh _ Redo.svg b/assets/icons/polkadot/solid/Refresh _ Redo.svg
new file mode 100644
index 00000000..f204382f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Refresh _ Redo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Registrars.svg b/assets/icons/polkadot/solid/Registrars.svg
new file mode 100644
index 00000000..baf93f70
--- /dev/null
+++ b/assets/icons/polkadot/solid/Registrars.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Regulators.svg b/assets/icons/polkadot/solid/Regulators.svg
new file mode 100644
index 00000000..99a9640d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Regulators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Relay Chain.svg b/assets/icons/polkadot/solid/Relay Chain.svg
new file mode 100644
index 00000000..ab830428
--- /dev/null
+++ b/assets/icons/polkadot/solid/Relay Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Remote Node.svg b/assets/icons/polkadot/solid/Remote Node.svg
new file mode 100644
index 00000000..1732d499
--- /dev/null
+++ b/assets/icons/polkadot/solid/Remote Node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Remove User.svg b/assets/icons/polkadot/solid/Remove User.svg
new file mode 100644
index 00000000..55a2a07f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Remove User.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Remove.svg b/assets/icons/polkadot/solid/Remove.svg
new file mode 100644
index 00000000..2b51c767
--- /dev/null
+++ b/assets/icons/polkadot/solid/Remove.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Report.svg b/assets/icons/polkadot/solid/Report.svg
new file mode 100644
index 00000000..24ed86a5
--- /dev/null
+++ b/assets/icons/polkadot/solid/Report.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Reputation Systems.svg b/assets/icons/polkadot/solid/Reputation Systems.svg
new file mode 100644
index 00000000..2b02a91a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Reputation Systems.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Research.svg b/assets/icons/polkadot/solid/Research.svg
new file mode 100644
index 00000000..1e73f08e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Research.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Reserve Back Assets.svg b/assets/icons/polkadot/solid/Reserve Back Assets.svg
new file mode 100644
index 00000000..c4183710
--- /dev/null
+++ b/assets/icons/polkadot/solid/Reserve Back Assets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Restore From BackUp.svg b/assets/icons/polkadot/solid/Restore From BackUp.svg
new file mode 100644
index 00000000..0eb5d97f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Restore From BackUp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Retail And Ecommerce.svg b/assets/icons/polkadot/solid/Retail And Ecommerce.svg
new file mode 100644
index 00000000..d249011b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Retail And Ecommerce.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Robust System.svg b/assets/icons/polkadot/solid/Robust System.svg
new file mode 100644
index 00000000..4ddcfb2a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Robust System.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Rust.svg b/assets/icons/polkadot/solid/Rust.svg
new file mode 100644
index 00000000..884a5612
--- /dev/null
+++ b/assets/icons/polkadot/solid/Rust.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Save.svg b/assets/icons/polkadot/solid/Save.svg
new file mode 100644
index 00000000..c6ac3bc8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Save.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Scalability.svg b/assets/icons/polkadot/solid/Scalability.svg
new file mode 100644
index 00000000..5bb71a91
--- /dev/null
+++ b/assets/icons/polkadot/solid/Scalability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Scale.svg b/assets/icons/polkadot/solid/Scale.svg
new file mode 100644
index 00000000..5e36dd08
--- /dev/null
+++ b/assets/icons/polkadot/solid/Scale.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Scaling.svg b/assets/icons/polkadot/solid/Scaling.svg
new file mode 100644
index 00000000..190e28c6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Scaling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Scam Alert.svg b/assets/icons/polkadot/solid/Scam Alert.svg
new file mode 100644
index 00000000..0a0081a3
--- /dev/null
+++ b/assets/icons/polkadot/solid/Scam Alert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Search.svg b/assets/icons/polkadot/solid/Search.svg
new file mode 100644
index 00000000..39324cde
--- /dev/null
+++ b/assets/icons/polkadot/solid/Search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Second A Proposal.svg b/assets/icons/polkadot/solid/Second A Proposal.svg
new file mode 100644
index 00000000..89c25654
--- /dev/null
+++ b/assets/icons/polkadot/solid/Second A Proposal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Secret Part Of The Derivation Path.svg b/assets/icons/polkadot/solid/Secret Part Of The Derivation Path.svg
new file mode 100644
index 00000000..00033427
--- /dev/null
+++ b/assets/icons/polkadot/solid/Secret Part Of The Derivation Path.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Secure Device.svg b/assets/icons/polkadot/solid/Secure Device.svg
new file mode 100644
index 00000000..db4a168a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Secure Device.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Security Check.svg b/assets/icons/polkadot/solid/Security Check.svg
new file mode 100644
index 00000000..53fe793c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Security Check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Seed Phrase.svg b/assets/icons/polkadot/solid/Seed Phrase.svg
new file mode 100644
index 00000000..cf0c9698
--- /dev/null
+++ b/assets/icons/polkadot/solid/Seed Phrase.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Select List Item.svg b/assets/icons/polkadot/solid/Select List Item.svg
new file mode 100644
index 00000000..76de60f2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Select List Item.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Session.svg b/assets/icons/polkadot/solid/Session.svg
new file mode 100644
index 00000000..6094fe12
--- /dev/null
+++ b/assets/icons/polkadot/solid/Session.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Settings.svg b/assets/icons/polkadot/solid/Settings.svg
new file mode 100644
index 00000000..fa1b0fcd
--- /dev/null
+++ b/assets/icons/polkadot/solid/Settings.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Sharding.svg b/assets/icons/polkadot/solid/Sharding.svg
new file mode 100644
index 00000000..0d67459c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Sharding.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Share.svg b/assets/icons/polkadot/solid/Share.svg
new file mode 100644
index 00000000..2925031b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Share.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Shared Security.svg b/assets/icons/polkadot/solid/Shared Security.svg
new file mode 100644
index 00000000..66433765
--- /dev/null
+++ b/assets/icons/polkadot/solid/Shared Security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Sign A Transaction.svg b/assets/icons/polkadot/solid/Sign A Transaction.svg
new file mode 100644
index 00000000..4571c6ec
--- /dev/null
+++ b/assets/icons/polkadot/solid/Sign A Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Sign Specs.svg b/assets/icons/polkadot/solid/Sign Specs.svg
new file mode 100644
index 00000000..ae2123df
--- /dev/null
+++ b/assets/icons/polkadot/solid/Sign Specs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Sign.svg b/assets/icons/polkadot/solid/Sign.svg
new file mode 100644
index 00000000..70f956e5
--- /dev/null
+++ b/assets/icons/polkadot/solid/Sign.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Signal.svg b/assets/icons/polkadot/solid/Signal.svg
new file mode 100644
index 00000000..4c38048a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Signal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Signature.svg b/assets/icons/polkadot/solid/Signature.svg
new file mode 100644
index 00000000..a68cef3e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Signature.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Signifier Tab.svg b/assets/icons/polkadot/solid/Signifier Tab.svg
new file mode 100644
index 00000000..8c1c9f54
--- /dev/null
+++ b/assets/icons/polkadot/solid/Signifier Tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Smart Contract.svg b/assets/icons/polkadot/solid/Smart Contract.svg
new file mode 100644
index 00000000..f354fc1f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Smart Contract.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Social Impact & Humanitarian.svg b/assets/icons/polkadot/solid/Social Impact & Humanitarian.svg
new file mode 100644
index 00000000..478c39fa
--- /dev/null
+++ b/assets/icons/polkadot/solid/Social Impact & Humanitarian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Social Networking.svg b/assets/icons/polkadot/solid/Social Networking.svg
new file mode 100644
index 00000000..81bd9637
--- /dev/null
+++ b/assets/icons/polkadot/solid/Social Networking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Software Development.svg b/assets/icons/polkadot/solid/Software Development.svg
new file mode 100644
index 00000000..5869c504
--- /dev/null
+++ b/assets/icons/polkadot/solid/Software Development.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Specialised.svg b/assets/icons/polkadot/solid/Specialised.svg
new file mode 100644
index 00000000..b396bbce
--- /dev/null
+++ b/assets/icons/polkadot/solid/Specialised.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Stablecoin.svg b/assets/icons/polkadot/solid/Stablecoin.svg
new file mode 100644
index 00000000..1d0e4f97
--- /dev/null
+++ b/assets/icons/polkadot/solid/Stablecoin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Stake.svg b/assets/icons/polkadot/solid/Stake.svg
new file mode 100644
index 00000000..86041a36
--- /dev/null
+++ b/assets/icons/polkadot/solid/Stake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Staking.svg b/assets/icons/polkadot/solid/Staking.svg
new file mode 100644
index 00000000..07aad245
--- /dev/null
+++ b/assets/icons/polkadot/solid/Staking.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Starting Period.svg b/assets/icons/polkadot/solid/Starting Period.svg
new file mode 100644
index 00000000..49ffef61
--- /dev/null
+++ b/assets/icons/polkadot/solid/Starting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Success.svg b/assets/icons/polkadot/solid/Success.svg
new file mode 100644
index 00000000..3f391469
--- /dev/null
+++ b/assets/icons/polkadot/solid/Success.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Supply Chain.svg b/assets/icons/polkadot/solid/Supply Chain.svg
new file mode 100644
index 00000000..06a57235
--- /dev/null
+++ b/assets/icons/polkadot/solid/Supply Chain.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Talent.svg b/assets/icons/polkadot/solid/Talent.svg
new file mode 100644
index 00000000..55496879
--- /dev/null
+++ b/assets/icons/polkadot/solid/Talent.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Technical Committee.svg b/assets/icons/polkadot/solid/Technical Committee.svg
new file mode 100644
index 00000000..4f2b918d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Technical Committee.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Teleport.svg b/assets/icons/polkadot/solid/Teleport.svg
new file mode 100644
index 00000000..75a745a1
--- /dev/null
+++ b/assets/icons/polkadot/solid/Teleport.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Testnet Token.svg b/assets/icons/polkadot/solid/Testnet Token.svg
new file mode 100644
index 00000000..7e0d03a4
--- /dev/null
+++ b/assets/icons/polkadot/solid/Testnet Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Thumbs Down.svg b/assets/icons/polkadot/solid/Thumbs Down.svg
new file mode 100644
index 00000000..587e135b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Thumbs Down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Thumbs Up.svg b/assets/icons/polkadot/solid/Thumbs Up.svg
new file mode 100644
index 00000000..ab57e5b2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Thumbs Up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Time.svg b/assets/icons/polkadot/solid/Time.svg
new file mode 100644
index 00000000..8111e271
--- /dev/null
+++ b/assets/icons/polkadot/solid/Time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Token Holders.svg b/assets/icons/polkadot/solid/Token Holders.svg
new file mode 100644
index 00000000..e7f0f99b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Token Holders.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Token.svg b/assets/icons/polkadot/solid/Token.svg
new file mode 100644
index 00000000..1843210f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Tools.svg b/assets/icons/polkadot/solid/Tools.svg
new file mode 100644
index 00000000..9fbfe13c
--- /dev/null
+++ b/assets/icons/polkadot/solid/Tools.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Transaction.svg b/assets/icons/polkadot/solid/Transaction.svg
new file mode 100644
index 00000000..d0978ead
--- /dev/null
+++ b/assets/icons/polkadot/solid/Transaction.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Translate.svg b/assets/icons/polkadot/solid/Translate.svg
new file mode 100644
index 00000000..9be868f1
--- /dev/null
+++ b/assets/icons/polkadot/solid/Translate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Transparency.svg b/assets/icons/polkadot/solid/Transparency.svg
new file mode 100644
index 00000000..66baf79d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Transparency.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Treasury.svg b/assets/icons/polkadot/solid/Treasury.svg
new file mode 100644
index 00000000..3093cb09
--- /dev/null
+++ b/assets/icons/polkadot/solid/Treasury.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Twitter.svg b/assets/icons/polkadot/solid/Twitter.svg
new file mode 100644
index 00000000..029cf30b
--- /dev/null
+++ b/assets/icons/polkadot/solid/Twitter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Ui.svg b/assets/icons/polkadot/solid/Ui.svg
new file mode 100644
index 00000000..243a8387
--- /dev/null
+++ b/assets/icons/polkadot/solid/Ui.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Unbond.svg b/assets/icons/polkadot/solid/Unbond.svg
new file mode 100644
index 00000000..62e35383
--- /dev/null
+++ b/assets/icons/polkadot/solid/Unbond.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Unchecked.svg b/assets/icons/polkadot/solid/Unchecked.svg
new file mode 100644
index 00000000..58b92d19
--- /dev/null
+++ b/assets/icons/polkadot/solid/Unchecked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Unlock.svg b/assets/icons/polkadot/solid/Unlock.svg
new file mode 100644
index 00000000..130a1f8f
--- /dev/null
+++ b/assets/icons/polkadot/solid/Unlock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Unstake.svg b/assets/icons/polkadot/solid/Unstake.svg
new file mode 100644
index 00000000..8e74d2de
--- /dev/null
+++ b/assets/icons/polkadot/solid/Unstake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Upgrade.svg b/assets/icons/polkadot/solid/Upgrade.svg
new file mode 100644
index 00000000..7918ea07
--- /dev/null
+++ b/assets/icons/polkadot/solid/Upgrade.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Use Cases.svg b/assets/icons/polkadot/solid/Use Cases.svg
new file mode 100644
index 00000000..6b38e4b6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Use Cases.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Users.svg b/assets/icons/polkadot/solid/Users.svg
new file mode 100644
index 00000000..edf44e2d
--- /dev/null
+++ b/assets/icons/polkadot/solid/Users.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Utility.svg b/assets/icons/polkadot/solid/Utility.svg
new file mode 100644
index 00000000..ff4a5571
--- /dev/null
+++ b/assets/icons/polkadot/solid/Utility.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Ux.svg b/assets/icons/polkadot/solid/Ux.svg
new file mode 100644
index 00000000..d8def508
--- /dev/null
+++ b/assets/icons/polkadot/solid/Ux.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Validators.svg b/assets/icons/polkadot/solid/Validators.svg
new file mode 100644
index 00000000..adba7d49
--- /dev/null
+++ b/assets/icons/polkadot/solid/Validators.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Value Bearing Token.svg b/assets/icons/polkadot/solid/Value Bearing Token.svg
new file mode 100644
index 00000000..354fc621
--- /dev/null
+++ b/assets/icons/polkadot/solid/Value Bearing Token.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Verified Account.svg b/assets/icons/polkadot/solid/Verified Account.svg
new file mode 100644
index 00000000..03214a89
--- /dev/null
+++ b/assets/icons/polkadot/solid/Verified Account.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Verified Signed.svg b/assets/icons/polkadot/solid/Verified Signed.svg
new file mode 100644
index 00000000..9724e7d7
--- /dev/null
+++ b/assets/icons/polkadot/solid/Verified Signed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Verify.svg b/assets/icons/polkadot/solid/Verify.svg
new file mode 100644
index 00000000..72cedcd4
--- /dev/null
+++ b/assets/icons/polkadot/solid/Verify.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Version.svg b/assets/icons/polkadot/solid/Version.svg
new file mode 100644
index 00000000..f21f6c8a
--- /dev/null
+++ b/assets/icons/polkadot/solid/Version.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Vesting Period.svg b/assets/icons/polkadot/solid/Vesting Period.svg
new file mode 100644
index 00000000..2f796837
--- /dev/null
+++ b/assets/icons/polkadot/solid/Vesting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Vesting.svg b/assets/icons/polkadot/solid/Vesting.svg
new file mode 100644
index 00000000..b5f596a3
--- /dev/null
+++ b/assets/icons/polkadot/solid/Vesting.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Video Pause.svg b/assets/icons/polkadot/solid/Video Pause.svg
new file mode 100644
index 00000000..4569b218
--- /dev/null
+++ b/assets/icons/polkadot/solid/Video Pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Video Play.svg b/assets/icons/polkadot/solid/Video Play.svg
new file mode 100644
index 00000000..a9fdf6db
--- /dev/null
+++ b/assets/icons/polkadot/solid/Video Play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Video.svg b/assets/icons/polkadot/solid/Video.svg
new file mode 100644
index 00000000..253380f6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Video.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Videos.svg b/assets/icons/polkadot/solid/Videos.svg
new file mode 100644
index 00000000..afca29ef
--- /dev/null
+++ b/assets/icons/polkadot/solid/Videos.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Vote.svg b/assets/icons/polkadot/solid/Vote.svg
new file mode 100644
index 00000000..87203d49
--- /dev/null
+++ b/assets/icons/polkadot/solid/Vote.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Voting Period.svg b/assets/icons/polkadot/solid/Voting Period.svg
new file mode 100644
index 00000000..22bc480e
--- /dev/null
+++ b/assets/icons/polkadot/solid/Voting Period.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Wallet Deposit.svg b/assets/icons/polkadot/solid/Wallet Deposit.svg
new file mode 100644
index 00000000..6663bba7
--- /dev/null
+++ b/assets/icons/polkadot/solid/Wallet Deposit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Wallet Withdraw.svg b/assets/icons/polkadot/solid/Wallet Withdraw.svg
new file mode 100644
index 00000000..c880c6e2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Wallet Withdraw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Wallet.svg b/assets/icons/polkadot/solid/Wallet.svg
new file mode 100644
index 00000000..dc25cc84
--- /dev/null
+++ b/assets/icons/polkadot/solid/Wallet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Wallets.svg b/assets/icons/polkadot/solid/Wallets.svg
new file mode 100644
index 00000000..9e738ce6
--- /dev/null
+++ b/assets/icons/polkadot/solid/Wallets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Wasm.svg b/assets/icons/polkadot/solid/Wasm.svg
new file mode 100644
index 00000000..ca37f8ee
--- /dev/null
+++ b/assets/icons/polkadot/solid/Wasm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Web3.svg b/assets/icons/polkadot/solid/Web3.svg
new file mode 100644
index 00000000..34454550
--- /dev/null
+++ b/assets/icons/polkadot/solid/Web3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Whitepaper Download.svg b/assets/icons/polkadot/solid/Whitepaper Download.svg
new file mode 100644
index 00000000..64cbabf8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Whitepaper Download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Whitepaper Upload.svg b/assets/icons/polkadot/solid/Whitepaper Upload.svg
new file mode 100644
index 00000000..57dd7bc8
--- /dev/null
+++ b/assets/icons/polkadot/solid/Whitepaper Upload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Whitepaper.svg b/assets/icons/polkadot/solid/Whitepaper.svg
new file mode 100644
index 00000000..9ac914e9
--- /dev/null
+++ b/assets/icons/polkadot/solid/Whitepaper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/WiFi Off.svg b/assets/icons/polkadot/solid/WiFi Off.svg
new file mode 100644
index 00000000..632cf3e0
--- /dev/null
+++ b/assets/icons/polkadot/solid/WiFi Off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/WiFi.svg b/assets/icons/polkadot/solid/WiFi.svg
new file mode 100644
index 00000000..9136921c
--- /dev/null
+++ b/assets/icons/polkadot/solid/WiFi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Wiki.svg b/assets/icons/polkadot/solid/Wiki.svg
new file mode 100644
index 00000000..8422f0a2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Wiki.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Withdraw.svg b/assets/icons/polkadot/solid/Withdraw.svg
new file mode 100644
index 00000000..1a4079b4
--- /dev/null
+++ b/assets/icons/polkadot/solid/Withdraw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Workshop.svg b/assets/icons/polkadot/solid/Workshop.svg
new file mode 100644
index 00000000..3a053356
--- /dev/null
+++ b/assets/icons/polkadot/solid/Workshop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/XCM (Message).svg b/assets/icons/polkadot/solid/XCM (Message).svg
new file mode 100644
index 00000000..80ffcd4d
--- /dev/null
+++ b/assets/icons/polkadot/solid/XCM (Message).svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/polkadot/solid/Youtube.svg b/assets/icons/polkadot/solid/Youtube.svg
new file mode 100644
index 00000000..3d06fbb2
--- /dev/null
+++ b/assets/icons/polkadot/solid/Youtube.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/0-Shared/bg-circles-color-transparent.png b/assets/img/0-Shared/bg-circles-color-transparent.png
new file mode 100644
index 00000000..5469d3a4
Binary files /dev/null and b/assets/img/0-Shared/bg-circles-color-transparent.png differ
diff --git a/assets/img/0-Shared/bg-circles-color.png b/assets/img/0-Shared/bg-circles-color.png
new file mode 100644
index 00000000..abdadfcb
Binary files /dev/null and b/assets/img/0-Shared/bg-circles-color.png differ
diff --git a/assets/img/0-Shared/bg-circles-image-transparent.png b/assets/img/0-Shared/bg-circles-image-transparent.png
new file mode 100644
index 00000000..ccd53f13
Binary files /dev/null and b/assets/img/0-Shared/bg-circles-image-transparent.png differ
diff --git a/assets/img/0-Shared/bg-circles-image.png b/assets/img/0-Shared/bg-circles-image.png
new file mode 100644
index 00000000..5dc05ec6
Binary files /dev/null and b/assets/img/0-Shared/bg-circles-image.png differ
diff --git a/assets/img/0-Shared/bg-top-left.svg b/assets/img/0-Shared/bg-top-left.svg
new file mode 100644
index 00000000..a941ad7b
--- /dev/null
+++ b/assets/img/0-Shared/bg-top-left.svg
@@ -0,0 +1,181 @@
+
diff --git a/assets/img/0-Shared/dynamic-wang-bg-1.png b/assets/img/0-Shared/dynamic-wang-bg-1.png
new file mode 100644
index 00000000..f6f05139
Binary files /dev/null and b/assets/img/0-Shared/dynamic-wang-bg-1.png differ
diff --git a/assets/img/0-Shared/dynamic-wang-bg-2.png b/assets/img/0-Shared/dynamic-wang-bg-2.png
new file mode 100644
index 00000000..1754f883
Binary files /dev/null and b/assets/img/0-Shared/dynamic-wang-bg-2.png differ
diff --git a/assets/img/0-Shared/info-graphics/Block-header-hashing.png b/assets/img/0-Shared/info-graphics/Block-header-hashing.png
new file mode 100644
index 00000000..d9d6def2
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/Block-header-hashing.png differ
diff --git a/assets/img/0-Shared/info-graphics/block-diagram.png b/assets/img/0-Shared/info-graphics/block-diagram.png
new file mode 100644
index 00000000..c32d189b
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/block-diagram.png differ
diff --git a/assets/img/0-Shared/info-graphics/compair-consensus-algos.png b/assets/img/0-Shared/info-graphics/compair-consensus-algos.png
new file mode 100644
index 00000000..11402acf
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/compair-consensus-algos.png differ
diff --git a/assets/img/0-Shared/info-graphics/consensus-compaired.png b/assets/img/0-Shared/info-graphics/consensus-compaired.png
new file mode 100644
index 00000000..46eee7ef
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/consensus-compaired.png differ
diff --git a/assets/img/0-Shared/info-graphics/consensus-layers-outline.png b/assets/img/0-Shared/info-graphics/consensus-layers-outline.png
new file mode 100644
index 00000000..d459b868
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/consensus-layers-outline.png differ
diff --git a/assets/img/0-Shared/info-graphics/consensus-mechanism.png b/assets/img/0-Shared/info-graphics/consensus-mechanism.png
new file mode 100644
index 00000000..ea07154f
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/consensus-mechanism.png differ
diff --git a/assets/img/0-Shared/info-graphics/digital-sig.png b/assets/img/0-Shared/info-graphics/digital-sig.png
new file mode 100644
index 00000000..0be18454
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/digital-sig.png differ
diff --git a/assets/img/0-Shared/info-graphics/dot-governance.png b/assets/img/0-Shared/info-graphics/dot-governance.png
new file mode 100644
index 00000000..2f8f1470
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/dot-governance.png differ
diff --git a/assets/img/0-Shared/info-graphics/dot-voting-box.png b/assets/img/0-Shared/info-graphics/dot-voting-box.png
new file mode 100644
index 00000000..08cc9a4a
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/dot-voting-box.png differ
diff --git a/assets/img/0-Shared/info-graphics/gov-vq-roles.png b/assets/img/0-Shared/info-graphics/gov-vq-roles.png
new file mode 100644
index 00000000..186af645
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/gov-vq-roles.png differ
diff --git a/assets/img/0-Shared/info-graphics/hash-digests.png b/assets/img/0-Shared/info-graphics/hash-digests.png
new file mode 100644
index 00000000..b0dee1fb
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/hash-digests.png differ
diff --git a/assets/img/0-Shared/info-graphics/merkel-trie.png b/assets/img/0-Shared/info-graphics/merkel-trie.png
new file mode 100644
index 00000000..cfdf993e
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/merkel-trie.png differ
diff --git a/assets/img/0-Shared/info-graphics/message-signatures.png b/assets/img/0-Shared/info-graphics/message-signatures.png
new file mode 100644
index 00000000..bfa1dd59
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/message-signatures.png differ
diff --git a/assets/img/0-Shared/info-graphics/people-network.png b/assets/img/0-Shared/info-graphics/people-network.png
new file mode 100644
index 00000000..43c4640d
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/people-network.png differ
diff --git a/assets/img/0-Shared/info-graphics/polkadot-ecosystem-overview.png b/assets/img/0-Shared/info-graphics/polkadot-ecosystem-overview.png
new file mode 100644
index 00000000..f3a17ab8
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/polkadot-ecosystem-overview.png differ
diff --git a/assets/img/0-Shared/info-graphics/private-keys.png b/assets/img/0-Shared/info-graphics/private-keys.png
new file mode 100644
index 00000000..74e15f4e
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/private-keys.png differ
diff --git a/assets/img/0-Shared/info-graphics/relay-vs-para-vs-bridge.png b/assets/img/0-Shared/info-graphics/relay-vs-para-vs-bridge.png
new file mode 100644
index 00000000..75b97496
Binary files /dev/null and b/assets/img/0-Shared/info-graphics/relay-vs-para-vs-bridge.png differ
diff --git a/assets/img/0-Shared/logo/DOT-pink.svg b/assets/img/0-Shared/logo/DOT-pink.svg
new file mode 100644
index 00000000..9d5bad67
--- /dev/null
+++ b/assets/img/0-Shared/logo/DOT-pink.svg
@@ -0,0 +1,14 @@
+
+
+
diff --git a/assets/img/0-Shared/logo/bitcoin.png b/assets/img/0-Shared/logo/bitcoin.png
new file mode 100644
index 00000000..2a9f4f78
Binary files /dev/null and b/assets/img/0-Shared/logo/bitcoin.png differ
diff --git a/assets/img/0-Shared/logo/dot-ksm.png b/assets/img/0-Shared/logo/dot-ksm.png
new file mode 100644
index 00000000..8eb8548c
Binary files /dev/null and b/assets/img/0-Shared/logo/dot-ksm.png differ
diff --git a/assets/img/0-Shared/logo/etehreum-solid.png b/assets/img/0-Shared/logo/etehreum-solid.png
new file mode 100644
index 00000000..a3db9cc1
Binary files /dev/null and b/assets/img/0-Shared/logo/etehreum-solid.png differ
diff --git a/assets/img/0-Shared/logo/ethereum-transp.png b/assets/img/0-Shared/logo/ethereum-transp.png
new file mode 100644
index 00000000..388713c7
Binary files /dev/null and b/assets/img/0-Shared/logo/ethereum-transp.png differ
diff --git a/assets/img/0-Shared/logo/ferris-webassembly.png b/assets/img/0-Shared/logo/ferris-webassembly.png
new file mode 100644
index 00000000..6f75eb28
Binary files /dev/null and b/assets/img/0-Shared/logo/ferris-webassembly.png differ
diff --git a/assets/img/0-Shared/logo/github-white.png b/assets/img/0-Shared/logo/github-white.png
new file mode 100644
index 00000000..0972ae57
Binary files /dev/null and b/assets/img/0-Shared/logo/github-white.png differ
diff --git a/assets/img/0-Shared/logo/ink-white.png b/assets/img/0-Shared/logo/ink-white.png
new file mode 100644
index 00000000..03a50675
Binary files /dev/null and b/assets/img/0-Shared/logo/ink-white.png differ
diff --git a/assets/img/0-Shared/logo/parity-black.png b/assets/img/0-Shared/logo/parity-black.png
new file mode 100644
index 00000000..110e297d
Binary files /dev/null and b/assets/img/0-Shared/logo/parity-black.png differ
diff --git a/assets/img/0-Shared/logo/parity-tiny.png b/assets/img/0-Shared/logo/parity-tiny.png
new file mode 100644
index 00000000..f68f8be6
Binary files /dev/null and b/assets/img/0-Shared/logo/parity-tiny.png differ
diff --git a/assets/img/0-Shared/logo/parity-white.png b/assets/img/0-Shared/logo/parity-white.png
new file mode 100644
index 00000000..cc1319bb
Binary files /dev/null and b/assets/img/0-Shared/logo/parity-white.png differ
diff --git a/assets/img/0-Shared/logo/pba-logo-black.svg b/assets/img/0-Shared/logo/pba-logo-black.svg
new file mode 100644
index 00000000..29a7bff1
--- /dev/null
+++ b/assets/img/0-Shared/logo/pba-logo-black.svg
@@ -0,0 +1,46 @@
+
diff --git a/assets/img/0-Shared/logo/pba-logo-white.svg b/assets/img/0-Shared/logo/pba-logo-white.svg
new file mode 100644
index 00000000..449fbf62
--- /dev/null
+++ b/assets/img/0-Shared/logo/pba-logo-white.svg
@@ -0,0 +1,61 @@
+
+
\ No newline at end of file
diff --git a/assets/img/0-Shared/logo/polkadot_pink-white.svg b/assets/img/0-Shared/logo/polkadot_pink-white.svg
new file mode 100755
index 00000000..0a32c588
--- /dev/null
+++ b/assets/img/0-Shared/logo/polkadot_pink-white.svg
@@ -0,0 +1,45 @@
+
+
+
diff --git a/assets/img/0-Shared/logo/rust-black.png b/assets/img/0-Shared/logo/rust-black.png
new file mode 100644
index 00000000..7f5f13d5
Binary files /dev/null and b/assets/img/0-Shared/logo/rust-black.png differ
diff --git a/assets/img/0-Shared/logo/rust-white.png b/assets/img/0-Shared/logo/rust-white.png
new file mode 100644
index 00000000..cfc5da77
Binary files /dev/null and b/assets/img/0-Shared/logo/rust-white.png differ
diff --git a/assets/img/0-Shared/logo/substrate-black.png b/assets/img/0-Shared/logo/substrate-black.png
new file mode 100644
index 00000000..edd568f3
Binary files /dev/null and b/assets/img/0-Shared/logo/substrate-black.png differ
diff --git a/assets/img/0-Shared/logo/substrate-old-logo-white.png b/assets/img/0-Shared/logo/substrate-old-logo-white.png
new file mode 100644
index 00000000..e53868aa
Binary files /dev/null and b/assets/img/0-Shared/logo/substrate-old-logo-white.png differ
diff --git a/assets/img/0-Shared/logo/substrate-white.png b/assets/img/0-Shared/logo/substrate-white.png
new file mode 100644
index 00000000..7bc3546d
Binary files /dev/null and b/assets/img/0-Shared/logo/substrate-white.png differ
diff --git a/assets/img/0-Shared/logo/webassembly-black.png b/assets/img/0-Shared/logo/webassembly-black.png
new file mode 100644
index 00000000..bfa60c52
Binary files /dev/null and b/assets/img/0-Shared/logo/webassembly-black.png differ
diff --git a/content/polkadot/decisions/img/webassembly-blue.png b/assets/img/0-Shared/logo/webassembly-blue.png
similarity index 100%
rename from content/polkadot/decisions/img/webassembly-blue.png
rename to assets/img/0-Shared/logo/webassembly-blue.png
diff --git a/assets/img/0-Shared/logo/webassembly-white.png b/assets/img/0-Shared/logo/webassembly-white.png
new file mode 100644
index 00000000..73cfa748
Binary files /dev/null and b/assets/img/0-Shared/logo/webassembly-white.png differ
diff --git a/assets/img/0-Shared/meta-slides/chefs.jpg b/assets/img/0-Shared/meta-slides/chefs.jpg
new file mode 100644
index 00000000..fc2c6d66
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/chefs.jpg differ
diff --git a/assets/img/0-Shared/meta-slides/competency-checklist.png b/assets/img/0-Shared/meta-slides/competency-checklist.png
new file mode 100644
index 00000000..b7659dd3
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/competency-checklist.png differ
diff --git a/assets/img/0-Shared/meta-slides/do-it.webp b/assets/img/0-Shared/meta-slides/do-it.webp
new file mode 100644
index 00000000..fd221b24
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/do-it.webp differ
diff --git a/assets/img/0-Shared/meta-slides/hand.png b/assets/img/0-Shared/meta-slides/hand.png
new file mode 100644
index 00000000..44d21f65
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/hand.png differ
diff --git a/assets/img/0-Shared/meta-slides/phone.png b/assets/img/0-Shared/meta-slides/phone.png
new file mode 100644
index 00000000..84725475
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/phone.png differ
diff --git a/assets/img/0-Shared/meta-slides/pledge.png b/assets/img/0-Shared/meta-slides/pledge.png
new file mode 100644
index 00000000..7be9be0c
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/pledge.png differ
diff --git a/assets/img/0-Shared/meta-slides/salute-team.jpg b/assets/img/0-Shared/meta-slides/salute-team.jpg
new file mode 100644
index 00000000..b813a9ed
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/salute-team.jpg differ
diff --git a/assets/img/0-Shared/meta-slides/sleep.png b/assets/img/0-Shared/meta-slides/sleep.png
new file mode 100644
index 00000000..c47c06ee
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/sleep.png differ
diff --git a/assets/img/0-Shared/meta-slides/uba1.png b/assets/img/0-Shared/meta-slides/uba1.png
new file mode 100644
index 00000000..acf3a5c9
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/uba1.png differ
diff --git a/assets/img/0-Shared/meta-slides/uba2.png b/assets/img/0-Shared/meta-slides/uba2.png
new file mode 100644
index 00000000..a48920d3
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/uba2.png differ
diff --git a/assets/img/0-Shared/meta-slides/uba3.png b/assets/img/0-Shared/meta-slides/uba3.png
new file mode 100644
index 00000000..903a3917
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/uba3.png differ
diff --git a/assets/img/0-Shared/meta-slides/uba4.png b/assets/img/0-Shared/meta-slides/uba4.png
new file mode 100644
index 00000000..3d3337dc
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/uba4.png differ
diff --git a/assets/img/0-Shared/meta-slides/uba5.png b/assets/img/0-Shared/meta-slides/uba5.png
new file mode 100644
index 00000000..5a18b234
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/uba5.png differ
diff --git a/assets/img/0-Shared/meta-slides/uba6.png b/assets/img/0-Shared/meta-slides/uba6.png
new file mode 100644
index 00000000..00d07566
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/uba6.png differ
diff --git a/assets/img/0-Shared/meta-slides/uba7.png b/assets/img/0-Shared/meta-slides/uba7.png
new file mode 100644
index 00000000..f3fa305f
Binary files /dev/null and b/assets/img/0-Shared/meta-slides/uba7.png differ
diff --git a/assets/img/0-Shared/mission-accomplished.gif b/assets/img/0-Shared/mission-accomplished.gif
new file mode 100644
index 00000000..2fbed977
Binary files /dev/null and b/assets/img/0-Shared/mission-accomplished.gif differ
diff --git a/assets/img/0-Shared/parachains/breakdown/-collators.png b/assets/img/0-Shared/parachains/breakdown/-collators.png
new file mode 100644
index 00000000..4543e222
Binary files /dev/null and b/assets/img/0-Shared/parachains/breakdown/-collators.png differ
diff --git a/assets/img/0-Shared/parachains/breakdown/1-relay.png b/assets/img/0-Shared/parachains/breakdown/1-relay.png
new file mode 100644
index 00000000..bc593d07
Binary files /dev/null and b/assets/img/0-Shared/parachains/breakdown/1-relay.png differ
diff --git a/assets/img/0-Shared/parachains/breakdown/2-validators.png b/assets/img/0-Shared/parachains/breakdown/2-validators.png
new file mode 100644
index 00000000..e03d85e7
Binary files /dev/null and b/assets/img/0-Shared/parachains/breakdown/2-validators.png differ
diff --git a/assets/img/0-Shared/parachains/breakdown/3-parahain.png b/assets/img/0-Shared/parachains/breakdown/3-parahain.png
new file mode 100644
index 00000000..d50084e5
Binary files /dev/null and b/assets/img/0-Shared/parachains/breakdown/3-parahain.png differ
diff --git a/assets/img/0-Shared/parachains/breakdown/5-bridge.png b/assets/img/0-Shared/parachains/breakdown/5-bridge.png
new file mode 100644
index 00000000..7b118bf1
Binary files /dev/null and b/assets/img/0-Shared/parachains/breakdown/5-bridge.png differ
diff --git a/assets/img/0-Shared/parachains/overlapping/1-overlapping-collators.png b/assets/img/0-Shared/parachains/overlapping/1-overlapping-collators.png
new file mode 100644
index 00000000..fa8fb7a3
Binary files /dev/null and b/assets/img/0-Shared/parachains/overlapping/1-overlapping-collators.png differ
diff --git a/assets/img/0-Shared/parachains/overlapping/2-overlapping-collators.png b/assets/img/0-Shared/parachains/overlapping/2-overlapping-collators.png
new file mode 100644
index 00000000..925e859c
Binary files /dev/null and b/assets/img/0-Shared/parachains/overlapping/2-overlapping-collators.png differ
diff --git a/assets/img/0-Shared/parachains/overlapping/3-overlapping-collators.png b/assets/img/0-Shared/parachains/overlapping/3-overlapping-collators.png
new file mode 100644
index 00000000..610eb2d0
Binary files /dev/null and b/assets/img/0-Shared/parachains/overlapping/3-overlapping-collators.png differ
diff --git a/content/polkadot/decisions/img/parachains-transparent.png b/assets/img/0-Shared/parachains/parachains-transparent.png
similarity index 100%
rename from content/polkadot/decisions/img/parachains-transparent.png
rename to assets/img/0-Shared/parachains/parachains-transparent.png
diff --git a/assets/img/0-Shared/parachains/parachains-white.png b/assets/img/0-Shared/parachains/parachains-white.png
new file mode 100644
index 00000000..b42f7f9e
Binary files /dev/null and b/assets/img/0-Shared/parachains/parachains-white.png differ
diff --git a/assets/img/0-Shared/parachains/relay-network-diagram.png b/assets/img/0-Shared/parachains/relay-network-diagram.png
new file mode 100644
index 00000000..df960222
Binary files /dev/null and b/assets/img/0-Shared/parachains/relay-network-diagram.png differ
diff --git a/assets/img/0-Shared/parachains/ven-diagram-solo-para.png b/assets/img/0-Shared/parachains/ven-diagram-solo-para.png
new file mode 100644
index 00000000..f80f43e6
Binary files /dev/null and b/assets/img/0-Shared/parachains/ven-diagram-solo-para.png differ
diff --git a/assets/img/0-Shared/people/BUFFICORN_2521_ALT_smol.gif b/assets/img/0-Shared/people/BUFFICORN_2521_ALT_smol.gif
new file mode 100644
index 00000000..efff7717
Binary files /dev/null and b/assets/img/0-Shared/people/BUFFICORN_2521_ALT_smol.gif differ
diff --git a/assets/img/0-Shared/people/alex.jpg b/assets/img/0-Shared/people/alex.jpg
new file mode 100644
index 00000000..817c29af
Binary files /dev/null and b/assets/img/0-Shared/people/alex.jpg differ
diff --git a/assets/img/0-Shared/people/alfonso.png b/assets/img/0-Shared/people/alfonso.png
new file mode 100644
index 00000000..22d4616a
Binary files /dev/null and b/assets/img/0-Shared/people/alfonso.png differ
diff --git a/assets/img/0-Shared/people/alistair.png b/assets/img/0-Shared/people/alistair.png
new file mode 100644
index 00000000..6b05ca21
Binary files /dev/null and b/assets/img/0-Shared/people/alistair.png differ
diff --git a/assets/img/0-Shared/people/basti.png b/assets/img/0-Shared/people/basti.png
new file mode 100644
index 00000000..2b18ffaf
Binary files /dev/null and b/assets/img/0-Shared/people/basti.png differ
diff --git a/assets/img/0-Shared/people/gav.png b/assets/img/0-Shared/people/gav.png
new file mode 100644
index 00000000..01a498e0
Binary files /dev/null and b/assets/img/0-Shared/people/gav.png differ
diff --git a/assets/img/0-Shared/people/joe.png b/assets/img/0-Shared/people/joe.png
new file mode 100644
index 00000000..39eb94ae
Binary files /dev/null and b/assets/img/0-Shared/people/joe.png differ
diff --git a/assets/img/0-Shared/people/jonas.png b/assets/img/0-Shared/people/jonas.png
new file mode 100644
index 00000000..54a9ff94
Binary files /dev/null and b/assets/img/0-Shared/people/jonas.png differ
diff --git a/assets/img/0-Shared/people/joshy.png b/assets/img/0-Shared/people/joshy.png
new file mode 100644
index 00000000..c9a83b83
Binary files /dev/null and b/assets/img/0-Shared/people/joshy.png differ
diff --git a/assets/img/0-Shared/people/kian.png b/assets/img/0-Shared/people/kian.png
new file mode 100644
index 00000000..763c75ce
Binary files /dev/null and b/assets/img/0-Shared/people/kian.png differ
diff --git a/assets/img/0-Shared/people/michi.png b/assets/img/0-Shared/people/michi.png
new file mode 100644
index 00000000..cecf3170
Binary files /dev/null and b/assets/img/0-Shared/people/michi.png differ
diff --git a/assets/img/0-Shared/people/shawn.png b/assets/img/0-Shared/people/shawn.png
new file mode 100644
index 00000000..a4a916d4
Binary files /dev/null and b/assets/img/0-Shared/people/shawn.png differ
diff --git a/assets/img/0-Shared/placeholder/Landscape_mountain.jpg b/assets/img/0-Shared/placeholder/Landscape_mountain.jpg
new file mode 100644
index 00000000..ce1c21fe
Binary files /dev/null and b/assets/img/0-Shared/placeholder/Landscape_mountain.jpg differ
diff --git a/assets/img/0-Shared/placeholder/carry-you.png b/assets/img/0-Shared/placeholder/carry-you.png
new file mode 100644
index 00000000..e4fe572e
Binary files /dev/null and b/assets/img/0-Shared/placeholder/carry-you.png differ
diff --git a/assets/img/0-Shared/placeholder/profile.png b/assets/img/0-Shared/placeholder/profile.png
new file mode 100644
index 00000000..90dab26a
Binary files /dev/null and b/assets/img/0-Shared/placeholder/profile.png differ
diff --git a/assets/img/0-Shared/placeholder/we-can-do-it.png b/assets/img/0-Shared/placeholder/we-can-do-it.png
new file mode 100644
index 00000000..29533a57
Binary files /dev/null and b/assets/img/0-Shared/placeholder/we-can-do-it.png differ
diff --git a/content/polkadot/availability-cores/img/Processor_Cores.jpeg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/Processor_Cores.jpeg
similarity index 100%
rename from content/polkadot/availability-cores/img/Processor_Cores.jpeg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/Processor_Cores.jpeg
diff --git a/content/polkadot/availability-cores/img/Train.jpeg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/Train.jpeg
similarity index 100%
rename from content/polkadot/availability-cores/img/Train.jpeg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/Train.jpeg
diff --git a/content/polkadot/availability-cores/img/advantage.png b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/advantage.png
similarity index 100%
rename from content/polkadot/availability-cores/img/advantage.png
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/advantage.png
diff --git a/content/polkadot/availability-cores/img/cores_big_picture.svg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/cores_big_picture.svg
similarity index 100%
rename from content/polkadot/availability-cores/img/cores_big_picture.svg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/cores_big_picture.svg
diff --git a/content/polkadot/availability-cores/img/dice.jpeg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/dice.jpeg
similarity index 100%
rename from content/polkadot/availability-cores/img/dice.jpeg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/dice.jpeg
diff --git a/content/polkadot/availability-cores/img/exotic_core_scheduling.svg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/exotic_core_scheduling.svg
similarity index 100%
rename from content/polkadot/availability-cores/img/exotic_core_scheduling.svg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/exotic_core_scheduling.svg
diff --git a/content/polkadot/availability-cores/img/occupying_assigned_cores_on_demand.svg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/occupying_assigned_cores_on_demand.svg
similarity index 100%
rename from content/polkadot/availability-cores/img/occupying_assigned_cores_on_demand.svg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/occupying_assigned_cores_on_demand.svg
diff --git a/content/polkadot/availability-cores/img/occupying_assigned_cores_with_lease.svg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/occupying_assigned_cores_with_lease.svg
similarity index 100%
rename from content/polkadot/availability-cores/img/occupying_assigned_cores_with_lease.svg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/occupying_assigned_cores_with_lease.svg
diff --git a/content/polkadot/availability-cores/img/pairing_backing_groups_with_cores.svg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/pairing_backing_groups_with_cores.svg
similarity index 100%
rename from content/polkadot/availability-cores/img/pairing_backing_groups_with_cores.svg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/pairing_backing_groups_with_cores.svg
diff --git a/content/polkadot/availability-cores/img/pairing_leases_and_claims_with_cores.svg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/pairing_leases_and_claims_with_cores.svg
similarity index 100%
rename from content/polkadot/availability-cores/img/pairing_leases_and_claims_with_cores.svg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/pairing_leases_and_claims_with_cores.svg
diff --git a/content/polkadot/availability-cores/img/road.jpeg b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/road.jpeg
similarity index 100%
rename from content/polkadot/availability-cores/img/road.jpeg
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/road.jpeg
diff --git a/content/polkadot/execution-sharding/img/validator-groups.png b/assets/img/5-Polkadot/Availability_Cores_Deep_Dive/validator-groups.png
similarity index 100%
rename from content/polkadot/execution-sharding/img/validator-groups.png
rename to assets/img/5-Polkadot/Availability_Cores_Deep_Dive/validator-groups.png
diff --git a/content/substrate/scale/img/Big-Endian.svg b/assets/img/5-Substrate/Big-Endian.svg
similarity index 100%
rename from content/substrate/scale/img/Big-Endian.svg
rename to assets/img/5-Substrate/Big-Endian.svg
diff --git a/content/substrate/scale/img/Little-Endian.svg b/assets/img/5-Substrate/Little-Endian.svg
similarity index 100%
rename from content/substrate/scale/img/Little-Endian.svg
rename to assets/img/5-Substrate/Little-Endian.svg
diff --git a/content/blockchain-contracts/bytecode/img/wasm_logo.png b/assets/img/5-Substrate/WebAssembly.png
similarity index 100%
rename from content/blockchain-contracts/bytecode/img/wasm_logo.png
rename to assets/img/5-Substrate/WebAssembly.png
diff --git a/assets/img/5-Substrate/dev-4-1-comms-format.svg b/assets/img/5-Substrate/dev-4-1-comms-format.svg
new file mode 100644
index 00000000..b15273c8
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-comms-format.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-1-comms.svg b/assets/img/5-Substrate/dev-4-1-comms.svg
new file mode 100644
index 00000000..09bffc16
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-comms.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-1-contracts-full.svg b/assets/img/5-Substrate/dev-4-1-contracts-full.svg
new file mode 100644
index 00000000..662326b9
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-contracts-full.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-1-contracts.svg b/assets/img/5-Substrate/dev-4-1-contracts.svg
new file mode 100644
index 00000000..9a07c0cb
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-contracts.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/intro/img/dev-4-1-forkless-1.svg b/assets/img/5-Substrate/dev-4-1-forkless-1.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-forkless-1.svg
rename to assets/img/5-Substrate/dev-4-1-forkless-1.svg
diff --git a/content/substrate/intro/img/dev-4-1-forkless-2.svg b/assets/img/5-Substrate/dev-4-1-forkless-2.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-forkless-2.svg
rename to assets/img/5-Substrate/dev-4-1-forkless-2.svg
diff --git a/assets/img/5-Substrate/dev-4-1-freedom.svg b/assets/img/5-Substrate/dev-4-1-freedom.svg
new file mode 100644
index 00000000..e877ad06
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-freedom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/intro/img/dev-4-1-ink.jpeg b/assets/img/5-Substrate/dev-4-1-ink.jpeg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-ink.jpeg
rename to assets/img/5-Substrate/dev-4-1-ink.jpeg
diff --git a/content/substrate/intro/img/dev-4-1-json.svg b/assets/img/5-Substrate/dev-4-1-json.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-json.svg
rename to assets/img/5-Substrate/dev-4-1-json.svg
diff --git a/content/substrate/intro/img/dev-4-1-polkadot.svg b/assets/img/5-Substrate/dev-4-1-polkadot.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-polkadot.svg
rename to assets/img/5-Substrate/dev-4-1-polkadot.svg
diff --git a/assets/img/5-Substrate/dev-4-1-smoldot-browser.svg b/assets/img/5-Substrate/dev-4-1-smoldot-browser.svg
new file mode 100644
index 00000000..08611eed
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-smoldot-browser.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-1-smoldot.svg b/assets/img/5-Substrate/dev-4-1-smoldot.svg
new file mode 100644
index 00000000..53e7192b
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-smoldot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/intro/img/dev-4-1-speed.png b/assets/img/5-Substrate/dev-4-1-speed.png
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-speed.png
rename to assets/img/5-Substrate/dev-4-1-speed.png
diff --git a/assets/img/5-Substrate/dev-4-1-state-code-next.pdf b/assets/img/5-Substrate/dev-4-1-state-code-next.pdf
new file mode 100644
index 00000000..0dac7dbd
Binary files /dev/null and b/assets/img/5-Substrate/dev-4-1-state-code-next.pdf differ
diff --git a/content/substrate/intro/img/dev-4-1-state-code-next.svg b/assets/img/5-Substrate/dev-4-1-state-code-next.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-state-code-next.svg
rename to assets/img/5-Substrate/dev-4-1-state-code-next.svg
diff --git a/assets/img/5-Substrate/dev-4-1-state-code.svg b/assets/img/5-Substrate/dev-4-1-state-code.svg
new file mode 100644
index 00000000..3a4f8d8f
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-state-code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/intro/img/dev-4-1-state-database.svg b/assets/img/5-Substrate/dev-4-1-state-database.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-state-database.svg
rename to assets/img/5-Substrate/dev-4-1-state-database.svg
diff --git a/content/substrate/intro/img/dev-4-1-state-def.svg b/assets/img/5-Substrate/dev-4-1-state-def.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-state-def.svg
rename to assets/img/5-Substrate/dev-4-1-state-def.svg
diff --git a/assets/img/5-Substrate/dev-4-1-state-opaque.svg b/assets/img/5-Substrate/dev-4-1-state-opaque.svg
new file mode 100644
index 00000000..e3b915be
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-state-opaque.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/intro/img/dev-4-1-state-transition-def.svg b/assets/img/5-Substrate/dev-4-1-state-transition-def.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-state-transition-def.svg
rename to assets/img/5-Substrate/dev-4-1-state-transition-def.svg
diff --git a/content/substrate/intro/img/dev-4-1-state.svg b/assets/img/5-Substrate/dev-4-1-state.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-state.svg
rename to assets/img/5-Substrate/dev-4-1-state.svg
diff --git a/assets/img/5-Substrate/dev-4-1-substrate-meta-substrate.svg b/assets/img/5-Substrate/dev-4-1-substrate-meta-substrate.svg
new file mode 100644
index 00000000..797b72b6
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-substrate-meta-substrate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-1-substrate-meta-version.svg b/assets/img/5-Substrate/dev-4-1-substrate-meta-version.svg
new file mode 100644
index 00000000..b38cab1f
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-substrate-meta-version.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-1-substrate-meta.svg b/assets/img/5-Substrate/dev-4-1-substrate-meta.svg
new file mode 100644
index 00000000..e743ac83
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-substrate-meta.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-1-substrate-monol-2.svg b/assets/img/5-Substrate/dev-4-1-substrate-monol-2.svg
new file mode 100644
index 00000000..cfda2eca
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-substrate-monol-2.svg
@@ -0,0 +1 @@
+
diff --git a/content/substrate/intro/img/dev-4-1-substrate-monol.svg b/assets/img/5-Substrate/dev-4-1-substrate-monol.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-substrate-monol.svg
rename to assets/img/5-Substrate/dev-4-1-substrate-monol.svg
diff --git a/content/substrate/intro/img/dev-4-1-substrate-new-1.svg b/assets/img/5-Substrate/dev-4-1-substrate-new-1.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-substrate-new-1.svg
rename to assets/img/5-Substrate/dev-4-1-substrate-new-1.svg
diff --git a/content/substrate/intro/img/dev-4-1-substrate-new-2.svg b/assets/img/5-Substrate/dev-4-1-substrate-new-2.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-substrate-new-2.svg
rename to assets/img/5-Substrate/dev-4-1-substrate-new-2.svg
diff --git a/content/substrate/intro/img/dev-4-1-substrate-new-3.svg b/assets/img/5-Substrate/dev-4-1-substrate-new-3.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-substrate-new-3.svg
rename to assets/img/5-Substrate/dev-4-1-substrate-new-3.svg
diff --git a/content/substrate/intro/img/dev-4-1-substrate-website.gif b/assets/img/5-Substrate/dev-4-1-substrate-website.gif
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-substrate-website.gif
rename to assets/img/5-Substrate/dev-4-1-substrate-website.gif
diff --git a/assets/img/5-Substrate/dev-4-1-substrate.svg b/assets/img/5-Substrate/dev-4-1-substrate.svg
new file mode 100644
index 00000000..53b0fd09
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-1-substrate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/intro/img/dev-4-1-wasm-langs.svg b/assets/img/5-Substrate/dev-4-1-wasm-langs.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-wasm-langs.svg
rename to assets/img/5-Substrate/dev-4-1-wasm-langs.svg
diff --git a/content/substrate/intro/img/dev-4-1-wasm.svg b/assets/img/5-Substrate/dev-4-1-wasm.svg
similarity index 100%
rename from content/substrate/intro/img/dev-4-1-wasm.svg
rename to assets/img/5-Substrate/dev-4-1-wasm.svg
diff --git a/assets/img/5-Substrate/dev-4-2-external.svg b/assets/img/5-Substrate/dev-4-2-external.svg
new file mode 100644
index 00000000..8d731914
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-2-external.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/wasm/img/dev-4-3-PJS.png b/assets/img/5-Substrate/dev-4-3-PJS.png
similarity index 100%
rename from content/substrate/wasm/img/dev-4-3-PJS.png
rename to assets/img/5-Substrate/dev-4-3-PJS.png
diff --git a/assets/img/5-Substrate/dev-4-3-author-builder.svg b/assets/img/5-Substrate/dev-4-3-author-builder.svg
new file mode 100644
index 00000000..111701b4
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-author-builder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-3-author-pool.svg b/assets/img/5-Substrate/dev-4-3-author-pool.svg
new file mode 100644
index 00000000..772fbb32
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-author-pool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-3-base-16.svg b/assets/img/5-Substrate/dev-4-3-base-16.svg
new file mode 100644
index 00000000..d3334d88
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-base-16.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-3-base-2.svg b/assets/img/5-Substrate/dev-4-3-base-2.svg
new file mode 100644
index 00000000..18a3dff5
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-base-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/wasm/img/dev-4-3-block-opaque.svg b/assets/img/5-Substrate/dev-4-3-block-opaque.svg
similarity index 100%
rename from content/substrate/wasm/img/dev-4-3-block-opaque.svg
rename to assets/img/5-Substrate/dev-4-3-block-opaque.svg
diff --git a/assets/img/5-Substrate/dev-4-3-block-opaqueu.svg b/assets/img/5-Substrate/dev-4-3-block-opaqueu.svg
new file mode 100644
index 00000000..fa13f5e2
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-block-opaqueu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/storage/img/dev-4-3-child.svg b/assets/img/5-Substrate/dev-4-3-child.svg
similarity index 100%
rename from content/substrate/storage/img/dev-4-3-child.svg
rename to assets/img/5-Substrate/dev-4-3-child.svg
diff --git a/assets/img/5-Substrate/dev-4-3-defs-merkle.svg b/assets/img/5-Substrate/dev-4-3-defs-merkle.svg
new file mode 100644
index 00000000..67c35ae5
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-defs-merkle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-3-defs-radix.svg b/assets/img/5-Substrate/dev-4-3-defs-radix.svg
new file mode 100644
index 00000000..c4600468
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-defs-radix.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-3-defs-trie.svg b/assets/img/5-Substrate/dev-4-3-defs-trie.svg
new file mode 100644
index 00000000..ba918a91
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-defs-trie.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/wasm/img/dev-4-3-full-comm.svg b/assets/img/5-Substrate/dev-4-3-full-comm.svg
similarity index 89%
rename from content/substrate/wasm/img/dev-4-3-full-comm.svg
rename to assets/img/5-Substrate/dev-4-3-full-comm.svg
index dfe59f76..6eff82b9 100644
--- a/content/substrate/wasm/img/dev-4-3-full-comm.svg
+++ b/assets/img/5-Substrate/dev-4-3-full-comm.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/substrate/intro/img/dev-4-3-full.svg b/assets/img/5-Substrate/dev-4-3-full.svg
similarity index 89%
rename from content/substrate/intro/img/dev-4-3-full.svg
rename to assets/img/5-Substrate/dev-4-3-full.svg
index 80e018f1..c6e77e76 100644
--- a/content/substrate/intro/img/dev-4-3-full.svg
+++ b/assets/img/5-Substrate/dev-4-3-full.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/substrate/wasm/img/dev-4-3-import.svg b/assets/img/5-Substrate/dev-4-3-import.svg
similarity index 100%
rename from content/substrate/wasm/img/dev-4-3-import.svg
rename to assets/img/5-Substrate/dev-4-3-import.svg
diff --git a/content/substrate/storage/img/dev-4-3-io.svg b/assets/img/5-Substrate/dev-4-3-io.svg
similarity index 100%
rename from content/substrate/storage/img/dev-4-3-io.svg
rename to assets/img/5-Substrate/dev-4-3-io.svg
diff --git a/assets/img/5-Substrate/dev-4-3-native-1.svg b/assets/img/5-Substrate/dev-4-3-native-1.svg
new file mode 100644
index 00000000..205771d9
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-native-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/wasm/img/dev-4-3-native.svg b/assets/img/5-Substrate/dev-4-3-native.svg
similarity index 100%
rename from content/substrate/wasm/img/dev-4-3-native.svg
rename to assets/img/5-Substrate/dev-4-3-native.svg
diff --git a/content/substrate/storage/img/dev-4-3-pruning-1.svg b/assets/img/5-Substrate/dev-4-3-pruning-1.svg
similarity index 100%
rename from content/substrate/storage/img/dev-4-3-pruning-1.svg
rename to assets/img/5-Substrate/dev-4-3-pruning-1.svg
diff --git a/content/substrate/storage/img/dev-4-3-pruning-2.svg b/assets/img/5-Substrate/dev-4-3-pruning-2.svg
similarity index 100%
rename from content/substrate/storage/img/dev-4-3-pruning-2.svg
rename to assets/img/5-Substrate/dev-4-3-pruning-2.svg
diff --git a/content/substrate/storage/img/dev-4-3-pruning-3.svg b/assets/img/5-Substrate/dev-4-3-pruning-3.svg
similarity index 100%
rename from content/substrate/storage/img/dev-4-3-pruning-3.svg
rename to assets/img/5-Substrate/dev-4-3-pruning-3.svg
diff --git a/content/substrate/storage/img/dev-4-3-pruning-4.svg b/assets/img/5-Substrate/dev-4-3-pruning-4.svg
similarity index 100%
rename from content/substrate/storage/img/dev-4-3-pruning-4.svg
rename to assets/img/5-Substrate/dev-4-3-pruning-4.svg
diff --git a/content/substrate/wasm/img/dev-4-3-substrate-wasm.png b/assets/img/5-Substrate/dev-4-3-substrate-wasm.png
similarity index 100%
rename from content/substrate/wasm/img/dev-4-3-substrate-wasm.png
rename to assets/img/5-Substrate/dev-4-3-substrate-wasm.png
diff --git a/content/substrate/wasm/img/dev-4-3-telemetry.png b/assets/img/5-Substrate/dev-4-3-telemetry.png
similarity index 100%
rename from content/substrate/wasm/img/dev-4-3-telemetry.png
rename to assets/img/5-Substrate/dev-4-3-telemetry.png
diff --git a/assets/img/5-Substrate/dev-4-3-upgrade.svg b/assets/img/5-Substrate/dev-4-3-upgrade.svg
new file mode 100644
index 00000000..18e34e3c
--- /dev/null
+++ b/assets/img/5-Substrate/dev-4-3-upgrade.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-4-8-qr-radix-tree-visualization.png b/assets/img/5-Substrate/dev-4-8-qr-radix-tree-visualization.png
new file mode 100644
index 00000000..fd4bcfea
Binary files /dev/null and b/assets/img/5-Substrate/dev-4-8-qr-radix-tree-visualization.png differ
diff --git a/content/substrate/intro/img/dev-4.1-maximalism.png b/assets/img/5-Substrate/dev-4.1-maximalism.png
similarity index 100%
rename from content/substrate/intro/img/dev-4.1-maximalism.png
rename to assets/img/5-Substrate/dev-4.1-maximalism.png
diff --git a/content/frame/extensions/img/signed-extensions.svg b/assets/img/5-Substrate/dev-5-x-signed-extensions.svg
similarity index 100%
rename from content/frame/extensions/img/signed-extensions.svg
rename to assets/img/5-Substrate/dev-5-x-signed-extensions.svg
diff --git a/content/polkadot/npos/img/dev-6-x-npos-0.svg b/assets/img/5-Substrate/dev-6-x-npos-0.svg
similarity index 100%
rename from content/polkadot/npos/img/dev-6-x-npos-0.svg
rename to assets/img/5-Substrate/dev-6-x-npos-0.svg
diff --git a/content/polkadot/npos/img/dev-6-x-npos-1.svg b/assets/img/5-Substrate/dev-6-x-npos-1.svg
similarity index 100%
rename from content/polkadot/npos/img/dev-6-x-npos-1.svg
rename to assets/img/5-Substrate/dev-6-x-npos-1.svg
diff --git a/content/polkadot/npos/img/dev-6-x-npos-2.svg b/assets/img/5-Substrate/dev-6-x-npos-2.svg
similarity index 100%
rename from content/polkadot/npos/img/dev-6-x-npos-2.svg
rename to assets/img/5-Substrate/dev-6-x-npos-2.svg
diff --git a/content/polkadot/npos/img/dev-6-x-npos-3.svg b/assets/img/5-Substrate/dev-6-x-npos-3.svg
similarity index 100%
rename from content/polkadot/npos/img/dev-6-x-npos-3.svg
rename to assets/img/5-Substrate/dev-6-x-npos-3.svg
diff --git a/content/polkadot/npos/img/dev-6-x-npos-4.svg b/assets/img/5-Substrate/dev-6-x-npos-4.svg
similarity index 100%
rename from content/polkadot/npos/img/dev-6-x-npos-4.svg
rename to assets/img/5-Substrate/dev-6-x-npos-4.svg
diff --git a/content/polkadot/npos/img/dev-6-x-npos-vsas.svg b/assets/img/5-Substrate/dev-6-x-npos-vsas.svg
similarity index 100%
rename from content/polkadot/npos/img/dev-6-x-npos-vsas.svg
rename to assets/img/5-Substrate/dev-6-x-npos-vsas.svg
diff --git a/content/polkadot/npos/img/dev-kv-backend.svg b/assets/img/5-Substrate/dev-kv-backend.svg
similarity index 100%
rename from content/polkadot/npos/img/dev-kv-backend.svg
rename to assets/img/5-Substrate/dev-kv-backend.svg
diff --git a/content/substrate/storage/img/dev-overlay-1.svg b/assets/img/5-Substrate/dev-overlay-1.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay-1.svg
rename to assets/img/5-Substrate/dev-overlay-1.svg
diff --git a/content/substrate/storage/img/dev-overlay-2.svg b/assets/img/5-Substrate/dev-overlay-2.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay-2.svg
rename to assets/img/5-Substrate/dev-overlay-2.svg
diff --git a/content/substrate/storage/img/dev-overlay-3.svg b/assets/img/5-Substrate/dev-overlay-3.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay-3.svg
rename to assets/img/5-Substrate/dev-overlay-3.svg
diff --git a/content/substrate/storage/img/dev-overlay-4.svg b/assets/img/5-Substrate/dev-overlay-4.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay-4.svg
rename to assets/img/5-Substrate/dev-overlay-4.svg
diff --git a/content/substrate/storage/img/dev-overlay-5.svg b/assets/img/5-Substrate/dev-overlay-5.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay-5.svg
rename to assets/img/5-Substrate/dev-overlay-5.svg
diff --git a/content/substrate/storage/img/dev-overlay-nested-1.svg b/assets/img/5-Substrate/dev-overlay-nested-1.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay-nested-1.svg
rename to assets/img/5-Substrate/dev-overlay-nested-1.svg
diff --git a/content/substrate/storage/img/dev-overlay-nested.svg b/assets/img/5-Substrate/dev-overlay-nested.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay-nested.svg
rename to assets/img/5-Substrate/dev-overlay-nested.svg
diff --git a/assets/img/5-Substrate/dev-overlay-root.svg b/assets/img/5-Substrate/dev-overlay-root.svg
new file mode 100644
index 00000000..0572d6b4
--- /dev/null
+++ b/assets/img/5-Substrate/dev-overlay-root.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/storage/img/dev-overlay.svg b/assets/img/5-Substrate/dev-overlay.svg
similarity index 100%
rename from content/substrate/storage/img/dev-overlay.svg
rename to assets/img/5-Substrate/dev-overlay.svg
diff --git a/assets/img/5-Substrate/dev-pool-context.svg b/assets/img/5-Substrate/dev-pool-context.svg
new file mode 100644
index 00000000..407fe67a
--- /dev/null
+++ b/assets/img/5-Substrate/dev-pool-context.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-smoldot-meme.jpeg b/assets/img/5-Substrate/dev-smoldot-meme.jpeg
new file mode 100644
index 00000000..c02fae0f
Binary files /dev/null and b/assets/img/5-Substrate/dev-smoldot-meme.jpeg differ
diff --git a/assets/img/5-Substrate/dev-storage-1.svg b/assets/img/5-Substrate/dev-storage-1.svg
new file mode 100644
index 00000000..45bdcb8b
--- /dev/null
+++ b/assets/img/5-Substrate/dev-storage-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/storage/img/dev-storage-2.svg b/assets/img/5-Substrate/dev-storage-2.svg
similarity index 100%
rename from content/substrate/storage/img/dev-storage-2.svg
rename to assets/img/5-Substrate/dev-storage-2.svg
diff --git a/content/substrate/storage/img/dev-storage-3.svg b/assets/img/5-Substrate/dev-storage-3.svg
similarity index 100%
rename from content/substrate/storage/img/dev-storage-3.svg
rename to assets/img/5-Substrate/dev-storage-3.svg
diff --git a/assets/img/5-Substrate/dev-storage-4.svg b/assets/img/5-Substrate/dev-storage-4.svg
new file mode 100644
index 00000000..ec066dc2
--- /dev/null
+++ b/assets/img/5-Substrate/dev-storage-4.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/5-Substrate/dev-storage-externalities-full.svg b/assets/img/5-Substrate/dev-storage-externalities-full.svg
new file mode 100644
index 00000000..770b5998
--- /dev/null
+++ b/assets/img/5-Substrate/dev-storage-externalities-full.svg
@@ -0,0 +1,320 @@
+
+
+
diff --git a/content/substrate/storage/img/dev-storage-full.svg b/assets/img/5-Substrate/dev-storage-full.svg
similarity index 100%
rename from content/substrate/storage/img/dev-storage-full.svg
rename to assets/img/5-Substrate/dev-storage-full.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-16-with-size.svg b/assets/img/5-Substrate/dev-trie-backend-16-with-size.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-16-with-size.svg
rename to assets/img/5-Substrate/dev-trie-backend-16-with-size.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-16.svg b/assets/img/5-Substrate/dev-trie-backend-16.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-16.svg
rename to assets/img/5-Substrate/dev-trie-backend-16.svg
diff --git a/assets/img/5-Substrate/dev-trie-backend-hashed.svg b/assets/img/5-Substrate/dev-trie-backend-hashed.svg
new file mode 100644
index 00000000..0912137e
--- /dev/null
+++ b/assets/img/5-Substrate/dev-trie-backend-hashed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/storage/img/dev-trie-backend-proof-fat-fix.svg b/assets/img/5-Substrate/dev-trie-backend-proof-fat-fix.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-proof-fat-fix.svg
rename to assets/img/5-Substrate/dev-trie-backend-proof-fat-fix.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-proof-fat.svg b/assets/img/5-Substrate/dev-trie-backend-proof-fat.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-proof-fat.svg
rename to assets/img/5-Substrate/dev-trie-backend-proof-fat.svg
diff --git a/assets/img/5-Substrate/dev-trie-backend-proof.svg b/assets/img/5-Substrate/dev-trie-backend-proof.svg
new file mode 100644
index 00000000..07c98545
--- /dev/null
+++ b/assets/img/5-Substrate/dev-trie-backend-proof.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/substrate/storage/img/dev-trie-backend-simple.svg b/assets/img/5-Substrate/dev-trie-backend-simple.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-simple.svg
rename to assets/img/5-Substrate/dev-trie-backend-simple.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-unbalanced.svg b/assets/img/5-Substrate/dev-trie-backend-unbalanced.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-unbalanced.svg
rename to assets/img/5-Substrate/dev-trie-backend-unbalanced.svg
diff --git a/assets/img/5-Substrate/dev-trie-backend-unhashed.svg b/assets/img/5-Substrate/dev-trie-backend-unhashed.svg
new file mode 100644
index 00000000..eb76ebe3
--- /dev/null
+++ b/assets/img/5-Substrate/dev-trie-backend-unhashed.svg
@@ -0,0 +1 @@
+
diff --git a/content/substrate/storage/img/dev-trie-backend-walk-0.svg b/assets/img/5-Substrate/dev-trie-backend-walk-0.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-walk-0.svg
rename to assets/img/5-Substrate/dev-trie-backend-walk-0.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-walk-1.svg b/assets/img/5-Substrate/dev-trie-backend-walk-1.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-walk-1.svg
rename to assets/img/5-Substrate/dev-trie-backend-walk-1.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-walk-2.svg b/assets/img/5-Substrate/dev-trie-backend-walk-2.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-walk-2.svg
rename to assets/img/5-Substrate/dev-trie-backend-walk-2.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-walk-full.svg b/assets/img/5-Substrate/dev-trie-backend-walk-full.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-walk-full.svg
rename to assets/img/5-Substrate/dev-trie-backend-walk-full.svg
diff --git a/content/substrate/storage/img/dev-trie-backend-walk-m1.svg b/assets/img/5-Substrate/dev-trie-backend-walk-m1.svg
similarity index 100%
rename from content/substrate/storage/img/dev-trie-backend-walk-m1.svg
rename to assets/img/5-Substrate/dev-trie-backend-walk-m1.svg
diff --git a/assets/img/5-Substrate/empty-client-runtime.svg b/assets/img/5-Substrate/empty-client-runtime.svg
new file mode 100644
index 00000000..3a7bf24c
--- /dev/null
+++ b/assets/img/5-Substrate/empty-client-runtime.svg
@@ -0,0 +1 @@
+
diff --git a/assets/img/5-Substrate/endian-egg.png b/assets/img/5-Substrate/endian-egg.png
new file mode 100644
index 00000000..02bbcc96
Binary files /dev/null and b/assets/img/5-Substrate/endian-egg.png differ
diff --git a/assets/img/5-Substrate/endian.png b/assets/img/5-Substrate/endian.png
new file mode 100644
index 00000000..44e114e2
Binary files /dev/null and b/assets/img/5-Substrate/endian.png differ
diff --git a/assets/img/5-Substrate/ethereum-logo.svg b/assets/img/5-Substrate/ethereum-logo.svg
new file mode 100644
index 00000000..4620c0ed
--- /dev/null
+++ b/assets/img/5-Substrate/ethereum-logo.svg
@@ -0,0 +1,35 @@
+
+
+
diff --git a/assets/img/5-Substrate/lib-bincode.png b/assets/img/5-Substrate/lib-bincode.png
new file mode 100644
index 00000000..1a71072b
Binary files /dev/null and b/assets/img/5-Substrate/lib-bincode.png differ
diff --git a/assets/img/5-Substrate/lib-scale.png b/assets/img/5-Substrate/lib-scale.png
new file mode 100644
index 00000000..7542c468
Binary files /dev/null and b/assets/img/5-Substrate/lib-scale.png differ
diff --git a/content/polkadot/shared-security/img/nintendo-console-2.png b/assets/img/5-Substrate/nintendo-console-2.png
similarity index 100%
rename from content/polkadot/shared-security/img/nintendo-console-2.png
rename to assets/img/5-Substrate/nintendo-console-2.png
diff --git a/assets/img/5-Substrate/nintendo-console.png b/assets/img/5-Substrate/nintendo-console.png
new file mode 100644
index 00000000..5d9f6fe2
Binary files /dev/null and b/assets/img/5-Substrate/nintendo-console.png differ
diff --git a/content/substrate/intro/img/nintendo-game.png b/assets/img/5-Substrate/nintendo-game.png
similarity index 100%
rename from content/substrate/intro/img/nintendo-game.png
rename to assets/img/5-Substrate/nintendo-game.png
diff --git a/assets/img/5-Substrate/peter-parker-glasses-off.png b/assets/img/5-Substrate/peter-parker-glasses-off.png
new file mode 100644
index 00000000..518fc87a
Binary files /dev/null and b/assets/img/5-Substrate/peter-parker-glasses-off.png differ
diff --git a/assets/img/5-Substrate/peter-parker-glasses-on.png b/assets/img/5-Substrate/peter-parker-glasses-on.png
new file mode 100644
index 00000000..2a8692e7
Binary files /dev/null and b/assets/img/5-Substrate/peter-parker-glasses-on.png differ
diff --git a/assets/img/5-Substrate/rust-crab.svg b/assets/img/5-Substrate/rust-crab.svg
new file mode 100644
index 00000000..c7f240dd
--- /dev/null
+++ b/assets/img/5-Substrate/rust-crab.svg
@@ -0,0 +1,33 @@
+
+
+
diff --git a/assets/img/5-Substrate/substrate-logo.svg b/assets/img/5-Substrate/substrate-logo.svg
new file mode 100644
index 00000000..2157ba94
--- /dev/null
+++ b/assets/img/5-Substrate/substrate-logo.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/content/substrate/scale/img/thats_all_folks.png b/assets/img/5-Substrate/thats_all_folks copy.png
similarity index 100%
rename from content/substrate/scale/img/thats_all_folks.png
rename to assets/img/5-Substrate/thats_all_folks copy.png
diff --git a/assets/img/5-Substrate/thats_all_folks.png b/assets/img/5-Substrate/thats_all_folks.png
new file mode 100644
index 00000000..258d115d
Binary files /dev/null and b/assets/img/5-Substrate/thats_all_folks.png differ
diff --git a/content/substrate/storage/img/trie-backend-simple-simple.svg b/assets/img/5-Substrate/trie-backend-simple-simple.svg
similarity index 100%
rename from content/substrate/storage/img/trie-backend-simple-simple.svg
rename to assets/img/5-Substrate/trie-backend-simple-simple.svg
diff --git a/content/frame/storage/img/unbalanced-tree.svg b/assets/img/5-Substrate/unbalanced-tree.svg
similarity index 100%
rename from content/frame/storage/img/unbalanced-tree.svg
rename to assets/img/5-Substrate/unbalanced-tree.svg
diff --git a/content/frame/storage/img/balance-trie.svg b/assets/img/6-FRAME/balance-trie.svg
similarity index 100%
rename from content/frame/storage/img/balance-trie.svg
rename to assets/img/6-FRAME/balance-trie.svg
diff --git a/content/frame/benchmarking-1/img/benchmarking.svg b/assets/img/6-FRAME/benchmark/benchmarking.svg
similarity index 100%
rename from content/frame/benchmarking-1/img/benchmarking.svg
rename to assets/img/6-FRAME/benchmark/benchmarking.svg
diff --git a/content/frame/benchmarking-1/img/block-import.svg b/assets/img/6-FRAME/benchmark/block-import.svg
similarity index 100%
rename from content/frame/benchmarking-1/img/block-import.svg
rename to assets/img/6-FRAME/benchmark/block-import.svg
diff --git a/assets/img/6-FRAME/benchmark/block-time.svg b/assets/img/6-FRAME/benchmark/block-time.svg
new file mode 100644
index 00000000..8117a83d
--- /dev/null
+++ b/assets/img/6-FRAME/benchmark/block-time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/frame/benchmarking-1/img/components.svg b/assets/img/6-FRAME/benchmark/components.svg
similarity index 100%
rename from content/frame/benchmarking-1/img/components.svg
rename to assets/img/6-FRAME/benchmark/components.svg
diff --git a/assets/img/6-FRAME/benchmark/db-inconsistent.png b/assets/img/6-FRAME/benchmark/db-inconsistent.png
new file mode 100644
index 00000000..1de6ce93
Binary files /dev/null and b/assets/img/6-FRAME/benchmark/db-inconsistent.png differ
diff --git a/content/frame/benchmarking-2/img/event-fix.png b/assets/img/6-FRAME/benchmark/event-fix.png
similarity index 100%
rename from content/frame/benchmarking-2/img/event-fix.png
rename to assets/img/6-FRAME/benchmark/event-fix.png
diff --git a/content/frame/benchmarking-1/img/identity-db-sub.png b/assets/img/6-FRAME/benchmark/identity-db-sub.png
similarity index 100%
rename from content/frame/benchmarking-1/img/identity-db-sub.png
rename to assets/img/6-FRAME/benchmark/identity-db-sub.png
diff --git a/content/frame/benchmarking-1/img/identity-icon.svg b/assets/img/6-FRAME/benchmark/identity-icon.svg
similarity index 100%
rename from content/frame/benchmarking-1/img/identity-icon.svg
rename to assets/img/6-FRAME/benchmark/identity-icon.svg
diff --git a/content/frame/benchmarking-1/img/identity-raw-fields.png b/assets/img/6-FRAME/benchmark/identity-raw-fields.png
similarity index 100%
rename from content/frame/benchmarking-1/img/identity-raw-fields.png
rename to assets/img/6-FRAME/benchmark/identity-raw-fields.png
diff --git a/content/frame/benchmarking-1/img/identity-raw-registrars.png b/assets/img/6-FRAME/benchmark/identity-raw-registrars.png
similarity index 100%
rename from content/frame/benchmarking-1/img/identity-raw-registrars.png
rename to assets/img/6-FRAME/benchmark/identity-raw-registrars.png
diff --git a/content/frame/benchmarking-1/img/identity-raw-sub.png b/assets/img/6-FRAME/benchmark/identity-raw-sub.png
similarity index 100%
rename from content/frame/benchmarking-1/img/identity-raw-sub.png
rename to assets/img/6-FRAME/benchmark/identity-raw-sub.png
diff --git a/content/frame/benchmarking-1/img/linear-regression.svg b/assets/img/6-FRAME/benchmark/linear-regression.svg
similarity index 100%
rename from content/frame/benchmarking-1/img/linear-regression.svg
rename to assets/img/6-FRAME/benchmark/linear-regression.svg
diff --git a/content/frame/benchmarking-2/img/nonlinear-events.png b/assets/img/6-FRAME/benchmark/nonlinear-events.png
similarity index 100%
rename from content/frame/benchmarking-2/img/nonlinear-events.png
rename to assets/img/6-FRAME/benchmark/nonlinear-events.png
diff --git a/content/frame/benchmarking-2/img/on-finalize.svg b/assets/img/6-FRAME/benchmark/on-finalize.svg
similarity index 100%
rename from content/frame/benchmarking-2/img/on-finalize.svg
rename to assets/img/6-FRAME/benchmark/on-finalize.svg
diff --git a/content/frame/benchmarking-2/img/paritydb-vs-rocksdb-read.png b/assets/img/6-FRAME/benchmark/paritydb-vs-rocksdb-read.png
similarity index 100%
rename from content/frame/benchmarking-2/img/paritydb-vs-rocksdb-read.png
rename to assets/img/6-FRAME/benchmark/paritydb-vs-rocksdb-read.png
diff --git a/content/frame/benchmarking-2/img/polkadot-size-histogram-alpha.png b/assets/img/6-FRAME/benchmark/polkadot-size-histogram-alpha.png
similarity index 100%
rename from content/frame/benchmarking-2/img/polkadot-size-histogram-alpha.png
rename to assets/img/6-FRAME/benchmark/polkadot-size-histogram-alpha.png
diff --git a/content/frame/benchmarking-2/img/polkadot-size-histogram.png b/assets/img/6-FRAME/benchmark/polkadot-size-histogram.png
similarity index 100%
rename from content/frame/benchmarking-2/img/polkadot-size-histogram.png
rename to assets/img/6-FRAME/benchmark/polkadot-size-histogram.png
diff --git a/content/frame/benchmarking-2/img/rocksdb-hiccups.png b/assets/img/6-FRAME/benchmark/rocksdb-hiccups.png
similarity index 100%
rename from content/frame/benchmarking-2/img/rocksdb-hiccups.png
rename to assets/img/6-FRAME/benchmark/rocksdb-hiccups.png
diff --git a/assets/img/6-FRAME/flow.svg b/assets/img/6-FRAME/flow.svg
new file mode 100644
index 00000000..c2245ac8
--- /dev/null
+++ b/assets/img/6-FRAME/flow.svg
@@ -0,0 +1 @@
+
diff --git a/content/frame/dive/img/frame0.svg b/assets/img/6-FRAME/frame0.svg
similarity index 100%
rename from content/frame/dive/img/frame0.svg
rename to assets/img/6-FRAME/frame0.svg
diff --git a/content/frame/intro/img/frame1.svg b/assets/img/6-FRAME/frame1.svg
similarity index 100%
rename from content/frame/intro/img/frame1.svg
rename to assets/img/6-FRAME/frame1.svg
diff --git a/content/frame/storage/img/navigate-storage-2.svg b/assets/img/6-FRAME/navigate-storage-2.svg
similarity index 100%
rename from content/frame/storage/img/navigate-storage-2.svg
rename to assets/img/6-FRAME/navigate-storage-2.svg
diff --git a/content/frame/hooks/img/ocw.svg b/assets/img/6-FRAME/ocw.svg
similarity index 100%
rename from content/frame/hooks/img/ocw.svg
rename to assets/img/6-FRAME/ocw.svg
diff --git a/content/frame/storage/img/patricia-trie.svg b/assets/img/6-FRAME/patricia-trie.svg
similarity index 100%
rename from content/frame/storage/img/patricia-trie.svg
rename to assets/img/6-FRAME/patricia-trie.svg
diff --git a/content/substrate/interact/img/pjs.png b/assets/img/6-FRAME/pjs.png
similarity index 100%
rename from content/substrate/interact/img/pjs.png
rename to assets/img/6-FRAME/pjs.png
diff --git a/content/frame/traits/img/polkadot-deep-dive.png b/assets/img/6-FRAME/polkadot-deep-dive.png
similarity index 100%
rename from content/frame/traits/img/polkadot-deep-dive.png
rename to assets/img/6-FRAME/polkadot-deep-dive.png
diff --git a/assets/img/6-FRAME/rocksdb-hiccups.png b/assets/img/6-FRAME/rocksdb-hiccups.png
new file mode 100644
index 00000000..f39cf180
Binary files /dev/null and b/assets/img/6-FRAME/rocksdb-hiccups.png differ
diff --git a/assets/img/6-FRAME/thats_all_folks.png b/assets/img/6-FRAME/thats_all_folks.png
new file mode 100644
index 00000000..258d115d
Binary files /dev/null and b/assets/img/6-FRAME/thats_all_folks.png differ
diff --git a/content/polkadot/shared-security/img/wasm-in-storage.png b/assets/img/6-FRAME/wasm-in-storage.png
similarity index 100%
rename from content/polkadot/shared-security/img/wasm-in-storage.png
rename to assets/img/6-FRAME/wasm-in-storage.png
diff --git a/assets/img/7-Polkadot/5-3/proof-state.svg b/assets/img/7-Polkadot/5-3/proof-state.svg
new file mode 100644
index 00000000..590e3bfc
--- /dev/null
+++ b/assets/img/7-Polkadot/5-3/proof-state.svg
@@ -0,0 +1,38 @@
+
diff --git a/assets/img/7-Polkadot/5-3/proof-v2-v4.svg b/assets/img/7-Polkadot/5-3/proof-v2-v4.svg
new file mode 100644
index 00000000..2760ba09
--- /dev/null
+++ b/assets/img/7-Polkadot/5-3/proof-v2-v4.svg
@@ -0,0 +1,13 @@
+
diff --git a/assets/img/7-Polkadot/5-3/proof-v2.svg b/assets/img/7-Polkadot/5-3/proof-v2.svg
new file mode 100644
index 00000000..516fcfe8
--- /dev/null
+++ b/assets/img/7-Polkadot/5-3/proof-v2.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/img/7-Polkadot/5-3/proof1.svg b/assets/img/7-Polkadot/5-3/proof1.svg
new file mode 100644
index 00000000..bd1dc673
--- /dev/null
+++ b/assets/img/7-Polkadot/5-3/proof1.svg
@@ -0,0 +1,360 @@
+
+
+
+
diff --git a/assets/img/7-Polkadot/5-3/proof2.svg b/assets/img/7-Polkadot/5-3/proof2.svg
new file mode 100644
index 00000000..5cca3941
--- /dev/null
+++ b/assets/img/7-Polkadot/5-3/proof2.svg
@@ -0,0 +1,189 @@
+
+
+
+
diff --git a/assets/img/7-Polkadot/5-3/proof3.jpg b/assets/img/7-Polkadot/5-3/proof3.jpg
new file mode 100644
index 00000000..b09c09dc
Binary files /dev/null and b/assets/img/7-Polkadot/5-3/proof3.jpg differ
diff --git a/assets/img/7-Polkadot/5.2/5.2 Cumulus-diagram-1.png b/assets/img/7-Polkadot/5.2/5.2 Cumulus-diagram-1.png
new file mode 100644
index 00000000..5e0d1b65
Binary files /dev/null and b/assets/img/7-Polkadot/5.2/5.2 Cumulus-diagram-1.png differ
diff --git a/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-2.png b/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-2.png
new file mode 100644
index 00000000..7a312da2
Binary files /dev/null and b/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-2.png differ
diff --git a/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-3.png b/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-3.png
new file mode 100644
index 00000000..e23115ed
Binary files /dev/null and b/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-3.png differ
diff --git a/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-4.png b/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-4.png
new file mode 100644
index 00000000..948f8007
Binary files /dev/null and b/assets/img/7-Polkadot/5.2/5.2-Cumulus-diagram-4.png differ
diff --git a/assets/img/7-Polkadot/5.4-1.svg b/assets/img/7-Polkadot/5.4-1.svg
new file mode 100644
index 00000000..54124338
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-1.svg
@@ -0,0 +1,208 @@
+
diff --git a/assets/img/7-Polkadot/5.4-10.svg b/assets/img/7-Polkadot/5.4-10.svg
new file mode 100644
index 00000000..39bfadaa
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-10.svg
@@ -0,0 +1,36 @@
+
diff --git a/assets/img/7-Polkadot/5.4-2.svg b/assets/img/7-Polkadot/5.4-2.svg
new file mode 100644
index 00000000..d16fa6a9
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-2.svg
@@ -0,0 +1,831 @@
+
diff --git a/assets/img/7-Polkadot/5.4-3.svg b/assets/img/7-Polkadot/5.4-3.svg
new file mode 100644
index 00000000..f8fa8e26
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-3.svg
@@ -0,0 +1,831 @@
+
diff --git a/assets/img/7-Polkadot/5.4-4.svg b/assets/img/7-Polkadot/5.4-4.svg
new file mode 100644
index 00000000..74e88425
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-4.svg
@@ -0,0 +1,363 @@
+
diff --git a/assets/img/7-Polkadot/5.4-6.svg b/assets/img/7-Polkadot/5.4-6.svg
new file mode 100644
index 00000000..b7996bb9
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-6.svg
@@ -0,0 +1,29 @@
+
diff --git a/assets/img/7-Polkadot/5.4-7.svg b/assets/img/7-Polkadot/5.4-7.svg
new file mode 100644
index 00000000..f548e221
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-7.svg
@@ -0,0 +1,36 @@
+
diff --git a/assets/img/7-Polkadot/5.4-8.svg b/assets/img/7-Polkadot/5.4-8.svg
new file mode 100644
index 00000000..edfe9946
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-8.svg
@@ -0,0 +1,24 @@
+
diff --git a/assets/img/7-Polkadot/5.4-9.svg b/assets/img/7-Polkadot/5.4-9.svg
new file mode 100644
index 00000000..04b40116
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-9.svg
@@ -0,0 +1,34 @@
+
diff --git a/assets/img/7-Polkadot/5.4-availability-gossip.svg b/assets/img/7-Polkadot/5.4-availability-gossip.svg
new file mode 100644
index 00000000..63f877af
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-availability-gossip.svg
@@ -0,0 +1,200 @@
+
+
diff --git a/assets/img/7-Polkadot/5.4-erasure-encoding-abstract.svg b/assets/img/7-Polkadot/5.4-erasure-encoding-abstract.svg
new file mode 100644
index 00000000..2ae270d8
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-erasure-encoding-abstract.svg
@@ -0,0 +1,38 @@
+
diff --git a/assets/img/7-Polkadot/5.4-relay-block-construction-I.svg b/assets/img/7-Polkadot/5.4-relay-block-construction-I.svg
new file mode 100644
index 00000000..123336f5
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-relay-block-construction-I.svg
@@ -0,0 +1,454 @@
+
+
diff --git a/assets/img/7-Polkadot/5.4-relay-block-construction-II.svg b/assets/img/7-Polkadot/5.4-relay-block-construction-II.svg
new file mode 100644
index 00000000..e48799eb
--- /dev/null
+++ b/assets/img/7-Polkadot/5.4-relay-block-construction-II.svg
@@ -0,0 +1,519 @@
+
+
diff --git a/content/polkadot/scaling-heterogeneous/img/2dReedSolomon.png b/assets/img/7-Polkadot/Blockchain_Scaling/2dReedSolomon.png
similarity index 100%
rename from content/polkadot/scaling-heterogeneous/img/2dReedSolomon.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/2dReedSolomon.png
diff --git a/content/polkadot/scaling-homogeneous/img/Eigenlayer.webp b/assets/img/7-Polkadot/Blockchain_Scaling/Eigenlayer.webp
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/Eigenlayer.webp
rename to assets/img/7-Polkadot/Blockchain_Scaling/Eigenlayer.webp
diff --git a/content/polkadot/scaling-heterogeneous/img/L2Beat.png b/assets/img/7-Polkadot/Blockchain_Scaling/L2Beat.png
similarity index 100%
rename from content/polkadot/scaling-heterogeneous/img/L2Beat.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/L2Beat.png
diff --git a/content/polkadot/scaling-homogeneous/img/L2Evolution.png b/assets/img/7-Polkadot/Blockchain_Scaling/L2Evolution.png
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/L2Evolution.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/L2Evolution.png
diff --git a/content/polkadot/scaling-homogeneous/img/Lightning-layers.png b/assets/img/7-Polkadot/Blockchain_Scaling/Lightning-layers.png
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/Lightning-layers.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/Lightning-layers.png
diff --git a/assets/img/7-Polkadot/Blockchain_Scaling/MapReduce.png b/assets/img/7-Polkadot/Blockchain_Scaling/MapReduce.png
new file mode 100644
index 00000000..6912fdbc
Binary files /dev/null and b/assets/img/7-Polkadot/Blockchain_Scaling/MapReduce.png differ
diff --git a/content/polkadot/scaling-homogeneous/img/Omniledger.png b/assets/img/7-Polkadot/Blockchain_Scaling/Omniledger.png
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/Omniledger.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/Omniledger.png
diff --git a/content/polkadot/scaling-homogeneous/img/Plasma.jpg b/assets/img/7-Polkadot/Blockchain_Scaling/Plasma.jpg
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/Plasma.jpg
rename to assets/img/7-Polkadot/Blockchain_Scaling/Plasma.jpg
diff --git a/content/polkadot/scaling-homogeneous/img/VisaScale.png b/assets/img/7-Polkadot/Blockchain_Scaling/VisaScale.png
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/VisaScale.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/VisaScale.png
diff --git a/content/polkadot/scaling-homogeneous/img/committees.png b/assets/img/7-Polkadot/Blockchain_Scaling/committees.png
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/committees.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/committees.png
diff --git a/content/polkadot/scaling-homogeneous/img/horizontal-vs-vertical-scaling-diagram.png b/assets/img/7-Polkadot/Blockchain_Scaling/horizontal-vs-vertical-scaling-diagram.png
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/horizontal-vs-vertical-scaling-diagram.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/horizontal-vs-vertical-scaling-diagram.png
diff --git a/content/polkadot/scaling-homogeneous/img/plasma_world_map.png b/assets/img/7-Polkadot/Blockchain_Scaling/plasma_world_map.png
similarity index 100%
rename from content/polkadot/scaling-homogeneous/img/plasma_world_map.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/plasma_world_map.png
diff --git a/content/polkadot/scaling-heterogeneous/img/polkadot-rollup.png b/assets/img/7-Polkadot/Blockchain_Scaling/polkadot-rollup.png
similarity index 100%
rename from content/polkadot/scaling-heterogeneous/img/polkadot-rollup.png
rename to assets/img/7-Polkadot/Blockchain_Scaling/polkadot-rollup.png
diff --git a/assets/img/7-Polkadot/Blockchain_Scaling/trilemma.png b/assets/img/7-Polkadot/Blockchain_Scaling/trilemma.png
new file mode 100644
index 00000000..53d000c7
Binary files /dev/null and b/assets/img/7-Polkadot/Blockchain_Scaling/trilemma.png differ
diff --git a/content/polkadot/data-sharding/img/2d-reed-solomon.png b/assets/img/7-Polkadot/Data_Availability/2d-reed-solomon.png
similarity index 100%
rename from content/polkadot/data-sharding/img/2d-reed-solomon.png
rename to assets/img/7-Polkadot/Data_Availability/2d-reed-solomon.png
diff --git a/assets/img/7-Polkadot/Data_Availability/DA_Parachains_1.svg b/assets/img/7-Polkadot/Data_Availability/DA_Parachains_1.svg
new file mode 100644
index 00000000..6df52b54
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/DA_Parachains_1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Data_Availability/DA_Parachains_2.svg b/assets/img/7-Polkadot/Data_Availability/DA_Parachains_2.svg
new file mode 100644
index 00000000..301581a1
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/DA_Parachains_2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Data_Availability/DA_Relay_1.svg b/assets/img/7-Polkadot/Data_Availability/DA_Relay_1.svg
new file mode 100644
index 00000000..ba2d9384
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/DA_Relay_1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Data_Availability/DA_Relay_2.svg b/assets/img/7-Polkadot/Data_Availability/DA_Relay_2.svg
new file mode 100644
index 00000000..de7bf8a8
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/DA_Relay_2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_1.svg b/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_1.svg
new file mode 100644
index 00000000..21901a23
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_2.svg b/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_2.svg
new file mode 100644
index 00000000..6b2b938a
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_3.svg b/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_3.svg
new file mode 100644
index 00000000..7106d0ab
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/Multiple_Code_Words_3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/polkadot/data-sharding/img/Ralph_Merkle.png b/assets/img/7-Polkadot/Data_Availability/Ralph_Merkle.png
similarity index 100%
rename from content/polkadot/data-sharding/img/Ralph_Merkle.png
rename to assets/img/7-Polkadot/Data_Availability/Ralph_Merkle.png
diff --git a/content/polkadot/data-sharding/img/availability-bitfields.png b/assets/img/7-Polkadot/Data_Availability/availability-bitfields.png
similarity index 100%
rename from content/polkadot/data-sharding/img/availability-bitfields.png
rename to assets/img/7-Polkadot/Data_Availability/availability-bitfields.png
diff --git a/assets/img/7-Polkadot/Data_Availability/availability-gossip.svg b/assets/img/7-Polkadot/Data_Availability/availability-gossip.svg
new file mode 100644
index 00000000..63f877af
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/availability-gossip.svg
@@ -0,0 +1,200 @@
+
+
diff --git a/assets/img/7-Polkadot/Data_Availability/bitfield-chunk-req.svg b/assets/img/7-Polkadot/Data_Availability/bitfield-chunk-req.svg
new file mode 100644
index 00000000..6c803b7c
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/bitfield-chunk-req.svg
@@ -0,0 +1,273 @@
+
+
+
+
diff --git a/content/polkadot/data-sharding/img/candidate-included.png b/assets/img/7-Polkadot/Data_Availability/candidate-included.png
similarity index 100%
rename from content/polkadot/data-sharding/img/candidate-included.png
rename to assets/img/7-Polkadot/Data_Availability/candidate-included.png
diff --git a/content/polkadot/data-sharding/img/comic.png b/assets/img/7-Polkadot/Data_Availability/comic.png
similarity index 100%
rename from content/polkadot/data-sharding/img/comic.png
rename to assets/img/7-Polkadot/Data_Availability/comic.png
diff --git a/content/polkadot/data-sharding/img/erasure-coding-1.png b/assets/img/7-Polkadot/Data_Availability/erasure-coding-1.png
similarity index 100%
rename from content/polkadot/data-sharding/img/erasure-coding-1.png
rename to assets/img/7-Polkadot/Data_Availability/erasure-coding-1.png
diff --git a/content/polkadot/data-sharding/img/line-extra.svg b/assets/img/7-Polkadot/Data_Availability/line-extra.svg
similarity index 100%
rename from content/polkadot/data-sharding/img/line-extra.svg
rename to assets/img/7-Polkadot/Data_Availability/line-extra.svg
diff --git a/content/polkadot/data-sharding/img/line.svg b/assets/img/7-Polkadot/Data_Availability/line.svg
similarity index 100%
rename from content/polkadot/data-sharding/img/line.svg
rename to assets/img/7-Polkadot/Data_Availability/line.svg
diff --git a/content/polkadot/data-sharding/img/not-that-merkel.jpg b/assets/img/7-Polkadot/Data_Availability/merkel.JPG
similarity index 100%
rename from content/polkadot/data-sharding/img/not-that-merkel.jpg
rename to assets/img/7-Polkadot/Data_Availability/merkel.JPG
diff --git a/content/polkadot/data-sharding/img/polynomial-2.png b/assets/img/7-Polkadot/Data_Availability/polynomial-2.png
similarity index 100%
rename from content/polkadot/data-sharding/img/polynomial-2.png
rename to assets/img/7-Polkadot/Data_Availability/polynomial-2.png
diff --git a/content/polkadot/data-sharding/img/reed-solomon.png b/assets/img/7-Polkadot/Data_Availability/reed-solomon.png
similarity index 100%
rename from content/polkadot/data-sharding/img/reed-solomon.png
rename to assets/img/7-Polkadot/Data_Availability/reed-solomon.png
diff --git a/assets/img/7-Polkadot/Data_Availability/relay-block-construction-I.svg b/assets/img/7-Polkadot/Data_Availability/relay-block-construction-I.svg
new file mode 100644
index 00000000..123336f5
--- /dev/null
+++ b/assets/img/7-Polkadot/Data_Availability/relay-block-construction-I.svg
@@ -0,0 +1,454 @@
+
+
diff --git a/content/polkadot/opengov/img/Bitcoin.png b/assets/img/7-Polkadot/OpenGov-PBA2/Bitcoin.png
similarity index 100%
rename from content/polkadot/opengov/img/Bitcoin.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/Bitcoin.png
diff --git a/content/polkadot/opengov/img/Ethereum.png b/assets/img/7-Polkadot/OpenGov-PBA2/Ethereum.png
similarity index 100%
rename from content/polkadot/opengov/img/Ethereum.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/Ethereum.png
diff --git a/content/polkadot/opengov/img/Polkadot.png b/assets/img/7-Polkadot/OpenGov-PBA2/Polkadot.png
similarity index 100%
rename from content/polkadot/opengov/img/Polkadot.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/Polkadot.png
diff --git a/content/polkadot/opengov/img/Snail.jpeg b/assets/img/7-Polkadot/OpenGov-PBA2/Snail.jpeg
similarity index 100%
rename from content/polkadot/opengov/img/Snail.jpeg
rename to assets/img/7-Polkadot/OpenGov-PBA2/Snail.jpeg
diff --git a/content/polkadot/opengov/img/TracksTable.webp b/assets/img/7-Polkadot/OpenGov-PBA2/TracksTable.webp
similarity index 100%
rename from content/polkadot/opengov/img/TracksTable.webp
rename to assets/img/7-Polkadot/OpenGov-PBA2/TracksTable.webp
diff --git a/content/polkadot/opengov/img/lifecycle_of_a_referendum.png b/assets/img/7-Polkadot/OpenGov-PBA2/lifecycle_of_a_referendum.png
similarity index 100%
rename from content/polkadot/opengov/img/lifecycle_of_a_referendum.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/lifecycle_of_a_referendum.png
diff --git a/content/polkadot/opengov/img/overview.png b/assets/img/7-Polkadot/OpenGov-PBA2/overview.png
similarity index 100%
rename from content/polkadot/opengov/img/overview.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/overview.png
diff --git a/assets/img/7-Polkadot/OpenGov-PBA2/polkadot_fellowship_background.jpeg b/assets/img/7-Polkadot/OpenGov-PBA2/polkadot_fellowship_background.jpeg
new file mode 100644
index 00000000..b3d7cdde
Binary files /dev/null and b/assets/img/7-Polkadot/OpenGov-PBA2/polkadot_fellowship_background.jpeg differ
diff --git a/content/polkadot/opengov/img/proposals_from_democracy.png b/assets/img/7-Polkadot/OpenGov-PBA2/proposals_from_democracy.png
similarity index 100%
rename from content/polkadot/opengov/img/proposals_from_democracy.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/proposals_from_democracy.png
diff --git a/content/polkadot/opengov/img/proposals_per_day.png b/assets/img/7-Polkadot/OpenGov-PBA2/proposals_per_day.png
similarity index 100%
rename from content/polkadot/opengov/img/proposals_per_day.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/proposals_per_day.png
diff --git a/content/polkadot/opengov/img/rail_road_tracks.jpeg b/assets/img/7-Polkadot/OpenGov-PBA2/rail_road_tracks.jpeg
similarity index 100%
rename from content/polkadot/opengov/img/rail_road_tracks.jpeg
rename to assets/img/7-Polkadot/OpenGov-PBA2/rail_road_tracks.jpeg
diff --git a/content/polkadot/async-backing-deep/img/stopwatch.png b/assets/img/7-Polkadot/OpenGov-PBA2/stopwatch.png
similarity index 100%
rename from content/polkadot/async-backing-deep/img/stopwatch.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/stopwatch.png
diff --git a/content/polkadot/opengov/img/support_and_approval_curves.png b/assets/img/7-Polkadot/OpenGov-PBA2/support_and_approval_curves.png
similarity index 100%
rename from content/polkadot/opengov/img/support_and_approval_curves.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/support_and_approval_curves.png
diff --git a/content/polkadot/opengov/img/treasury_waste_since_opengov.png b/assets/img/7-Polkadot/OpenGov-PBA2/treasury_waste_since_opengov.png
similarity index 100%
rename from content/polkadot/opengov/img/treasury_waste_since_opengov.png
rename to assets/img/7-Polkadot/OpenGov-PBA2/treasury_waste_since_opengov.png
diff --git a/content/polkadot/opengov/img/vote.jpeg b/assets/img/7-Polkadot/OpenGov-PBA2/vote.jpeg
similarity index 100%
rename from content/polkadot/opengov/img/vote.jpeg
rename to assets/img/7-Polkadot/OpenGov-PBA2/vote.jpeg
diff --git a/assets/img/7-Polkadot/Scalability_History/Arbitrum.png b/assets/img/7-Polkadot/Scalability_History/Arbitrum.png
new file mode 100644
index 00000000..234c1c76
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/Arbitrum.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/Bitcoin.png b/assets/img/7-Polkadot/Scalability_History/Bitcoin.png
new file mode 100644
index 00000000..7084bada
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/Bitcoin.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/Boba.png b/assets/img/7-Polkadot/Scalability_History/Boba.png
new file mode 100644
index 00000000..b8c4f00b
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/Boba.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/Ethereum.png b/assets/img/7-Polkadot/Scalability_History/Ethereum.png
new file mode 100644
index 00000000..c93d5205
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/Ethereum.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/Optimism.png b/assets/img/7-Polkadot/Scalability_History/Optimism.png
new file mode 100644
index 00000000..b2afcc12
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/Optimism.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/POV_PVF_Diagram.png b/assets/img/7-Polkadot/Scalability_History/POV_PVF_Diagram.png
new file mode 100644
index 00000000..33ee94c1
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/POV_PVF_Diagram.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/Starkware.jpeg b/assets/img/7-Polkadot/Scalability_History/Starkware.jpeg
new file mode 100644
index 00000000..a959b94e
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/Starkware.jpeg differ
diff --git a/assets/img/7-Polkadot/Scalability_History/ZkSync.png b/assets/img/7-Polkadot/Scalability_History/ZkSync.png
new file mode 100644
index 00000000..2861f56f
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/ZkSync.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/channel-3-nodes.png b/assets/img/7-Polkadot/Scalability_History/channel-3-nodes.png
new file mode 100644
index 00000000..56b35bbf
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/channel-3-nodes.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/channel-lock.png b/assets/img/7-Polkadot/Scalability_History/channel-lock.png
new file mode 100644
index 00000000..399012f6
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/channel-lock.png differ
diff --git a/assets/img/7-Polkadot/Scalability_History/fraud-proof.svg b/assets/img/7-Polkadot/Scalability_History/fraud-proof.svg
new file mode 100644
index 00000000..78a48f43
--- /dev/null
+++ b/assets/img/7-Polkadot/Scalability_History/fraud-proof.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Scalability_History/galaxy-brain-sharding.jpg b/assets/img/7-Polkadot/Scalability_History/galaxy-brain-sharding.jpg
new file mode 100644
index 00000000..678f4c75
Binary files /dev/null and b/assets/img/7-Polkadot/Scalability_History/galaxy-brain-sharding.jpg differ
diff --git a/assets/img/7-Polkadot/Scalability_History/rollup-batch.svg b/assets/img/7-Polkadot/Scalability_History/rollup-batch.svg
new file mode 100644
index 00000000..aea36089
--- /dev/null
+++ b/assets/img/7-Polkadot/Scalability_History/rollup-batch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Scalability_History/sharding-trilemma.svg b/assets/img/7-Polkadot/Scalability_History/sharding-trilemma.svg
new file mode 100644
index 00000000..f6293e15
--- /dev/null
+++ b/assets/img/7-Polkadot/Scalability_History/sharding-trilemma.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/Scalability_History/shards.svg b/assets/img/7-Polkadot/Scalability_History/shards.svg
new file mode 100644
index 00000000..77e94a63
--- /dev/null
+++ b/assets/img/7-Polkadot/Scalability_History/shards.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/bandersnatch.png b/assets/img/7-Polkadot/bandersnatch.png
new file mode 100644
index 00000000..5b193dea
Binary files /dev/null and b/assets/img/7-Polkadot/bandersnatch.png differ
diff --git a/assets/img/7-Polkadot/bs-bitfield-chunk-req.svg b/assets/img/7-Polkadot/bs-bitfield-chunk-req.svg
new file mode 100644
index 00000000..6c803b7c
--- /dev/null
+++ b/assets/img/7-Polkadot/bs-bitfield-chunk-req.svg
@@ -0,0 +1,273 @@
+
+
+
+
diff --git a/assets/img/7-Polkadot/bs-bitfield-gossip.svg b/assets/img/7-Polkadot/bs-bitfield-gossip.svg
new file mode 100644
index 00000000..cda00420
--- /dev/null
+++ b/assets/img/7-Polkadot/bs-bitfield-gossip.svg
@@ -0,0 +1,311 @@
+
+
+
+
diff --git a/assets/img/7-Polkadot/bs-erasure-encoding-abstract.svg b/assets/img/7-Polkadot/bs-erasure-encoding-abstract.svg
new file mode 100644
index 00000000..ef934e6a
--- /dev/null
+++ b/assets/img/7-Polkadot/bs-erasure-encoding-abstract.svg
@@ -0,0 +1,315 @@
+
+
diff --git a/assets/img/7-Polkadot/bs-erasure-encoding-data-layout-2.svg b/assets/img/7-Polkadot/bs-erasure-encoding-data-layout-2.svg
new file mode 100644
index 00000000..713e9bd9
--- /dev/null
+++ b/assets/img/7-Polkadot/bs-erasure-encoding-data-layout-2.svg
@@ -0,0 +1,371 @@
+
+
diff --git a/assets/img/7-Polkadot/bs-erasure-encoding-data-layout-3.svg b/assets/img/7-Polkadot/bs-erasure-encoding-data-layout-3.svg
new file mode 100644
index 00000000..b7d437eb
--- /dev/null
+++ b/assets/img/7-Polkadot/bs-erasure-encoding-data-layout-3.svg
@@ -0,0 +1,416 @@
+
+
diff --git a/assets/img/7-Polkadot/bs-erasure-encoding-data-layout.svg b/assets/img/7-Polkadot/bs-erasure-encoding-data-layout.svg
new file mode 100644
index 00000000..6fd19820
--- /dev/null
+++ b/assets/img/7-Polkadot/bs-erasure-encoding-data-layout.svg
@@ -0,0 +1,318 @@
+
+
diff --git a/assets/img/7-Polkadot/bs-erasure-encoding-polkadot.svg b/assets/img/7-Polkadot/bs-erasure-encoding-polkadot.svg
new file mode 100644
index 00000000..6c807aed
--- /dev/null
+++ b/assets/img/7-Polkadot/bs-erasure-encoding-polkadot.svg
@@ -0,0 +1,355 @@
+
+
diff --git a/assets/img/7-Polkadot/bs_block_prod.svg b/assets/img/7-Polkadot/bs_block_prod.svg
new file mode 100644
index 00000000..3f3f9ea5
--- /dev/null
+++ b/assets/img/7-Polkadot/bs_block_prod.svg
@@ -0,0 +1,380 @@
+
+
+
+
diff --git a/assets/img/7-Polkadot/bs_impl_arch.png b/assets/img/7-Polkadot/bs_impl_arch.png
new file mode 100644
index 00000000..374fcd53
Binary files /dev/null and b/assets/img/7-Polkadot/bs_impl_arch.png differ
diff --git a/assets/img/7-Polkadot/bs_impl_arch.svg b/assets/img/7-Polkadot/bs_impl_arch.svg
new file mode 100644
index 00000000..8ee96d81
--- /dev/null
+++ b/assets/img/7-Polkadot/bs_impl_arch.svg
@@ -0,0 +1,2894 @@
+
+
+
+
+
+
diff --git a/assets/img/7-Polkadot/bs_inclusion.png b/assets/img/7-Polkadot/bs_inclusion.png
new file mode 100644
index 00000000..60437d53
Binary files /dev/null and b/assets/img/7-Polkadot/bs_inclusion.png differ
diff --git a/assets/img/7-Polkadot/bs_polkadot_js_bitfields.png b/assets/img/7-Polkadot/bs_polkadot_js_bitfields.png
new file mode 100644
index 00000000..da4c4199
Binary files /dev/null and b/assets/img/7-Polkadot/bs_polkadot_js_bitfields.png differ
diff --git a/assets/img/7-Polkadot/bs_polkadot_js_inclusion.png b/assets/img/7-Polkadot/bs_polkadot_js_inclusion.png
new file mode 100644
index 00000000..60437d53
Binary files /dev/null and b/assets/img/7-Polkadot/bs_polkadot_js_inclusion.png differ
diff --git a/content/polkadot/shared-security/img/chain-fork.svg b/assets/img/7-Polkadot/chain-fork.svg
similarity index 100%
rename from content/polkadot/shared-security/img/chain-fork.svg
rename to assets/img/7-Polkadot/chain-fork.svg
diff --git a/assets/img/7-Polkadot/cumulus/cumulus-1.svg b/assets/img/7-Polkadot/cumulus/cumulus-1.svg
new file mode 100644
index 00000000..896d92b9
--- /dev/null
+++ b/assets/img/7-Polkadot/cumulus/cumulus-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/cumulus/cumulus-2.svg b/assets/img/7-Polkadot/cumulus/cumulus-2.svg
new file mode 100644
index 00000000..09340938
--- /dev/null
+++ b/assets/img/7-Polkadot/cumulus/cumulus-2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/cumulus/cumulus-3.svg b/assets/img/7-Polkadot/cumulus/cumulus-3.svg
new file mode 100644
index 00000000..dd8d78a0
--- /dev/null
+++ b/assets/img/7-Polkadot/cumulus/cumulus-3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/cumulus/relay-chain-interface.png b/assets/img/7-Polkadot/cumulus/relay-chain-interface.png
new file mode 100644
index 00000000..0ba50c9c
Binary files /dev/null and b/assets/img/7-Polkadot/cumulus/relay-chain-interface.png differ
diff --git a/content/polkadot/decisions/img/app-chain.svg b/assets/img/7-Polkadot/decisions/app-chain.svg
similarity index 100%
rename from content/polkadot/decisions/img/app-chain.svg
rename to assets/img/7-Polkadot/decisions/app-chain.svg
diff --git a/content/polkadot/decisions/img/babe.svg b/assets/img/7-Polkadot/decisions/babe.svg
similarity index 100%
rename from content/polkadot/decisions/img/babe.svg
rename to assets/img/7-Polkadot/decisions/babe.svg
diff --git a/content/polkadot/decisions/img/exotic-scheduling.png b/assets/img/7-Polkadot/decisions/exotic-scheduling.png
similarity index 100%
rename from content/polkadot/decisions/img/exotic-scheduling.png
rename to assets/img/7-Polkadot/decisions/exotic-scheduling.png
diff --git a/content/polkadot/decisions/img/grandpa.png b/assets/img/7-Polkadot/decisions/grandpa.png
similarity index 100%
rename from content/polkadot/decisions/img/grandpa.png
rename to assets/img/7-Polkadot/decisions/grandpa.png
diff --git a/assets/img/7-Polkadot/decisions/interoperability.svg b/assets/img/7-Polkadot/decisions/interoperability.svg
new file mode 100644
index 00000000..754af167
--- /dev/null
+++ b/assets/img/7-Polkadot/decisions/interoperability.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/decisions/jam-pen-polkadot.png b/assets/img/7-Polkadot/decisions/jam-pen-polkadot.png
new file mode 100644
index 00000000..f159fb74
Binary files /dev/null and b/assets/img/7-Polkadot/decisions/jam-pen-polkadot.png differ
diff --git a/content/polkadot/decisions/img/original-scheduling.png b/assets/img/7-Polkadot/decisions/original-scheduling.png
similarity index 100%
rename from content/polkadot/decisions/img/original-scheduling.png
rename to assets/img/7-Polkadot/decisions/original-scheduling.png
diff --git a/content/polkadot/decisions/img/runtime-upgrade.png b/assets/img/7-Polkadot/decisions/runtime-upgrade.png
similarity index 100%
rename from content/polkadot/decisions/img/runtime-upgrade.png
rename to assets/img/7-Polkadot/decisions/runtime-upgrade.png
diff --git a/content/polkadot/decisions/img/sharding.svg b/assets/img/7-Polkadot/decisions/sharding.svg
similarity index 100%
rename from content/polkadot/decisions/img/sharding.svg
rename to assets/img/7-Polkadot/decisions/sharding.svg
diff --git a/assets/img/7-Polkadot/decisions/substrate-connect.png b/assets/img/7-Polkadot/decisions/substrate-connect.png
new file mode 100644
index 00000000..730ddc3e
Binary files /dev/null and b/assets/img/7-Polkadot/decisions/substrate-connect.png differ
diff --git a/content/polkadot/decisions/img/treasury.svg b/assets/img/7-Polkadot/decisions/treasury.svg
similarity index 100%
rename from content/polkadot/decisions/img/treasury.svg
rename to assets/img/7-Polkadot/decisions/treasury.svg
diff --git a/content/polkadot/decisions/img/voting.svg b/assets/img/7-Polkadot/decisions/voting.svg
similarity index 100%
rename from content/polkadot/decisions/img/voting.svg
rename to assets/img/7-Polkadot/decisions/voting.svg
diff --git a/assets/img/7-Polkadot/dot-bonding.svg b/assets/img/7-Polkadot/dot-bonding.svg
new file mode 100644
index 00000000..c0709247
--- /dev/null
+++ b/assets/img/7-Polkadot/dot-bonding.svg
@@ -0,0 +1,89 @@
+
+
+
diff --git a/assets/img/7-Polkadot/dot-governance.svg b/assets/img/7-Polkadot/dot-governance.svg
new file mode 100644
index 00000000..588abb3c
--- /dev/null
+++ b/assets/img/7-Polkadot/dot-governance.svg
@@ -0,0 +1,95 @@
+
+
+
diff --git a/assets/img/7-Polkadot/dot-staking.svg b/assets/img/7-Polkadot/dot-staking.svg
new file mode 100644
index 00000000..d66f42b7
--- /dev/null
+++ b/assets/img/7-Polkadot/dot-staking.svg
@@ -0,0 +1,69 @@
+
+
+
diff --git a/content/polkadot/shared-security/img/double-spend.svg b/assets/img/7-Polkadot/double-spend.svg
similarity index 100%
rename from content/polkadot/shared-security/img/double-spend.svg
rename to assets/img/7-Polkadot/double-spend.svg
diff --git a/content/polkadot/ecosystem-economy/img/collab.svg b/assets/img/7-Polkadot/eco/collab.svg
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/collab.svg
rename to assets/img/7-Polkadot/eco/collab.svg
diff --git a/assets/img/7-Polkadot/eco/enkrypt.jpeg b/assets/img/7-Polkadot/eco/enkrypt.jpeg
new file mode 100644
index 00000000..7a6b0e74
Binary files /dev/null and b/assets/img/7-Polkadot/eco/enkrypt.jpeg differ
diff --git a/content/polkadot/ecosystem-economy/img/fellowship-manifesto.png b/assets/img/7-Polkadot/eco/fellowship-manifesto.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/fellowship-manifesto.png
rename to assets/img/7-Polkadot/eco/fellowship-manifesto.png
diff --git a/content/polkadot/ecosystem-economy/img/fellowship-members.png b/assets/img/7-Polkadot/eco/fellowship-members.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/fellowship-members.png
rename to assets/img/7-Polkadot/eco/fellowship-members.png
diff --git a/content/polkadot/ecosystem-economy/img/forum.png b/assets/img/7-Polkadot/eco/forum.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/forum.png
rename to assets/img/7-Polkadot/eco/forum.png
diff --git a/content/polkadot/ecosystem-economy/img/governance.avif b/assets/img/7-Polkadot/eco/governance.avif
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/governance.avif
rename to assets/img/7-Polkadot/eco/governance.avif
diff --git a/content/polkadot/ecosystem-economy/img/inflation.svg b/assets/img/7-Polkadot/eco/inflation.svg
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/inflation.svg
rename to assets/img/7-Polkadot/eco/inflation.svg
diff --git a/assets/img/7-Polkadot/eco/jam-clients.png b/assets/img/7-Polkadot/eco/jam-clients.png
new file mode 100644
index 00000000..cedc133f
Binary files /dev/null and b/assets/img/7-Polkadot/eco/jam-clients.png differ
diff --git a/content/polkadot/ecosystem-economy/img/ledger.webp b/assets/img/7-Polkadot/eco/ledger.webp
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/ledger.webp
rename to assets/img/7-Polkadot/eco/ledger.webp
diff --git a/content/polkadot/ecosystem-economy/img/pjs-curves.png b/assets/img/7-Polkadot/eco/pjs-curves.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/pjs-curves.png
rename to assets/img/7-Polkadot/eco/pjs-curves.png
diff --git a/content/polkadot/ecosystem-economy/img/polkadot-parachains.svg b/assets/img/7-Polkadot/eco/polkadot-parachains.svg
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/polkadot-parachains.svg
rename to assets/img/7-Polkadot/eco/polkadot-parachains.svg
diff --git a/content/polkadot/ecosystem-economy/img/polkassembly.png b/assets/img/7-Polkadot/eco/polkassembly.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/polkassembly.png
rename to assets/img/7-Polkadot/eco/polkassembly.png
diff --git a/content/polkadot/ecosystem-economy/img/rfcs.png b/assets/img/7-Polkadot/eco/rfcs.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/rfcs.png
rename to assets/img/7-Polkadot/eco/rfcs.png
diff --git a/content/polkadot/ecosystem-economy/img/root-curve.png b/assets/img/7-Polkadot/eco/root-curve.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/root-curve.png
rename to assets/img/7-Polkadot/eco/root-curve.png
diff --git a/content/polkadot/ecosystem-economy/img/staking.svg b/assets/img/7-Polkadot/eco/staking.svg
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/staking.svg
rename to assets/img/7-Polkadot/eco/staking.svg
diff --git a/content/polkadot/ecosystem-economy/img/subsquare.png b/assets/img/7-Polkadot/eco/subsquare.png
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/subsquare.png
rename to assets/img/7-Polkadot/eco/subsquare.png
diff --git a/content/polkadot/ecosystem-economy/img/token.avif b/assets/img/7-Polkadot/eco/token.avif
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/token.avif
rename to assets/img/7-Polkadot/eco/token.avif
diff --git a/content/polkadot/ecosystem-economy/img/utility.avif b/assets/img/7-Polkadot/eco/utility.avif
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/utility.avif
rename to assets/img/7-Polkadot/eco/utility.avif
diff --git a/assets/img/7-Polkadot/eco/wallets.png b/assets/img/7-Polkadot/eco/wallets.png
new file mode 100644
index 00000000..55f9eabd
Binary files /dev/null and b/assets/img/7-Polkadot/eco/wallets.png differ
diff --git a/content/polkadot/shared-security/img/economics-security.svg b/assets/img/7-Polkadot/economics-security.svg
similarity index 100%
rename from content/polkadot/shared-security/img/economics-security.svg
rename to assets/img/7-Polkadot/economics-security.svg
diff --git a/assets/img/7-Polkadot/erasure-coding.jpg b/assets/img/7-Polkadot/erasure-coding.jpg
new file mode 100644
index 00000000..8adc692c
Binary files /dev/null and b/assets/img/7-Polkadot/erasure-coding.jpg differ
diff --git a/assets/img/7-Polkadot/hrmp.svg b/assets/img/7-Polkadot/hrmp.svg
new file mode 100644
index 00000000..3174c40f
--- /dev/null
+++ b/assets/img/7-Polkadot/hrmp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/polkadot/shared-security/img/iceburg.jpg b/assets/img/7-Polkadot/iceburg.jpg
similarity index 100%
rename from content/polkadot/shared-security/img/iceburg.jpg
rename to assets/img/7-Polkadot/iceburg.jpg
diff --git a/assets/img/7-Polkadot/icon-glossary-bridge.svg b/assets/img/7-Polkadot/icon-glossary-bridge.svg
new file mode 100644
index 00000000..b2254e8c
--- /dev/null
+++ b/assets/img/7-Polkadot/icon-glossary-bridge.svg
@@ -0,0 +1,44 @@
+
+
+
diff --git a/assets/img/7-Polkadot/icon-glossary-collator.svg b/assets/img/7-Polkadot/icon-glossary-collator.svg
new file mode 100644
index 00000000..63180e27
--- /dev/null
+++ b/assets/img/7-Polkadot/icon-glossary-collator.svg
@@ -0,0 +1,35 @@
+
+
+
diff --git a/assets/img/7-Polkadot/icon-glossary-nominator.svg b/assets/img/7-Polkadot/icon-glossary-nominator.svg
new file mode 100644
index 00000000..32abad2e
--- /dev/null
+++ b/assets/img/7-Polkadot/icon-glossary-nominator.svg
@@ -0,0 +1,204 @@
+
+
+
diff --git a/assets/img/7-Polkadot/icon-glossary-parachain.svg b/assets/img/7-Polkadot/icon-glossary-parachain.svg
new file mode 100644
index 00000000..17b1f452
--- /dev/null
+++ b/assets/img/7-Polkadot/icon-glossary-parachain.svg
@@ -0,0 +1,36 @@
+
+
+
diff --git a/assets/img/7-Polkadot/icon-glossary-parathread.svg b/assets/img/7-Polkadot/icon-glossary-parathread.svg
new file mode 100644
index 00000000..ae4adbf4
--- /dev/null
+++ b/assets/img/7-Polkadot/icon-glossary-parathread.svg
@@ -0,0 +1,48 @@
+
+
+
diff --git a/assets/img/7-Polkadot/icon-glossary-relay-chain.svg b/assets/img/7-Polkadot/icon-glossary-relay-chain.svg
new file mode 100644
index 00000000..407f849f
--- /dev/null
+++ b/assets/img/7-Polkadot/icon-glossary-relay-chain.svg
@@ -0,0 +1,52 @@
+
+
+
diff --git a/assets/img/7-Polkadot/icon-glossary-validator.svg b/assets/img/7-Polkadot/icon-glossary-validator.svg
new file mode 100644
index 00000000..fe320679
--- /dev/null
+++ b/assets/img/7-Polkadot/icon-glossary-validator.svg
@@ -0,0 +1,36 @@
+
+
+
diff --git a/content/polkadot/ecosystem-economy/img/ideal-token-distribution.svg b/assets/img/7-Polkadot/ideal-token-distribution.svg
similarity index 100%
rename from content/polkadot/ecosystem-economy/img/ideal-token-distribution.svg
rename to assets/img/7-Polkadot/ideal-token-distribution.svg
diff --git a/assets/img/7-Polkadot/jam-block-encoding.png b/assets/img/7-Polkadot/jam-block-encoding.png
new file mode 100644
index 00000000..25e30a12
Binary files /dev/null and b/assets/img/7-Polkadot/jam-block-encoding.png differ
diff --git a/assets/img/7-Polkadot/jam-block.png b/assets/img/7-Polkadot/jam-block.png
new file mode 100644
index 00000000..b37382da
Binary files /dev/null and b/assets/img/7-Polkadot/jam-block.png differ
diff --git a/assets/img/7-Polkadot/jam-cartoon.jpg b/assets/img/7-Polkadot/jam-cartoon.jpg
new file mode 100644
index 00000000..bb987317
Binary files /dev/null and b/assets/img/7-Polkadot/jam-cartoon.jpg differ
diff --git a/assets/img/7-Polkadot/jam-comparison.png b/assets/img/7-Polkadot/jam-comparison.png
new file mode 100644
index 00000000..6439cdec
Binary files /dev/null and b/assets/img/7-Polkadot/jam-comparison.png differ
diff --git a/assets/img/7-Polkadot/jam-encoding1.png b/assets/img/7-Polkadot/jam-encoding1.png
new file mode 100644
index 00000000..a6fd5ed4
Binary files /dev/null and b/assets/img/7-Polkadot/jam-encoding1.png differ
diff --git a/assets/img/7-Polkadot/jam-encoding2.png b/assets/img/7-Polkadot/jam-encoding2.png
new file mode 100644
index 00000000..a5acc81b
Binary files /dev/null and b/assets/img/7-Polkadot/jam-encoding2.png differ
diff --git a/assets/img/7-Polkadot/jam-extrinsics.png b/assets/img/7-Polkadot/jam-extrinsics.png
new file mode 100644
index 00000000..b37382da
Binary files /dev/null and b/assets/img/7-Polkadot/jam-extrinsics.png differ
diff --git a/assets/img/7-Polkadot/jam-graypaper-reader.png b/assets/img/7-Polkadot/jam-graypaper-reader.png
new file mode 100644
index 00000000..2e9c2617
Binary files /dev/null and b/assets/img/7-Polkadot/jam-graypaper-reader.png differ
diff --git a/assets/img/7-Polkadot/jam-knife.png b/assets/img/7-Polkadot/jam-knife.png
new file mode 100644
index 00000000..ff8b3b8d
Binary files /dev/null and b/assets/img/7-Polkadot/jam-knife.png differ
diff --git a/assets/img/7-Polkadot/jam-pvm.png b/assets/img/7-Polkadot/jam-pvm.png
new file mode 100644
index 00000000..3e0915f5
Binary files /dev/null and b/assets/img/7-Polkadot/jam-pvm.png differ
diff --git a/assets/img/7-Polkadot/jam-state.png b/assets/img/7-Polkadot/jam-state.png
new file mode 100644
index 00000000..05ea4849
Binary files /dev/null and b/assets/img/7-Polkadot/jam-state.png differ
diff --git a/assets/img/7-Polkadot/jam-stf-deps.png b/assets/img/7-Polkadot/jam-stf-deps.png
new file mode 100644
index 00000000..2304a508
Binary files /dev/null and b/assets/img/7-Polkadot/jam-stf-deps.png differ
diff --git a/assets/img/7-Polkadot/jam-stf.png b/assets/img/7-Polkadot/jam-stf.png
new file mode 100644
index 00000000..fc011e9b
Binary files /dev/null and b/assets/img/7-Polkadot/jam-stf.png differ
diff --git a/assets/img/7-Polkadot/kusama-logo.svg b/assets/img/7-Polkadot/kusama-logo.svg
new file mode 100644
index 00000000..9c7fd451
--- /dev/null
+++ b/assets/img/7-Polkadot/kusama-logo.svg
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/content/polkadot/decisions/img/less-trust-more-truth.svg b/assets/img/7-Polkadot/less-trust-more-truth.svg
similarity index 100%
rename from content/polkadot/decisions/img/less-trust-more-truth.svg
rename to assets/img/7-Polkadot/less-trust-more-truth.svg
diff --git a/assets/img/7-Polkadot/locked-balance-example.svg b/assets/img/7-Polkadot/locked-balance-example.svg
new file mode 100644
index 00000000..66c55e01
--- /dev/null
+++ b/assets/img/7-Polkadot/locked-balance-example.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/locked-balance.svg b/assets/img/7-Polkadot/locked-balance.svg
new file mode 100644
index 00000000..e487c7ff
--- /dev/null
+++ b/assets/img/7-Polkadot/locked-balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/polkadot/shared-security/img/network-attack-2.svg b/assets/img/7-Polkadot/network-attack-2.svg
similarity index 100%
rename from content/polkadot/shared-security/img/network-attack-2.svg
rename to assets/img/7-Polkadot/network-attack-2.svg
diff --git a/content/polkadot/shared-security/img/network-attack.svg b/assets/img/7-Polkadot/network-attack.svg
similarity index 100%
rename from content/polkadot/shared-security/img/network-attack.svg
rename to assets/img/7-Polkadot/network-attack.svg
diff --git a/content/polkadot/shared-security/img/nintendo-console-extreme.png b/assets/img/7-Polkadot/nintendo-console-extreme.png
similarity index 100%
rename from content/polkadot/shared-security/img/nintendo-console-extreme.png
rename to assets/img/7-Polkadot/nintendo-console-extreme.png
diff --git a/content/polkadot/shared-security/img/nintendo-game-acala.png b/assets/img/7-Polkadot/nintendo-game-acala.png
similarity index 100%
rename from content/polkadot/shared-security/img/nintendo-game-acala.png
rename to assets/img/7-Polkadot/nintendo-game-acala.png
diff --git a/content/polkadot/shared-security/img/nintendo-game-astar.png b/assets/img/7-Polkadot/nintendo-game-astar.png
similarity index 100%
rename from content/polkadot/shared-security/img/nintendo-game-astar.png
rename to assets/img/7-Polkadot/nintendo-game-astar.png
diff --git a/content/polkadot/shared-security/img/nintendo-game-moonbeam.png b/assets/img/7-Polkadot/nintendo-game-moonbeam.png
similarity index 100%
rename from content/polkadot/shared-security/img/nintendo-game-moonbeam.png
rename to assets/img/7-Polkadot/nintendo-game-moonbeam.png
diff --git a/content/polkadot/shared-security/img/nintendo-game-polkadot.png b/assets/img/7-Polkadot/nintendo-game-polkadot.png
similarity index 100%
rename from content/polkadot/shared-security/img/nintendo-game-polkadot.png
rename to assets/img/7-Polkadot/nintendo-game-polkadot.png
diff --git a/content/polkadot/shared-security/img/parachain-finalization.svg b/assets/img/7-Polkadot/parachain-finalization.svg
similarity index 100%
rename from content/polkadot/shared-security/img/parachain-finalization.svg
rename to assets/img/7-Polkadot/parachain-finalization.svg
diff --git a/content/polkadot/shared-security/img/parachain-validation-multiple.svg b/assets/img/7-Polkadot/parachain-validation-multiple.svg
similarity index 100%
rename from content/polkadot/shared-security/img/parachain-validation-multiple.svg
rename to assets/img/7-Polkadot/parachain-validation-multiple.svg
diff --git a/content/polkadot/shared-security/img/parachain-validation.svg b/assets/img/7-Polkadot/parachain-validation.svg
similarity index 100%
rename from content/polkadot/shared-security/img/parachain-validation.svg
rename to assets/img/7-Polkadot/parachain-validation.svg
diff --git a/content/polkadot/shared-security/img/parachain-validators-colored.svg b/assets/img/7-Polkadot/parachain-validators-colored.svg
similarity index 100%
rename from content/polkadot/shared-security/img/parachain-validators-colored.svg
rename to assets/img/7-Polkadot/parachain-validators-colored.svg
diff --git a/content/polkadot/shared-security/img/parachain-validators.svg b/assets/img/7-Polkadot/parachain-validators.svg
similarity index 100%
rename from content/polkadot/shared-security/img/parachain-validators.svg
rename to assets/img/7-Polkadot/parachain-validators.svg
diff --git a/assets/img/7-Polkadot/pvm-formula.png b/assets/img/7-Polkadot/pvm-formula.png
new file mode 100644
index 00000000..df878139
Binary files /dev/null and b/assets/img/7-Polkadot/pvm-formula.png differ
diff --git a/assets/img/7-Polkadot/reserved-balance-example.svg b/assets/img/7-Polkadot/reserved-balance-example.svg
new file mode 100644
index 00000000..e370b561
--- /dev/null
+++ b/assets/img/7-Polkadot/reserved-balance-example.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/reserved-balance.svg b/assets/img/7-Polkadot/reserved-balance.svg
new file mode 100644
index 00000000..9c264db1
--- /dev/null
+++ b/assets/img/7-Polkadot/reserved-balance.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/img/7-Polkadot/rococo.png b/assets/img/7-Polkadot/rococo.png
new file mode 100644
index 00000000..59956390
Binary files /dev/null and b/assets/img/7-Polkadot/rococo.png differ
diff --git a/content/polkadot/shared-security/img/small-market-cap.svg b/assets/img/7-Polkadot/small-market-cap.svg
similarity index 100%
rename from content/polkadot/shared-security/img/small-market-cap.svg
rename to assets/img/7-Polkadot/small-market-cap.svg
diff --git a/content/polkadot/shared-security/img/speculative-graph.svg b/assets/img/7-Polkadot/speculative-graph.svg
similarity index 100%
rename from content/polkadot/shared-security/img/speculative-graph.svg
rename to assets/img/7-Polkadot/speculative-graph.svg
diff --git a/content/polkadot/shared-security/img/spongebob.jpg b/assets/img/7-Polkadot/spongebob.jpg
similarity index 100%
rename from content/polkadot/shared-security/img/spongebob.jpg
rename to assets/img/7-Polkadot/spongebob.jpg
diff --git a/assets/img/7-Polkadot/staking-rate.png b/assets/img/7-Polkadot/staking-rate.png
new file mode 100644
index 00000000..f102d315
Binary files /dev/null and b/assets/img/7-Polkadot/staking-rate.png differ
diff --git a/assets/img/7-Polkadot/substrate-abstract.png b/assets/img/7-Polkadot/substrate-abstract.png
new file mode 100644
index 00000000..e0c73fc0
Binary files /dev/null and b/assets/img/7-Polkadot/substrate-abstract.png differ
diff --git a/assets/img/7-Polkadot/treasury.png b/assets/img/7-Polkadot/treasury.png
new file mode 100644
index 00000000..b7b42298
Binary files /dev/null and b/assets/img/7-Polkadot/treasury.png differ
diff --git a/content/polkadot/decisions/img/trilemma.svg b/assets/img/7-Polkadot/trilemma.svg
similarity index 100%
rename from content/polkadot/decisions/img/trilemma.svg
rename to assets/img/7-Polkadot/trilemma.svg
diff --git a/assets/img/7-Polkadot/vmp.svg b/assets/img/7-Polkadot/vmp.svg
new file mode 100644
index 00000000..07bcc151
--- /dev/null
+++ b/assets/img/7-Polkadot/vmp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/polkadot/decisions/img/xcm-stack.svg b/assets/img/7-Polkadot/xcm-stack.svg
similarity index 100%
rename from content/polkadot/decisions/img/xcm-stack.svg
rename to assets/img/7-Polkadot/xcm-stack.svg
diff --git a/content/polkadot/decisions/img/xcmp-2.svg b/assets/img/7-Polkadot/xcmp-2.svg
similarity index 100%
rename from content/polkadot/decisions/img/xcmp-2.svg
rename to assets/img/7-Polkadot/xcmp-2.svg
diff --git a/content/polkadot/decisions/img/xcmp-finalization.svg b/assets/img/7-Polkadot/xcmp-finalization.svg
similarity index 100%
rename from content/polkadot/decisions/img/xcmp-finalization.svg
rename to assets/img/7-Polkadot/xcmp-finalization.svg
diff --git a/assets/img/7-Polkadot/xcmp.svg b/assets/img/7-Polkadot/xcmp.svg
new file mode 100644
index 00000000..963cf4c3
--- /dev/null
+++ b/assets/img/7-Polkadot/xcmp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/polkadot/zombienet/img/zombienet-env-vars.png b/assets/img/7-Polkadot/zombienet/zombienet-env-vars.png
similarity index 100%
rename from content/polkadot/zombienet/img/zombienet-env-vars.png
rename to assets/img/7-Polkadot/zombienet/zombienet-env-vars.png
diff --git a/assets/img/README.md b/assets/img/README.md
new file mode 100644
index 00000000..0565c773
--- /dev/null
+++ b/assets/img/README.md
@@ -0,0 +1,5 @@
+# PBA Graphical Assets
+
+- Please use any assets that live in any Parity of Web3 websites if possible first.
+- ALWAYS cite where you sourced an image you use! Put a note in these folders or the image title, and use that directly in your materials (citation specifics TBA, for now a link only is OK)
+- Peruse existing assets before requesting or adding another!
diff --git a/assets/ink!ubator_PBA6_2025.pdf b/assets/ink!ubator_PBA6_2025.pdf
new file mode 100644
index 00000000..af0b1956
Binary files /dev/null and b/assets/ink!ubator_PBA6_2025.pdf differ
diff --git a/assets/opengov_pba_lucerne_2025.pdf b/assets/opengov_pba_lucerne_2025.pdf
new file mode 100644
index 00000000..656544ba
Binary files /dev/null and b/assets/opengov_pba_lucerne_2025.pdf differ
diff --git a/assets/opengov_pba_lucerne_2025_fin.pdf b/assets/opengov_pba_lucerne_2025_fin.pdf
new file mode 100644
index 00000000..b1577192
Binary files /dev/null and b/assets/opengov_pba_lucerne_2025_fin.pdf differ
diff --git a/assets/plugin/chart/chart.js b/assets/plugin/chart/chart.js
new file mode 100644
index 00000000..62870bb1
--- /dev/null
+++ b/assets/plugin/chart/chart.js
@@ -0,0 +1,207 @@
+/*****************************************************************
+ ** Author: Asvin Goel, goel@telematique.eu
+ ** Fixed for Reveal4: kotborealis@awooo.ru
+ **
+ ** A plugin for reveal.js allowing to integrate Chart.js
+ **
+ ** Version: 1.3.1
+ **
+ ** License: MIT license (see LICENSE.md)
+ **
+ ******************************************************************/
+
+/**
+ * Reveal Plugin
+ * https://revealjs.com/creating-plugins/
+ */
+window.RevealChart = window.RevealChart || {
+ id: "RevealChart",
+ init: function(deck) {
+ initChart(deck);
+ },
+ update: function(canvas, idx, data) {
+ update(canvas, idx, data);
+ },
+};
+
+const initChart = function(Reveal) {
+ function parseJSON(str) {
+ var json;
+ try {
+ json = JSON.parse(str);
+ } catch (e) {
+ return null;
+ }
+ return json;
+ }
+
+ /*
+ * Recursively merge properties of two objects
+ */
+ function mergeRecursive(obj1, obj2) {
+ for (var p in obj2) {
+ try {
+ // Property in destination object set; update its value.
+ if (obj1[p] !== null && typeof obj1[p] === "object" && typeof obj2[p] === "object") {
+ obj1[p] = mergeRecursive(obj1[p], obj2[p]);
+ } else {
+ obj1[p] = obj2[p];
+ }
+ } catch (e) {
+ // Property in destination object not set; create it and set its value.
+ obj1[p] = obj2[p];
+ }
+ }
+
+ return obj1;
+ }
+
+ function createChart(canvas, CSV, comments) {
+ canvas.chart = null;
+ var ctx = canvas.getContext("2d");
+ var chartOptions = { responsive: true, maintainAspectRatio: false };
+ var chartData = { labels: null, datasets: [] };
+ if (comments !== null) {
+ for (var j = 0; j < comments.length; j++) {
+ comments[j] = comments[j].replace(//, "");
+ var config = parseJSON(comments[j]);
+ if (config) {
+ if (config.data) {
+ mergeRecursive(chartData, config.data);
+ }
+ if (config.options) {
+ mergeRecursive(chartOptions, config.options);
+ }
+ }
+ }
+ }
+
+ var lines = CSV.split("\n").filter(function(v) {
+ return v !== "";
+ });
+ // if labels are not defined, get them from first line
+ if (chartData.labels === null && lines.length > 0) {
+ chartData.labels = lines[0].split(",");
+ chartData.labels.shift();
+ lines.shift();
+ }
+ // get data values
+ for (var j = 0; j < lines.length; j++) {
+ if (chartData.datasets.length <= j) chartData.datasets[j] = {};
+ chartData.datasets[j].data = lines[j].split(","); // .filter(function(v){return v!==''});
+ chartData.datasets[j].label = chartData.datasets[j].data[0];
+ chartData.datasets[j].data.shift();
+ for (var k = 0; k < chartData.datasets[j].data.length; k++) {
+ chartData.datasets[j].data[k] = Number(chartData.datasets[j].data[k]);
+ }
+ }
+
+ // add chart options
+ var config = chartConfig[canvas.getAttribute("data-chart")];
+ if (config) {
+ for (var j = 0; j < chartData.datasets.length; j++) {
+ for (var attrname in config) {
+ if (!chartData.datasets[j][attrname]) {
+ chartData.datasets[j][attrname] = config[attrname][j % config[attrname].length];
+ }
+ }
+ }
+ }
+
+ canvas.chart = new Chart(ctx, { type: canvas.getAttribute("data-chart"), data: chartData, options: chartOptions });
+ }
+
+ function updateChart(canvas, idx, data) {
+ canvas.chart.data.datasets[idx].data = data;
+ recreateChart(canvas);
+ }
+
+ var initializeCharts = function() {
+ // Get all canvases
+ var canvases = document.querySelectorAll("canvas");
+ for (var i = 0; i < canvases.length; i++) {
+ // check if canvas has data-chart attribute
+ if (canvases[i].hasAttribute("data-chart")) {
+ var CSV = canvases[i].innerHTML.trim();
+ var comments = CSV.match(//g);
+ CSV = CSV.replace(//g, "").replace(/^\s*\n/gm, "");
+ if (!canvases[i].hasAttribute("data-chart-src")) {
+ createChart(canvases[i], CSV, comments);
+ } else {
+ var canvas = canvases[i];
+ var xhr = new XMLHttpRequest();
+ xhr.onload = function() {
+ if (xhr.readyState === 4) {
+ createChart(canvas, xhr.responseText, comments);
+ } else {
+ console.warn(
+ "Failed to get file " + canvas.getAttribute("data-chart-src") + ". ReadyState: " + xhr.readyState
+ + ", Status: " + xhr.status,
+ );
+ }
+ };
+
+ xhr.open("GET", canvas.getAttribute("data-chart-src"), false);
+ try {
+ xhr.send();
+ } catch (error) {
+ console.warn(
+ "Failed to get file " + canvas.getAttribute("data-chart-src")
+ + ". Make sure that the presentation and the file are served by a HTTP server and the file can be found there. "
+ + error,
+ );
+ }
+ }
+ }
+ }
+ };
+
+ function recreateChart(canvas) {
+ // clear data to redraw animation
+ var data = canvas.chart.data.datasets;
+ canvas.chart.data.datasets = [];
+ canvas.chart.update();
+ canvas.style.visibility = "hidden";
+ setTimeout(
+ function(canvas, data) {
+ canvas.chart.data.datasets = data;
+ canvas.style.visibility = "visible";
+ canvas.chart.update();
+ },
+ 500,
+ canvas,
+ data,
+ ); // wait for slide transition to re-add data and animation
+ /*
+ var config = canvas.chart.config;
+ canvas.chart.destroy();
+ setTimeout( function() { canvas.chart = new Chart(canvas, config);}, 500); // wait for slide transition
+ */
+ }
+
+ // check if chart option is given or not
+ var chartConfig = Reveal.getConfig().chart || {};
+
+ // set global chart options
+ var config = chartConfig.defaults;
+ if (config) {
+ mergeRecursive(Chart.defaults, config);
+ }
+
+ Reveal.addEventListener("ready", function() {
+ initializeCharts();
+ Reveal.addEventListener("slidechanged", function() {
+ var canvases = Reveal.getCurrentSlide().querySelectorAll("canvas[data-chart]");
+ for (var i = 0; i < canvases.length; i++) {
+ if (canvases[i].chart && canvases[i].chart.config.options.animation !== false) {
+ recreateChart(canvases[i]);
+ }
+ }
+ });
+ });
+
+ this.update = updateChart;
+
+ return this;
+};
diff --git a/assets/plugin/chart/chart.min.js b/assets/plugin/chart/chart.min.js
new file mode 100644
index 00000000..42006258
--- /dev/null
+++ b/assets/plugin/chart/chart.min.js
@@ -0,0 +1,8754 @@
+/*!
+ * Chart.js v3.9.0
+ * https://www.chartjs.org
+ * (c) 2022 Chart.js Contributors
+ * Released under the MIT License
+ */
+!function(t, e) {
+ "object" == typeof exports && "undefined" != typeof module
+ ? module.exports = e()
+ : "function" == typeof define && define.amd
+ ? define(e)
+ : (t = "undefined" != typeof globalThis ? globalThis : t || self).Chart = e();
+}(this, function() {
+ "use strict";
+ function t() {}
+ const e = function() {
+ let t = 0;
+ return function() {
+ return t++;
+ };
+ }();
+ function i(t) {
+ return null == t;
+ }
+ function s(t) {
+ if (Array.isArray && Array.isArray(t)) return !0;
+ const e = Object.prototype.toString.call(t);
+ return "[object" === e.slice(0, 7) && "Array]" === e.slice(-6);
+ }
+ function n(t) {
+ return null !== t && "[object Object]" === Object.prototype.toString.call(t);
+ }
+ const o = t => ("number" == typeof t || t instanceof Number) && isFinite(+t);
+ function a(t, e) {
+ return o(t) ? t : e;
+ }
+ function r(t, e) {
+ return void 0 === t ? e : t;
+ }
+ const l = (t, e) => "string" == typeof t && t.endsWith("%") ? parseFloat(t) / 100 : t / e,
+ h = (t, e) => "string" == typeof t && t.endsWith("%") ? parseFloat(t) / 100 * e : +t;
+ function c(t, e, i) {
+ if (t && "function" == typeof t.call) return t.apply(i, e);
+ }
+ function d(t, e, i, o) {
+ let a, r, l;
+ if (s(t)) {
+ if (r = t.length, o) for (a = r - 1; a >= 0; a--) e.call(i, t[a], a);
+ else for (a = 0; a < r; a++) e.call(i, t[a], a);
+ } else if (n(t)) for (l = Object.keys(t), r = l.length, a = 0; a < r; a++) e.call(i, t[l[a]], l[a]);
+ }
+ function u(t, e) {
+ let i, s, n, o;
+ if (!t || !e || t.length !== e.length) return !1;
+ for (i = 0, s = t.length; i < s; ++i) {
+ if (n = t[i], o = e[i], n.datasetIndex !== o.datasetIndex || n.index !== o.index) return !1;
+ }
+ return !0;
+ }
+ function f(t) {
+ if (s(t)) return t.map(f);
+ if (n(t)) {
+ const e = Object.create(null), i = Object.keys(t), s = i.length;
+ let n = 0;
+ for (; n < s; ++n) e[i[n]] = f(t[i[n]]);
+ return e;
+ }
+ return t;
+ }
+ function g(t) {
+ return -1 === ["__proto__", "prototype", "constructor"].indexOf(t);
+ }
+ function p(t, e, i, s) {
+ if (!g(t)) return;
+ const o = e[t], a = i[t];
+ n(o) && n(a) ? m(o, a, s) : e[t] = f(a);
+ }
+ function m(t, e, i) {
+ const o = s(e) ? e : [e], a = o.length;
+ if (!n(t)) return t;
+ const r = (i = i || {}).merger || p;
+ for (let s = 0; s < a; ++s) {
+ if (!n(e = o[s])) continue;
+ const a = Object.keys(e);
+ for (let s = 0, n = a.length; s < n; ++s) r(a[s], t, e, i);
+ }
+ return t;
+ }
+ function b(t, e) {
+ return m(t, e, { merger: x });
+ }
+ function x(t, e, i) {
+ if (!g(t)) return;
+ const s = e[t], o = i[t];
+ n(s) && n(o) ? b(s, o) : Object.prototype.hasOwnProperty.call(e, t) || (e[t] = f(o));
+ }
+ const _ = { "": t => t, x: t => t.x, y: t => t.y };
+ function y(t, e) {
+ const i = _[e] || (_[e] = function(t) {
+ const e = v(t);
+ return t => {
+ for (const i of e) {
+ if ("" === i) break;
+ t = t && t[i];
+ }
+ return t;
+ };
+ }(e));
+ return i(t);
+ }
+ function v(t) {
+ const e = t.split("."), i = [];
+ let s = "";
+ for (const t of e) s += t, s.endsWith("\\") ? s = s.slice(0, -1) + "." : (i.push(s), s = "");
+ return i;
+ }
+ function w(t) {
+ return t.charAt(0).toUpperCase() + t.slice(1);
+ }
+ const M = t => void 0 !== t,
+ k = t => "function" == typeof t,
+ S = (t, e) => {
+ if (t.size !== e.size) return !1;
+ for (const i of t) if (!e.has(i)) return !1;
+ return !0;
+ };
+ function P(t) {
+ return "mouseup" === t.type || "click" === t.type || "contextmenu" === t.type;
+ }
+ const D = Math.PI,
+ O = 2 * D,
+ C = O + D,
+ A = Number.POSITIVE_INFINITY,
+ T = D / 180,
+ L = D / 2,
+ E = D / 4,
+ R = 2 * D / 3,
+ I = Math.log10,
+ z = Math.sign;
+ function F(t) {
+ const e = Math.round(t);
+ t = N(t, e, t / 1e3) ? e : t;
+ const i = Math.pow(10, Math.floor(I(t))), s = t / i;
+ return (s <= 1 ? 1 : s <= 2 ? 2 : s <= 5 ? 5 : 10) * i;
+ }
+ function V(t) {
+ const e = [], i = Math.sqrt(t);
+ let s;
+ for (s = 1; s < i; s++) t % s == 0 && (e.push(s), e.push(t / s));
+ return i === (0 | i) && e.push(i), e.sort((t, e) => t - e).pop(), e;
+ }
+ function B(t) {
+ return !isNaN(parseFloat(t)) && isFinite(t);
+ }
+ function N(t, e, i) {
+ return Math.abs(t - e) < i;
+ }
+ function W(t, e) {
+ const i = Math.round(t);
+ return i - e <= t && i + e >= t;
+ }
+ function j(t, e, i) {
+ let s, n, o;
+ for (s = 0, n = t.length; s < n; s++) {
+ o = t[s][i], isNaN(o) || (e.min = Math.min(e.min, o), e.max = Math.max(e.max, o));
+ }
+ }
+ function H(t) {
+ return t * (D / 180);
+ }
+ function $(t) {
+ return t * (180 / D);
+ }
+ function Y(t) {
+ if (!o(t)) return;
+ let e = 1, i = 0;
+ for (; Math.round(t * e) / e !== t;) e *= 10, i++;
+ return i;
+ }
+ function U(t, e) {
+ const i = e.x - t.x, s = e.y - t.y, n = Math.sqrt(i * i + s * s);
+ let o = Math.atan2(s, i);
+ return o < -.5 * D && (o += O), { angle: o, distance: n };
+ }
+ function X(t, e) {
+ return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2));
+ }
+ function q(t, e) {
+ return (t - e + C) % O - D;
+ }
+ function K(t) {
+ return (t % O + O) % O;
+ }
+ function G(t, e, i, s) {
+ const n = K(t), o = K(e), a = K(i), r = K(o - n), l = K(a - n), h = K(n - o), c = K(n - a);
+ return n === o || n === a || s && o === a || r > l && h < c;
+ }
+ function Z(t, e, i) {
+ return Math.max(e, Math.min(i, t));
+ }
+ function J(t) {
+ return Z(t, -32768, 32767);
+ }
+ function Q(t, e, i, s = 1e-6) {
+ return t >= Math.min(e, i) - s && t <= Math.max(e, i) + s;
+ }
+ function tt(t, e, i) {
+ i = i || (i => t[i] < e);
+ let s, n = t.length - 1, o = 0;
+ for (; n - o > 1;) s = o + n >> 1, i(s) ? o = s : n = s;
+ return { lo: o, hi: n };
+ }
+ const et = (t, e, i, s) => tt(t, i, s ? s => t[s][e] <= i : s => t[s][e] < i),
+ it = (t, e, i) => tt(t, i, s => t[s][e] >= i);
+ function st(t, e, i) {
+ let s = 0, n = t.length;
+ for (; s < n && t[s] < e;) s++;
+ for (; n > s && t[n - 1] > i;) n--;
+ return s > 0 || n < t.length ? t.slice(s, n) : t;
+ }
+ const nt = ["push", "pop", "shift", "splice", "unshift"];
+ function ot(t, e) {
+ t._chartjs
+ ? t._chartjs.listeners.push(e)
+ : (Object.defineProperty(t, "_chartjs", { configurable: !0, enumerable: !1, value: { listeners: [e] } }),
+ nt.forEach(e => {
+ const i = "_onData" + w(e), s = t[e];
+ Object.defineProperty(t, e, {
+ configurable: !0,
+ enumerable: !1,
+ value(...e) {
+ const n = s.apply(this, e);
+ return t._chartjs.listeners.forEach(t => {
+ "function" == typeof t[i] && t[i](...e);
+ }),
+ n;
+ },
+ });
+ }));
+ }
+ function at(t, e) {
+ const i = t._chartjs;
+ if (!i) return;
+ const s = i.listeners, n = s.indexOf(e);
+ -1 !== n && s.splice(n, 1),
+ s.length > 0 || (nt.forEach(e => {
+ delete t[e];
+ }),
+ delete t._chartjs);
+ }
+ function rt(t) {
+ const e = new Set();
+ let i, s;
+ for (i = 0, s = t.length; i < s; ++i) e.add(t[i]);
+ return e.size === s ? t : Array.from(e);
+ }
+ const lt = "undefined" == typeof window
+ ? function(t) {
+ return t();
+ }
+ : window.requestAnimationFrame;
+ function ht(t, e, i) {
+ const s = i || (t => Array.prototype.slice.call(t));
+ let n = !1, o = [];
+ return function(...i) {
+ o = s(i),
+ n || (n = !0,
+ lt.call(window, () => {
+ n = !1, t.apply(e, o);
+ }));
+ };
+ }
+ function ct(t, e) {
+ let i;
+ return function(...s) {
+ return e ? (clearTimeout(i), i = setTimeout(t, e, s)) : t.apply(this, s), e;
+ };
+ }
+ const dt = t => "start" === t ? "left" : "end" === t ? "right" : "center",
+ ut = (t, e, i) => "start" === t ? e : "end" === t ? i : (e + i) / 2,
+ ft = (t, e, i, s) => t === (s ? "left" : "right") ? i : "center" === t ? (e + i) / 2 : e;
+ function gt(t, e, i) {
+ const s = e.length;
+ let n = 0, o = s;
+ if (t._sorted) {
+ const { iScale: a, _parsed: r } = t,
+ l = a.axis,
+ { min: h, max: c, minDefined: d, maxDefined: u } = a.getUserBounds();
+ d && (n = Z(Math.min(et(r, a.axis, h).lo, i ? s : et(e, l, a.getPixelForValue(h)).lo), 0, s - 1)),
+ o = u
+ ? Z(Math.max(et(r, a.axis, c, !0).hi + 1, i ? 0 : et(e, l, a.getPixelForValue(c), !0).hi + 1), n, s) - n
+ : s - n;
+ }
+ return { start: n, count: o };
+ }
+ function pt(t) {
+ const { xScale: e, yScale: i, _scaleRanges: s } = t, n = { xmin: e.min, xmax: e.max, ymin: i.min, ymax: i.max };
+ if (!s) return t._scaleRanges = n, !0;
+ const o = s.xmin !== e.min || s.xmax !== e.max || s.ymin !== i.min || s.ymax !== i.max;
+ return Object.assign(s, n), o;
+ }
+ var mt = new class {
+ constructor() {
+ this._request = null, this._charts = new Map(), this._running = !1, this._lastDate = void 0;
+ }
+ _notify(t, e, i, s) {
+ const n = e.listeners[s], o = e.duration;
+ n.forEach(s => s({ chart: t, initial: e.initial, numSteps: o, currentStep: Math.min(i - e.start, o) }));
+ }
+ _refresh() {
+ this._request || (this._running = !0,
+ this._request = lt.call(window, () => {
+ this._update(), this._request = null, this._running && this._refresh();
+ }));
+ }
+ _update(t = Date.now()) {
+ let e = 0;
+ this._charts.forEach((i, s) => {
+ if (!i.running || !i.items.length) return;
+ const n = i.items;
+ let o, a = n.length - 1, r = !1;
+ for (; a >= 0; --a) {
+ o = n[a],
+ o._active
+ ? (o._total > i.duration && (i.duration = o._total), o.tick(t), r = !0)
+ : (n[a] = n[n.length - 1], n.pop());
+ }
+ r && (s.draw(), this._notify(s, i, t, "progress")),
+ n.length || (i.running = !1, this._notify(s, i, t, "complete"), i.initial = !1),
+ e += n.length;
+ }),
+ this._lastDate = t,
+ 0 === e && (this._running = !1);
+ }
+ _getAnims(t) {
+ const e = this._charts;
+ let i = e.get(t);
+ return i || (i = { running: !1, initial: !0, items: [], listeners: { complete: [], progress: [] } }, e.set(t, i)),
+ i;
+ }
+ listen(t, e, i) {
+ this._getAnims(t).listeners[e].push(i);
+ }
+ add(t, e) {
+ e && e.length && this._getAnims(t).items.push(...e);
+ }
+ has(t) {
+ return this._getAnims(t).items.length > 0;
+ }
+ start(t) {
+ const e = this._charts.get(t);
+ e
+ && (e.running = !0,
+ e.start = Date.now(),
+ e.duration = e.items.reduce((t, e) => Math.max(t, e._duration), 0),
+ this._refresh());
+ }
+ running(t) {
+ if (!this._running) return !1;
+ const e = this._charts.get(t);
+ return !!(e && e.running && e.items.length);
+ }
+ stop(t) {
+ const e = this._charts.get(t);
+ if (!e || !e.items.length) return;
+ const i = e.items;
+ let s = i.length - 1;
+ for (; s >= 0; --s) i[s].cancel();
+ e.items = [], this._notify(t, e, Date.now(), "complete");
+ }
+ remove(t) {
+ return this._charts.delete(t);
+ }
+ }();
+ /*!
+ * @kurkle/color v0.2.1
+ * https://github.com/kurkle/color#readme
+ * (c) 2022 Jukka Kurkela
+ * Released under the MIT License
+ */ function bt(t) {
+ return t + .5 | 0;
+ }
+ const xt = (t, e, i) => Math.max(Math.min(t, i), e);
+ function _t(t) {
+ return xt(bt(2.55 * t), 0, 255);
+ }
+ function yt(t) {
+ return xt(bt(255 * t), 0, 255);
+ }
+ function vt(t) {
+ return xt(bt(t / 2.55) / 100, 0, 1);
+ }
+ function wt(t) {
+ return xt(bt(100 * t), 0, 100);
+ }
+ const Mt = {
+ 0: 0,
+ 1: 1,
+ 2: 2,
+ 3: 3,
+ 4: 4,
+ 5: 5,
+ 6: 6,
+ 7: 7,
+ 8: 8,
+ 9: 9,
+ A: 10,
+ B: 11,
+ C: 12,
+ D: 13,
+ E: 14,
+ F: 15,
+ a: 10,
+ b: 11,
+ c: 12,
+ d: 13,
+ e: 14,
+ f: 15,
+ },
+ kt = [..."0123456789ABCDEF"],
+ St = t => kt[15 & t],
+ Pt = t => kt[(240 & t) >> 4] + kt[15 & t],
+ Dt = t => (240 & t) >> 4 == (15 & t);
+ function Ot(t) {
+ var e = (t => Dt(t.r) && Dt(t.g) && Dt(t.b) && Dt(t.a))(t) ? St : Pt;
+ return t ? "#" + e(t.r) + e(t.g) + e(t.b) + ((t, e) => t < 255 ? e(t) : "")(t.a, e) : void 0;
+ }
+ const Ct =
+ /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
+ function At(t, e, i) {
+ const s = e * Math.min(i, 1 - i), n = (e, n = (e + t / 30) % 12) => i - s * Math.max(Math.min(n - 3, 9 - n, 1), -1);
+ return [n(0), n(8), n(4)];
+ }
+ function Tt(t, e, i) {
+ const s = (s, n = (s + t / 60) % 6) => i - i * e * Math.max(Math.min(n, 4 - n, 1), 0);
+ return [s(5), s(3), s(1)];
+ }
+ function Lt(t, e, i) {
+ const s = At(t, 1, .5);
+ let n;
+ for (e + i > 1 && (n = 1 / (e + i), e *= n, i *= n), n = 0; n < 3; n++) s[n] *= 1 - e - i, s[n] += e;
+ return s;
+ }
+ function Et(t) {
+ const e = t.r / 255, i = t.g / 255, s = t.b / 255, n = Math.max(e, i, s), o = Math.min(e, i, s), a = (n + o) / 2;
+ let r, l, h;
+ return n !== o && (h = n - o,
+ l = a > .5 ? h / (2 - n - o) : h / (n + o),
+ r = function(t, e, i, s, n) {
+ return t === n ? (e - i) / s + (e < i ? 6 : 0) : e === n ? (i - t) / s + 2 : (t - e) / s + 4;
+ }(e, i, s, h, n),
+ r = 60 * r + .5),
+ [0 | r, l || 0, a];
+ }
+ function Rt(t, e, i, s) {
+ return (Array.isArray(e) ? t(e[0], e[1], e[2]) : t(e, i, s)).map(yt);
+ }
+ function It(t, e, i) {
+ return Rt(At, t, e, i);
+ }
+ function zt(t) {
+ return (t % 360 + 360) % 360;
+ }
+ function Ft(t) {
+ const e = Ct.exec(t);
+ let i, s = 255;
+ if (!e) return;
+ e[5] !== i && (s = e[6] ? _t(+e[5]) : yt(+e[5]));
+ const n = zt(+e[2]), o = +e[3] / 100, a = +e[4] / 100;
+ return i = "hwb" === e[1]
+ ? function(t, e, i) {
+ return Rt(Lt, t, e, i);
+ }(n, o, a)
+ : "hsv" === e[1]
+ ? function(t, e, i) {
+ return Rt(Tt, t, e, i);
+ }(n, o, a)
+ : It(n, o, a),
+ { r: i[0], g: i[1], b: i[2], a: s };
+ }
+ const Vt = {
+ x: "dark",
+ Z: "light",
+ Y: "re",
+ X: "blu",
+ W: "gr",
+ V: "medium",
+ U: "slate",
+ A: "ee",
+ T: "ol",
+ S: "or",
+ B: "ra",
+ C: "lateg",
+ D: "ights",
+ R: "in",
+ Q: "turquois",
+ E: "hi",
+ P: "ro",
+ O: "al",
+ N: "le",
+ M: "de",
+ L: "yello",
+ F: "en",
+ K: "ch",
+ G: "arks",
+ H: "ea",
+ I: "ightg",
+ J: "wh",
+ },
+ Bt = {
+ OiceXe: "f0f8ff",
+ antiquewEte: "faebd7",
+ aqua: "ffff",
+ aquamarRe: "7fffd4",
+ azuY: "f0ffff",
+ beige: "f5f5dc",
+ bisque: "ffe4c4",
+ black: "0",
+ blanKedOmond: "ffebcd",
+ Xe: "ff",
+ XeviTet: "8a2be2",
+ bPwn: "a52a2a",
+ burlywood: "deb887",
+ caMtXe: "5f9ea0",
+ KartYuse: "7fff00",
+ KocTate: "d2691e",
+ cSO: "ff7f50",
+ cSnflowerXe: "6495ed",
+ cSnsilk: "fff8dc",
+ crimson: "dc143c",
+ cyan: "ffff",
+ xXe: "8b",
+ xcyan: "8b8b",
+ xgTMnPd: "b8860b",
+ xWay: "a9a9a9",
+ xgYF: "6400",
+ xgYy: "a9a9a9",
+ xkhaki: "bdb76b",
+ xmagFta: "8b008b",
+ xTivegYF: "556b2f",
+ xSange: "ff8c00",
+ xScEd: "9932cc",
+ xYd: "8b0000",
+ xsOmon: "e9967a",
+ xsHgYF: "8fbc8f",
+ xUXe: "483d8b",
+ xUWay: "2f4f4f",
+ xUgYy: "2f4f4f",
+ xQe: "ced1",
+ xviTet: "9400d3",
+ dAppRk: "ff1493",
+ dApskyXe: "bfff",
+ dimWay: "696969",
+ dimgYy: "696969",
+ dodgerXe: "1e90ff",
+ fiYbrick: "b22222",
+ flSOwEte: "fffaf0",
+ foYstWAn: "228b22",
+ fuKsia: "ff00ff",
+ gaRsbSo: "dcdcdc",
+ ghostwEte: "f8f8ff",
+ gTd: "ffd700",
+ gTMnPd: "daa520",
+ Way: "808080",
+ gYF: "8000",
+ gYFLw: "adff2f",
+ gYy: "808080",
+ honeyMw: "f0fff0",
+ hotpRk: "ff69b4",
+ RdianYd: "cd5c5c",
+ Rdigo: "4b0082",
+ ivSy: "fffff0",
+ khaki: "f0e68c",
+ lavFMr: "e6e6fa",
+ lavFMrXsh: "fff0f5",
+ lawngYF: "7cfc00",
+ NmoncEffon: "fffacd",
+ ZXe: "add8e6",
+ ZcSO: "f08080",
+ Zcyan: "e0ffff",
+ ZgTMnPdLw: "fafad2",
+ ZWay: "d3d3d3",
+ ZgYF: "90ee90",
+ ZgYy: "d3d3d3",
+ ZpRk: "ffb6c1",
+ ZsOmon: "ffa07a",
+ ZsHgYF: "20b2aa",
+ ZskyXe: "87cefa",
+ ZUWay: "778899",
+ ZUgYy: "778899",
+ ZstAlXe: "b0c4de",
+ ZLw: "ffffe0",
+ lime: "ff00",
+ limegYF: "32cd32",
+ lRF: "faf0e6",
+ magFta: "ff00ff",
+ maPon: "800000",
+ VaquamarRe: "66cdaa",
+ VXe: "cd",
+ VScEd: "ba55d3",
+ VpurpN: "9370db",
+ VsHgYF: "3cb371",
+ VUXe: "7b68ee",
+ VsprRggYF: "fa9a",
+ VQe: "48d1cc",
+ VviTetYd: "c71585",
+ midnightXe: "191970",
+ mRtcYam: "f5fffa",
+ mistyPse: "ffe4e1",
+ moccasR: "ffe4b5",
+ navajowEte: "ffdead",
+ navy: "80",
+ Tdlace: "fdf5e6",
+ Tive: "808000",
+ TivedBb: "6b8e23",
+ Sange: "ffa500",
+ SangeYd: "ff4500",
+ ScEd: "da70d6",
+ pOegTMnPd: "eee8aa",
+ pOegYF: "98fb98",
+ pOeQe: "afeeee",
+ pOeviTetYd: "db7093",
+ papayawEp: "ffefd5",
+ pHKpuff: "ffdab9",
+ peru: "cd853f",
+ pRk: "ffc0cb",
+ plum: "dda0dd",
+ powMrXe: "b0e0e6",
+ purpN: "800080",
+ YbeccapurpN: "663399",
+ Yd: "ff0000",
+ Psybrown: "bc8f8f",
+ PyOXe: "4169e1",
+ saddNbPwn: "8b4513",
+ sOmon: "fa8072",
+ sandybPwn: "f4a460",
+ sHgYF: "2e8b57",
+ sHshell: "fff5ee",
+ siFna: "a0522d",
+ silver: "c0c0c0",
+ skyXe: "87ceeb",
+ UXe: "6a5acd",
+ UWay: "708090",
+ UgYy: "708090",
+ snow: "fffafa",
+ sprRggYF: "ff7f",
+ stAlXe: "4682b4",
+ tan: "d2b48c",
+ teO: "8080",
+ tEstN: "d8bfd8",
+ tomato: "ff6347",
+ Qe: "40e0d0",
+ viTet: "ee82ee",
+ JHt: "f5deb3",
+ wEte: "ffffff",
+ wEtesmoke: "f5f5f5",
+ Lw: "ffff00",
+ LwgYF: "9acd32",
+ };
+ let Nt;
+ function Wt(t) {
+ Nt || (Nt = function() {
+ const t = {}, e = Object.keys(Bt), i = Object.keys(Vt);
+ let s, n, o, a, r;
+ for (s = 0; s < e.length; s++) {
+ for (a = r = e[s], n = 0; n < i.length; n++) o = i[n], r = r.replace(o, Vt[o]);
+ o = parseInt(Bt[a], 16), t[r] = [o >> 16 & 255, o >> 8 & 255, 255 & o];
+ }
+ return t;
+ }(),
+ Nt.transparent = [0, 0, 0, 0]);
+ const e = Nt[t.toLowerCase()];
+ return e && { r: e[0], g: e[1], b: e[2], a: 4 === e.length ? e[3] : 255 };
+ }
+ const jt = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
+ const Ht = t => t <= .0031308 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - .055,
+ $t = t => t <= .04045 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4);
+ function Yt(t, e, i) {
+ if (t) {
+ let s = Et(t);
+ s[e] = Math.max(0, Math.min(s[e] + s[e] * i, 0 === e ? 360 : 1)), s = It(s), t.r = s[0], t.g = s[1], t.b = s[2];
+ }
+ }
+ function Ut(t, e) {
+ return t ? Object.assign(e || {}, t) : t;
+ }
+ function Xt(t) {
+ var e = { r: 0, g: 0, b: 0, a: 255 };
+ return Array.isArray(t)
+ ? t.length >= 3 && (e = { r: t[0], g: t[1], b: t[2], a: 255 }, t.length > 3 && (e.a = yt(t[3])))
+ : (e = Ut(t, { r: 0, g: 0, b: 0, a: 1 })).a = yt(e.a),
+ e;
+ }
+ function qt(t) {
+ return "r" === t.charAt(0)
+ ? function(t) {
+ const e = jt.exec(t);
+ let i, s, n, o = 255;
+ if (e) {
+ if (e[7] !== i) {
+ const t = +e[7];
+ o = e[8] ? _t(t) : xt(255 * t, 0, 255);
+ }
+ return i = +e[1],
+ s = +e[3],
+ n = +e[5],
+ i = 255 & (e[2] ? _t(i) : xt(i, 0, 255)),
+ s = 255 & (e[4] ? _t(s) : xt(s, 0, 255)),
+ n = 255 & (e[6] ? _t(n) : xt(n, 0, 255)),
+ { r: i, g: s, b: n, a: o };
+ }
+ }(t)
+ : Ft(t);
+ }
+ class Kt {
+ constructor(t) {
+ if (t instanceof Kt) return t;
+ const e = typeof t;
+ let i;
+ var s, n, o;
+ "object" === e ? i = Xt(t) : "string" === e && (o = (s = t).length,
+ "#" === s[0]
+ && (4 === o || 5 === o
+ ? n = {
+ r: 255 & 17 * Mt[s[1]],
+ g: 255 & 17 * Mt[s[2]],
+ b: 255 & 17 * Mt[s[3]],
+ a: 5 === o ? 17 * Mt[s[4]] : 255,
+ }
+ : 7 !== o && 9 !== o
+ || (n = {
+ r: Mt[s[1]] << 4 | Mt[s[2]],
+ g: Mt[s[3]] << 4 | Mt[s[4]],
+ b: Mt[s[5]] << 4 | Mt[s[6]],
+ a: 9 === o ? Mt[s[7]] << 4 | Mt[s[8]] : 255,
+ })),
+ i = n || Wt(t) || qt(t)),
+ this._rgb = i,
+ this._valid = !!i;
+ }
+ get valid() {
+ return this._valid;
+ }
+ get rgb() {
+ var t = Ut(this._rgb);
+ return t && (t.a = vt(t.a)), t;
+ }
+ set rgb(t) {
+ this._rgb = Xt(t);
+ }
+ rgbString() {
+ return this._valid
+ ? (t = this._rgb) && (t.a < 255 ? `rgba(${t.r}, ${t.g}, ${t.b}, ${vt(t.a)})` : `rgb(${t.r}, ${t.g}, ${t.b})`)
+ : void 0;
+ var t;
+ }
+ hexString() {
+ return this._valid ? Ot(this._rgb) : void 0;
+ }
+ hslString() {
+ return this._valid
+ ? function(t) {
+ if (!t) return;
+ const e = Et(t), i = e[0], s = wt(e[1]), n = wt(e[2]);
+ return t.a < 255 ? `hsla(${i}, ${s}%, ${n}%, ${vt(t.a)})` : `hsl(${i}, ${s}%, ${n}%)`;
+ }(this._rgb)
+ : void 0;
+ }
+ mix(t, e) {
+ if (t) {
+ const i = this.rgb, s = t.rgb;
+ let n;
+ const o = e === n ? .5 : e,
+ a = 2 * o - 1,
+ r = i.a - s.a,
+ l = ((a * r == -1 ? a : (a + r) / (1 + a * r)) + 1) / 2;
+ n = 1 - l,
+ i.r = 255 & l * i.r + n * s.r + .5,
+ i.g = 255 & l * i.g + n * s.g + .5,
+ i.b = 255 & l * i.b + n * s.b + .5,
+ i.a = o * i.a + (1 - o) * s.a,
+ this.rgb = i;
+ }
+ return this;
+ }
+ interpolate(t, e) {
+ return t && (this._rgb = function(t, e, i) {
+ const s = $t(vt(t.r)), n = $t(vt(t.g)), o = $t(vt(t.b));
+ return {
+ r: yt(Ht(s + i * ($t(vt(e.r)) - s))),
+ g: yt(Ht(n + i * ($t(vt(e.g)) - n))),
+ b: yt(Ht(o + i * ($t(vt(e.b)) - o))),
+ a: t.a + i * (e.a - t.a),
+ };
+ }(this._rgb, t._rgb, e)),
+ this;
+ }
+ clone() {
+ return new Kt(this.rgb);
+ }
+ alpha(t) {
+ return this._rgb.a = yt(t), this;
+ }
+ clearer(t) {
+ return this._rgb.a *= 1 - t, this;
+ }
+ greyscale() {
+ const t = this._rgb, e = bt(.3 * t.r + .59 * t.g + .11 * t.b);
+ return t.r = t.g = t.b = e, this;
+ }
+ opaquer(t) {
+ return this._rgb.a *= 1 + t, this;
+ }
+ negate() {
+ const t = this._rgb;
+ return t.r = 255 - t.r, t.g = 255 - t.g, t.b = 255 - t.b, this;
+ }
+ lighten(t) {
+ return Yt(this._rgb, 2, t), this;
+ }
+ darken(t) {
+ return Yt(this._rgb, 2, -t), this;
+ }
+ saturate(t) {
+ return Yt(this._rgb, 1, t), this;
+ }
+ desaturate(t) {
+ return Yt(this._rgb, 1, -t), this;
+ }
+ rotate(t) {
+ return function(t, e) {
+ var i = Et(t);
+ i[0] = zt(i[0] + e), i = It(i), t.r = i[0], t.g = i[1], t.b = i[2];
+ }(this._rgb, t),
+ this;
+ }
+ }
+ function Gt(t) {
+ return new Kt(t);
+ }
+ function Zt(t) {
+ if (t && "object" == typeof t) {
+ const e = t.toString();
+ return "[object CanvasPattern]" === e || "[object CanvasGradient]" === e;
+ }
+ return !1;
+ }
+ function Jt(t) {
+ return Zt(t) ? t : Gt(t);
+ }
+ function Qt(t) {
+ return Zt(t) ? t : Gt(t).saturate(.5).darken(.1).hexString();
+ }
+ const te = Object.create(null), ee = Object.create(null);
+ function ie(t, e) {
+ if (!e) return t;
+ const i = e.split(".");
+ for (let e = 0, s = i.length; e < s; ++e) {
+ const s = i[e];
+ t = t[s] || (t[s] = Object.create(null));
+ }
+ return t;
+ }
+ function se(t, e, i) {
+ return "string" == typeof e ? m(ie(t, e), i) : m(ie(t, ""), e);
+ }
+ var ne = new class {
+ constructor(t) {
+ this.animation = void 0,
+ this.backgroundColor = "rgba(0,0,0,0.1)",
+ this.borderColor = "rgba(0,0,0,0.1)",
+ this.color = "#666",
+ this.datasets = {},
+ this.devicePixelRatio = t => t.chart.platform.getDevicePixelRatio(),
+ this.elements = {},
+ this.events = ["mousemove", "mouseout", "click", "touchstart", "touchmove"],
+ this.font = {
+ family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
+ size: 12,
+ style: "normal",
+ lineHeight: 1.2,
+ weight: null,
+ },
+ this.hover = {},
+ this.hoverBackgroundColor = (t, e) => Qt(e.backgroundColor),
+ this.hoverBorderColor = (t, e) => Qt(e.borderColor),
+ this.hoverColor = (t, e) => Qt(e.color),
+ this.indexAxis = "x",
+ this.interaction = { mode: "nearest", intersect: !0, includeInvisible: !1 },
+ this.maintainAspectRatio = !0,
+ this.onHover = null,
+ this.onClick = null,
+ this.parsing = !0,
+ this.plugins = {},
+ this.responsive = !0,
+ this.scale = void 0,
+ this.scales = {},
+ this.showLine = !0,
+ this.drawActiveElementsOnTop = !0,
+ this.describe(t);
+ }
+ set(t, e) {
+ return se(this, t, e);
+ }
+ get(t) {
+ return ie(this, t);
+ }
+ describe(t, e) {
+ return se(ee, t, e);
+ }
+ override(t, e) {
+ return se(te, t, e);
+ }
+ route(t, e, i, s) {
+ const o = ie(this, t), a = ie(this, i), l = "_" + e;
+ Object.defineProperties(o, {
+ [l]: { value: o[e], writable: !0 },
+ [e]: {
+ enumerable: !0,
+ get() {
+ const t = this[l], e = a[s];
+ return n(t) ? Object.assign({}, e, t) : r(t, e);
+ },
+ set(t) {
+ this[l] = t;
+ },
+ },
+ });
+ }
+ }({
+ _scriptable: t => !t.startsWith("on"),
+ _indexable: t => "events" !== t,
+ hover: { _fallback: "interaction" },
+ interaction: { _scriptable: !1, _indexable: !1 },
+ });
+ function oe() {
+ return "undefined" != typeof window && "undefined" != typeof document;
+ }
+ function ae(t) {
+ let e = t.parentNode;
+ return e && "[object ShadowRoot]" === e.toString() && (e = e.host), e;
+ }
+ function re(t, e, i) {
+ let s;
+ return "string" == typeof t
+ ? (s = parseInt(t, 10), -1 !== t.indexOf("%") && (s = s / 100 * e.parentNode[i]))
+ : s = t,
+ s;
+ }
+ const le = t => window.getComputedStyle(t, null);
+ function he(t, e) {
+ return le(t).getPropertyValue(e);
+ }
+ const ce = ["top", "right", "bottom", "left"];
+ function de(t, e, i) {
+ const s = {};
+ i = i ? "-" + i : "";
+ for (let n = 0; n < 4; n++) {
+ const o = ce[n];
+ s[o] = parseFloat(t[e + "-" + o + i]) || 0;
+ }
+ return s.width = s.left + s.right, s.height = s.top + s.bottom, s;
+ }
+ function ue(t, e) {
+ if ("native" in t) return t;
+ const { canvas: i, currentDevicePixelRatio: s } = e,
+ n = le(i),
+ o = "border-box" === n.boxSizing,
+ a = de(n, "padding"),
+ r = de(n, "border", "width"),
+ { x: l, y: h, box: c } = function(t, e) {
+ const i = t.touches, s = i && i.length ? i[0] : t, { offsetX: n, offsetY: o } = s;
+ let a, r, l = !1;
+ if (((t, e, i) => (t > 0 || e > 0) && (!i || !i.shadowRoot))(n, o, t.target)) a = n, r = o;
+ else {
+ const t = e.getBoundingClientRect();
+ a = s.clientX - t.left, r = s.clientY - t.top, l = !0;
+ }
+ return { x: a, y: r, box: l };
+ }(t, i),
+ d = a.left + (c && r.left),
+ u = a.top + (c && r.top);
+ let { width: f, height: g } = e;
+ return o && (f -= a.width + r.width, g -= a.height + r.height),
+ { x: Math.round((l - d) / f * i.width / s), y: Math.round((h - u) / g * i.height / s) };
+ }
+ const fe = t => Math.round(10 * t) / 10;
+ function ge(t, e, i, s) {
+ const n = le(t),
+ o = de(n, "margin"),
+ a = re(n.maxWidth, t, "clientWidth") || A,
+ r = re(n.maxHeight, t, "clientHeight") || A,
+ l = function(t, e, i) {
+ let s, n;
+ if (void 0 === e || void 0 === i) {
+ const o = ae(t);
+ if (o) {
+ const t = o.getBoundingClientRect(), a = le(o), r = de(a, "border", "width"), l = de(a, "padding");
+ e = t.width - l.width - r.width,
+ i = t.height - l.height - r.height,
+ s = re(a.maxWidth, o, "clientWidth"),
+ n = re(a.maxHeight, o, "clientHeight");
+ } else e = t.clientWidth, i = t.clientHeight;
+ }
+ return { width: e, height: i, maxWidth: s || A, maxHeight: n || A };
+ }(t, e, i);
+ let { width: h, height: c } = l;
+ if ("content-box" === n.boxSizing) {
+ const t = de(n, "border", "width"), e = de(n, "padding");
+ h -= e.width + t.width, c -= e.height + t.height;
+ }
+ return h = Math.max(0, h - o.width),
+ c = Math.max(0, s ? Math.floor(h / s) : c - o.height),
+ h = fe(Math.min(h, a, l.maxWidth)),
+ c = fe(Math.min(c, r, l.maxHeight)),
+ h && !c && (c = fe(h / 2)),
+ { width: h, height: c };
+ }
+ function pe(t, e, i) {
+ const s = e || 1, n = Math.floor(t.height * s), o = Math.floor(t.width * s);
+ t.height = n / s, t.width = o / s;
+ const a = t.canvas;
+ return a.style && (i || !a.style.height && !a.style.width)
+ && (a.style.height = `${t.height}px`, a.style.width = `${t.width}px`),
+ (t.currentDevicePixelRatio !== s || a.height !== n || a.width !== o)
+ && (t.currentDevicePixelRatio = s, a.height = n, a.width = o, t.ctx.setTransform(s, 0, 0, s, 0, 0), !0);
+ }
+ const me = function() {
+ let t = !1;
+ try {
+ const e = {
+ get passive() {
+ return t = !0, !1;
+ },
+ };
+ window.addEventListener("test", null, e), window.removeEventListener("test", null, e);
+ } catch (t) {}
+ return t;
+ }();
+ function be(t, e) {
+ const i = he(t, e), s = i && i.match(/^(\d+)(\.\d+)?px$/);
+ return s ? +s[1] : void 0;
+ }
+ function xe(t) {
+ return !t || i(t.size) || i(t.family)
+ ? null
+ : (t.style ? t.style + " " : "") + (t.weight ? t.weight + " " : "") + t.size + "px " + t.family;
+ }
+ function _e(t, e, i, s, n) {
+ let o = e[n];
+ return o || (o = e[n] = t.measureText(n).width, i.push(n)), o > s && (s = o), s;
+ }
+ function ye(t, e, i, n) {
+ let o = (n = n || {}).data = n.data || {}, a = n.garbageCollect = n.garbageCollect || [];
+ n.font !== e && (o = n.data = {}, a = n.garbageCollect = [], n.font = e), t.save(), t.font = e;
+ let r = 0;
+ const l = i.length;
+ let h, c, d, u, f;
+ for (h = 0; h < l; h++) {
+ if (u = i[h], null != u && !0 !== s(u)) r = _e(t, o, a, r, u);
+ else if (s(u)) for (c = 0, d = u.length; c < d; c++) f = u[c], null == f || s(f) || (r = _e(t, o, a, r, f));
+ }
+ t.restore();
+ const g = a.length / 2;
+ if (g > i.length) {
+ for (h = 0; h < g; h++) delete o[a[h]];
+ a.splice(0, g);
+ }
+ return r;
+ }
+ function ve(t, e, i) {
+ const s = t.currentDevicePixelRatio, n = 0 !== i ? Math.max(i / 2, .5) : 0;
+ return Math.round((e - n) * s) / s + n;
+ }
+ function we(t, e) {
+ (e = e || t.getContext("2d")).save(), e.resetTransform(), e.clearRect(0, 0, t.width, t.height), e.restore();
+ }
+ function Me(t, e, i, s) {
+ ke(t, e, i, s, null);
+ }
+ function ke(t, e, i, s, n) {
+ let o, a, r, l, h, c;
+ const d = e.pointStyle, u = e.rotation, f = e.radius;
+ let g = (u || 0) * T;
+ if (
+ d && "object" == typeof d
+ && (o = d.toString(), "[object HTMLImageElement]" === o || "[object HTMLCanvasElement]" === o)
+ ) {
+ return t.save(),
+ t.translate(i, s),
+ t.rotate(g),
+ t.drawImage(d, -d.width / 2, -d.height / 2, d.width, d.height),
+ void t.restore();
+ }
+ if (!(isNaN(f) || f <= 0)) {
+ switch (t.beginPath(), d) {
+ default:
+ n ? t.ellipse(i, s, n / 2, f, 0, 0, O) : t.arc(i, s, f, 0, O), t.closePath();
+ break;
+ case "triangle":
+ t.moveTo(i + Math.sin(g) * f, s - Math.cos(g) * f),
+ g += R,
+ t.lineTo(i + Math.sin(g) * f, s - Math.cos(g) * f),
+ g += R,
+ t.lineTo(i + Math.sin(g) * f, s - Math.cos(g) * f),
+ t.closePath();
+ break;
+ case "rectRounded":
+ h = .516 * f,
+ l = f - h,
+ a = Math.cos(g + E) * l,
+ r = Math.sin(g + E) * l,
+ t.arc(i - a, s - r, h, g - D, g - L),
+ t.arc(i + r, s - a, h, g - L, g),
+ t.arc(i + a, s + r, h, g, g + L),
+ t.arc(i - r, s + a, h, g + L, g + D),
+ t.closePath();
+ break;
+ case "rect":
+ if (!u) {
+ l = Math.SQRT1_2 * f, c = n ? n / 2 : l, t.rect(i - c, s - l, 2 * c, 2 * l);
+ break;
+ }
+ g += E;
+ case "rectRot":
+ a = Math.cos(g) * f,
+ r = Math.sin(g) * f,
+ t.moveTo(i - a, s - r),
+ t.lineTo(i + r, s - a),
+ t.lineTo(i + a, s + r),
+ t.lineTo(i - r, s + a),
+ t.closePath();
+ break;
+ case "crossRot":
+ g += E;
+ case "cross":
+ a = Math.cos(g) * f,
+ r = Math.sin(g) * f,
+ t.moveTo(i - a, s - r),
+ t.lineTo(i + a, s + r),
+ t.moveTo(i + r, s - a),
+ t.lineTo(i - r, s + a);
+ break;
+ case "star":
+ a = Math.cos(g) * f,
+ r = Math.sin(g) * f,
+ t.moveTo(i - a, s - r),
+ t.lineTo(i + a, s + r),
+ t.moveTo(i + r, s - a),
+ t.lineTo(i - r, s + a),
+ g += E,
+ a = Math.cos(g) * f,
+ r = Math.sin(g) * f,
+ t.moveTo(i - a, s - r),
+ t.lineTo(i + a, s + r),
+ t.moveTo(i + r, s - a),
+ t.lineTo(i - r, s + a);
+ break;
+ case "line":
+ a = n ? n / 2 : Math.cos(g) * f, r = Math.sin(g) * f, t.moveTo(i - a, s - r), t.lineTo(i + a, s + r);
+ break;
+ case "dash":
+ t.moveTo(i, s), t.lineTo(i + Math.cos(g) * f, s + Math.sin(g) * f);
+ }
+ t.fill(), e.borderWidth > 0 && t.stroke();
+ }
+ }
+ function Se(t, e, i) {
+ return i = i || .5, !e || t && t.x > e.left - i && t.x < e.right + i && t.y > e.top - i && t.y < e.bottom + i;
+ }
+ function Pe(t, e) {
+ t.save(), t.beginPath(), t.rect(e.left, e.top, e.right - e.left, e.bottom - e.top), t.clip();
+ }
+ function De(t) {
+ t.restore();
+ }
+ function Oe(t, e, i, s, n) {
+ if (!e) return t.lineTo(i.x, i.y);
+ if ("middle" === n) {
+ const s = (e.x + i.x) / 2;
+ t.lineTo(s, e.y), t.lineTo(s, i.y);
+ } else "after" === n != !!s ? t.lineTo(e.x, i.y) : t.lineTo(i.x, e.y);
+ t.lineTo(i.x, i.y);
+ }
+ function Ce(t, e, i, s) {
+ if (!e) return t.lineTo(i.x, i.y);
+ t.bezierCurveTo(s ? e.cp1x : e.cp2x, s ? e.cp1y : e.cp2y, s ? i.cp2x : i.cp1x, s ? i.cp2y : i.cp1y, i.x, i.y);
+ }
+ function Ae(t, e, n, o, a, r = {}) {
+ const l = s(e) ? e : [e], h = r.strokeWidth > 0 && "" !== r.strokeColor;
+ let c, d;
+ for (
+ t.save(),
+ t.font = a.string,
+ function(t, e) {
+ e.translation && t.translate(e.translation[0], e.translation[1]);
+ i(e.rotation) || t.rotate(e.rotation);
+ e.color && (t.fillStyle = e.color);
+ e.textAlign && (t.textAlign = e.textAlign);
+ e.textBaseline && (t.textBaseline = e.textBaseline);
+ }(t, r),
+ c = 0;
+ c < l.length;
+ ++c
+ ) {
+ d = l[c],
+ h
+ && (r.strokeColor && (t.strokeStyle = r.strokeColor),
+ i(r.strokeWidth) || (t.lineWidth = r.strokeWidth),
+ t.strokeText(d, n, o, r.maxWidth)),
+ t.fillText(d, n, o, r.maxWidth),
+ Te(t, n, o, d, r),
+ o += a.lineHeight;
+ }
+ t.restore();
+ }
+ function Te(t, e, i, s, n) {
+ if (n.strikethrough || n.underline) {
+ const o = t.measureText(s),
+ a = e - o.actualBoundingBoxLeft,
+ r = e + o.actualBoundingBoxRight,
+ l = i - o.actualBoundingBoxAscent,
+ h = i + o.actualBoundingBoxDescent,
+ c = n.strikethrough ? (l + h) / 2 : h;
+ t.strokeStyle = t.fillStyle,
+ t.beginPath(),
+ t.lineWidth = n.decorationWidth || 2,
+ t.moveTo(a, c),
+ t.lineTo(r, c),
+ t.stroke();
+ }
+ }
+ function Le(t, e) {
+ const { x: i, y: s, w: n, h: o, radius: a } = e;
+ t.arc(i + a.topLeft, s + a.topLeft, a.topLeft, -L, D, !0),
+ t.lineTo(i, s + o - a.bottomLeft),
+ t.arc(i + a.bottomLeft, s + o - a.bottomLeft, a.bottomLeft, D, L, !0),
+ t.lineTo(i + n - a.bottomRight, s + o),
+ t.arc(i + n - a.bottomRight, s + o - a.bottomRight, a.bottomRight, L, 0, !0),
+ t.lineTo(i + n, s + a.topRight),
+ t.arc(i + n - a.topRight, s + a.topRight, a.topRight, 0, -L, !0),
+ t.lineTo(i + a.topLeft, s);
+ }
+ function Ee(t, e = [""], i = t, s, n = (() => t[0])) {
+ M(s) || (s = $e("_fallback", t));
+ const o = {
+ [Symbol.toStringTag]: "Object",
+ _cacheable: !0,
+ _scopes: t,
+ _rootScopes: i,
+ _fallback: s,
+ _getTarget: n,
+ override: n => Ee([n, ...t], e, i, s),
+ };
+ return new Proxy(o, {
+ deleteProperty: (e, i) => (delete e[i], delete e._keys, delete t[0][i], !0),
+ get: (i, s) =>
+ Ve(i, s, () =>
+ function(t, e, i, s) {
+ let n;
+ for (const o of e) if (n = $e(ze(o, t), i), M(n)) return Fe(t, n) ? je(i, s, t, n) : n;
+ }(s, e, t, i)),
+ getOwnPropertyDescriptor: (t, e) => Reflect.getOwnPropertyDescriptor(t._scopes[0], e),
+ getPrototypeOf: () => Reflect.getPrototypeOf(t[0]),
+ has: (t, e) => Ye(t).includes(e),
+ ownKeys: t => Ye(t),
+ set(t, e, i) {
+ const s = t._storage || (t._storage = n());
+ return t[e] = s[e] = i, delete t._keys, !0;
+ },
+ });
+ }
+ function Re(t, e, i, o) {
+ const a = {
+ _cacheable: !1,
+ _proxy: t,
+ _context: e,
+ _subProxy: i,
+ _stack: new Set(),
+ _descriptors: Ie(t, o),
+ setContext: e => Re(t, e, i, o),
+ override: s => Re(t.override(s), e, i, o),
+ };
+ return new Proxy(a, {
+ deleteProperty: (e, i) => (delete e[i], delete t[i], !0),
+ get: (t, e, i) =>
+ Ve(t, e, () =>
+ function(t, e, i) {
+ const { _proxy: o, _context: a, _subProxy: r, _descriptors: l } = t;
+ let h = o[e];
+ k(h) && l.isScriptable(e) && (h = function(t, e, i, s) {
+ const { _proxy: n, _context: o, _subProxy: a, _stack: r } = i;
+ if (r.has(t)) throw new Error("Recursion detected: " + Array.from(r).join("->") + "->" + t);
+ r.add(t), e = e(o, a || s), r.delete(t), Fe(t, e) && (e = je(n._scopes, n, t, e));
+ return e;
+ }(e, h, t, i));
+ s(h) && h.length && (h = function(t, e, i, s) {
+ const { _proxy: o, _context: a, _subProxy: r, _descriptors: l } = i;
+ if (M(a.index) && s(t)) e = e[a.index % e.length];
+ else if (n(e[0])) {
+ const i = e, s = o._scopes.filter(t => t !== i);
+ e = [];
+ for (const n of i) {
+ const i = je(s, o, t, n);
+ e.push(Re(i, a, r && r[t], l));
+ }
+ }
+ return e;
+ }(e, h, t, l.isIndexable));
+ Fe(e, h) && (h = Re(h, a, r && r[e], l));
+ return h;
+ }(t, e, i)),
+ getOwnPropertyDescriptor: (e, i) =>
+ e._descriptors.allKeys
+ ? Reflect.has(t, i) ? { enumerable: !0, configurable: !0 } : void 0
+ : Reflect.getOwnPropertyDescriptor(t, i),
+ getPrototypeOf: () => Reflect.getPrototypeOf(t),
+ has: (e, i) => Reflect.has(t, i),
+ ownKeys: () => Reflect.ownKeys(t),
+ set: (e, i, s) => (t[i] = s, delete e[i], !0),
+ });
+ }
+ function Ie(t, e = { scriptable: !0, indexable: !0 }) {
+ const { _scriptable: i = e.scriptable, _indexable: s = e.indexable, _allKeys: n = e.allKeys } = t;
+ return {
+ allKeys: n,
+ scriptable: i,
+ indexable: s,
+ isScriptable: k(i) ? i : () => i,
+ isIndexable: k(s) ? s : () => s,
+ };
+ }
+ const ze = (t, e) => t ? t + w(e) : e,
+ Fe = (t, e) => n(e) && "adapters" !== t && (null === Object.getPrototypeOf(e) || e.constructor === Object);
+ function Ve(t, e, i) {
+ if (Object.prototype.hasOwnProperty.call(t, e)) return t[e];
+ const s = i();
+ return t[e] = s, s;
+ }
+ function Be(t, e, i) {
+ return k(t) ? t(e, i) : t;
+ }
+ const Ne = (t, e) => !0 === t ? e : "string" == typeof t ? y(e, t) : void 0;
+ function We(t, e, i, s, n) {
+ for (const o of e) {
+ const e = Ne(i, o);
+ if (e) {
+ t.add(e);
+ const o = Be(e._fallback, i, n);
+ if (M(o) && o !== i && o !== s) return o;
+ } else if (!1 === e && M(s) && i !== s) return null;
+ }
+ return !1;
+ }
+ function je(t, e, i, o) {
+ const a = e._rootScopes, r = Be(e._fallback, i, o), l = [...t, ...a], h = new Set();
+ h.add(o);
+ let c = He(h, l, i, r || i, o);
+ return null !== c
+ && ((!M(r) || r === i || (c = He(h, l, r, c, o), null !== c))
+ && Ee(Array.from(h), [""], a, r, () =>
+ function(t, e, i) {
+ const o = t._getTarget();
+ e in o || (o[e] = {});
+ const a = o[e];
+ if (s(a) && n(i)) return i;
+ return a;
+ }(e, i, o)));
+ }
+ function He(t, e, i, s, n) {
+ for (; i;) i = We(t, e, i, s, n);
+ return i;
+ }
+ function $e(t, e) {
+ for (const i of e) {
+ if (!i) continue;
+ const e = i[t];
+ if (M(e)) return e;
+ }
+ }
+ function Ye(t) {
+ let e = t._keys;
+ return e || (e = t._keys = function(t) {
+ const e = new Set();
+ for (const i of t) for (const t of Object.keys(i).filter(t => !t.startsWith("_"))) e.add(t);
+ return Array.from(e);
+ }(t._scopes)),
+ e;
+ }
+ function Ue(t, e, i, s) {
+ const { iScale: n } = t, { key: o = "r" } = this._parsing, a = new Array(s);
+ let r, l, h, c;
+ for (r = 0, l = s; r < l; ++r) h = r + i, c = e[h], a[r] = { r: n.parse(y(c, o), h) };
+ return a;
+ }
+ const Xe = Number.EPSILON || 1e-14,
+ qe = (t, e) => e < t.length && !t[e].skip && t[e],
+ Ke = t => "x" === t ? "y" : "x";
+ function Ge(t, e, i, s) {
+ const n = t.skip ? e : t, o = e, a = i.skip ? e : i, r = X(o, n), l = X(a, o);
+ let h = r / (r + l), c = l / (r + l);
+ h = isNaN(h) ? 0 : h, c = isNaN(c) ? 0 : c;
+ const d = s * h, u = s * c;
+ return {
+ previous: { x: o.x - d * (a.x - n.x), y: o.y - d * (a.y - n.y) },
+ next: { x: o.x + u * (a.x - n.x), y: o.y + u * (a.y - n.y) },
+ };
+ }
+ function Ze(t, e = "x") {
+ const i = Ke(e), s = t.length, n = Array(s).fill(0), o = Array(s);
+ let a, r, l, h = qe(t, 0);
+ for (a = 0; a < s; ++a) {
+ if (r = l, l = h, h = qe(t, a + 1), l) {
+ if (h) {
+ const t = h[e] - l[e];
+ n[a] = 0 !== t ? (h[i] - l[i]) / t : 0;
+ }
+ o[a] = r ? h ? z(n[a - 1]) !== z(n[a]) ? 0 : (n[a - 1] + n[a]) / 2 : n[a - 1] : n[a];
+ }
+ }
+ !function(t, e, i) {
+ const s = t.length;
+ let n, o, a, r, l, h = qe(t, 0);
+ for (let c = 0; c < s - 1; ++c) {
+ l = h,
+ h = qe(t, c + 1),
+ l && h && (N(e[c], 0, Xe)
+ ? i[c] = i[c + 1] = 0
+ : (n = i[c] / e[c],
+ o = i[c + 1] / e[c],
+ r = Math.pow(n, 2) + Math.pow(o, 2),
+ r <= 9 || (a = 3 / Math.sqrt(r), i[c] = n * a * e[c], i[c + 1] = o * a * e[c])));
+ }
+ }(t, n, o),
+ function(t, e, i = "x") {
+ const s = Ke(i), n = t.length;
+ let o, a, r, l = qe(t, 0);
+ for (let h = 0; h < n; ++h) {
+ if (a = r, r = l, l = qe(t, h + 1), !r) continue;
+ const n = r[i], c = r[s];
+ a && (o = (n - a[i]) / 3, r[`cp1${i}`] = n - o, r[`cp1${s}`] = c - o * e[h]),
+ l && (o = (l[i] - n) / 3, r[`cp2${i}`] = n + o, r[`cp2${s}`] = c + o * e[h]);
+ }
+ }(t, o, e);
+ }
+ function Je(t, e, i) {
+ return Math.max(Math.min(t, i), e);
+ }
+ function Qe(t, e, i, s, n) {
+ let o, a, r, l;
+ if (e.spanGaps && (t = t.filter(t => !t.skip)), "monotone" === e.cubicInterpolationMode) Ze(t, n);
+ else {
+ let i = s ? t[t.length - 1] : t[0];
+ for (o = 0, a = t.length; o < a; ++o) {
+ r = t[o],
+ l = Ge(i, r, t[Math.min(o + 1, a - (s ? 0 : 1)) % a], e.tension),
+ r.cp1x = l.previous.x,
+ r.cp1y = l.previous.y,
+ r.cp2x = l.next.x,
+ r.cp2y = l.next.y,
+ i = r;
+ }
+ }
+ e.capBezierPoints && function(t, e) {
+ let i, s, n, o, a, r = Se(t[0], e);
+ for (i = 0, s = t.length; i < s; ++i) {
+ a = o,
+ o = r,
+ r = i < s - 1 && Se(t[i + 1], e),
+ o
+ && (n = t[i],
+ a && (n.cp1x = Je(n.cp1x, e.left, e.right), n.cp1y = Je(n.cp1y, e.top, e.bottom)),
+ r && (n.cp2x = Je(n.cp2x, e.left, e.right), n.cp2y = Je(n.cp2y, e.top, e.bottom)));
+ }
+ }(t, i);
+ }
+ const ti = t => 0 === t || 1 === t,
+ ei = (t, e, i) => -Math.pow(2, 10 * (t -= 1)) * Math.sin((t - e) * O / i),
+ ii = (t, e, i) => Math.pow(2, -10 * t) * Math.sin((t - e) * O / i) + 1,
+ si = {
+ linear: t => t,
+ easeInQuad: t => t * t,
+ easeOutQuad: t => -t * (t - 2),
+ easeInOutQuad: t => (t /= .5) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1),
+ easeInCubic: t => t * t * t,
+ easeOutCubic: t => (t -= 1) * t * t + 1,
+ easeInOutCubic: t => (t /= .5) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2),
+ easeInQuart: t => t * t * t * t,
+ easeOutQuart: t => -((t -= 1) * t * t * t - 1),
+ easeInOutQuart: t => (t /= .5) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2),
+ easeInQuint: t => t * t * t * t * t,
+ easeOutQuint: t => (t -= 1) * t * t * t * t + 1,
+ easeInOutQuint: t => (t /= .5) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2),
+ easeInSine: t => 1 - Math.cos(t * L),
+ easeOutSine: t => Math.sin(t * L),
+ easeInOutSine: t => -.5 * (Math.cos(D * t) - 1),
+ easeInExpo: t => 0 === t ? 0 : Math.pow(2, 10 * (t - 1)),
+ easeOutExpo: t => 1 === t ? 1 : 1 - Math.pow(2, -10 * t),
+ easeInOutExpo: t =>
+ ti(t) ? t : t < .5 ? .5 * Math.pow(2, 10 * (2 * t - 1)) : .5 * (2 - Math.pow(2, -10 * (2 * t - 1))),
+ easeInCirc: t => t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),
+ easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),
+ easeInOutCirc: t => (t /= .5) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1),
+ easeInElastic: t => ti(t) ? t : ei(t, .075, .3),
+ easeOutElastic: t => ti(t) ? t : ii(t, .075, .3),
+ easeInOutElastic(t) {
+ const e = .1125;
+ return ti(t) ? t : t < .5 ? .5 * ei(2 * t, e, .45) : .5 + .5 * ii(2 * t - 1, e, .45);
+ },
+ easeInBack(t) {
+ const e = 1.70158;
+ return t * t * ((e + 1) * t - e);
+ },
+ easeOutBack(t) {
+ const e = 1.70158;
+ return (t -= 1) * t * ((e + 1) * t + e) + 1;
+ },
+ easeInOutBack(t) {
+ let e = 1.70158;
+ return (t /= .5) < 1
+ ? t * t * ((1 + (e *= 1.525)) * t - e) * .5
+ : .5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2);
+ },
+ easeInBounce: t => 1 - si.easeOutBounce(1 - t),
+ easeOutBounce(t) {
+ const e = 7.5625, i = 2.75;
+ return t < 1 / i
+ ? e * t * t
+ : t < 2 / i
+ ? e * (t -= 1.5 / i) * t + .75
+ : t < 2.5 / i
+ ? e * (t -= 2.25 / i) * t + .9375
+ : e * (t -= 2.625 / i) * t + .984375;
+ },
+ easeInOutBounce: t => t < .5 ? .5 * si.easeInBounce(2 * t) : .5 * si.easeOutBounce(2 * t - 1) + .5,
+ };
+ function ni(t, e, i, s) {
+ return { x: t.x + i * (e.x - t.x), y: t.y + i * (e.y - t.y) };
+ }
+ function oi(t, e, i, s) {
+ return {
+ x: t.x + i * (e.x - t.x),
+ y: "middle" === s ? i < .5 ? t.y : e.y : "after" === s ? i < 1 ? t.y : e.y : i > 0 ? e.y : t.y,
+ };
+ }
+ function ai(t, e, i, s) {
+ const n = { x: t.cp2x, y: t.cp2y },
+ o = { x: e.cp1x, y: e.cp1y },
+ a = ni(t, n, i),
+ r = ni(n, o, i),
+ l = ni(o, e, i),
+ h = ni(a, r, i),
+ c = ni(r, l, i);
+ return ni(h, c, i);
+ }
+ const ri = new Map();
+ function li(t, e, i) {
+ return function(t, e) {
+ e = e || {};
+ const i = t + JSON.stringify(e);
+ let s = ri.get(i);
+ return s || (s = new Intl.NumberFormat(t, e), ri.set(i, s)), s;
+ }(e, i).format(t);
+ }
+ const hi = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),
+ ci = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);
+ function di(t, e) {
+ const i = ("" + t).match(hi);
+ if (!i || "normal" === i[1]) return 1.2 * e;
+ switch (t = +i[2], i[3]) {
+ case "px":
+ return t;
+ case "%":
+ t /= 100;
+ }
+ return e * t;
+ }
+ function ui(t, e) {
+ const i = {}, s = n(e), o = s ? Object.keys(e) : e, a = n(t) ? s ? i => r(t[i], t[e[i]]) : e => t[e] : () => t;
+ for (const t of o) i[t] = +a(t) || 0;
+ return i;
+ }
+ function fi(t) {
+ return ui(t, { top: "y", right: "x", bottom: "y", left: "x" });
+ }
+ function gi(t) {
+ return ui(t, ["topLeft", "topRight", "bottomLeft", "bottomRight"]);
+ }
+ function pi(t) {
+ const e = fi(t);
+ return e.width = e.left + e.right, e.height = e.top + e.bottom, e;
+ }
+ function mi(t, e) {
+ t = t || {}, e = e || ne.font;
+ let i = r(t.size, e.size);
+ "string" == typeof i && (i = parseInt(i, 10));
+ let s = r(t.style, e.style);
+ s && !("" + s).match(ci) && (console.warn("Invalid font style specified: \"" + s + "\""), s = "");
+ const n = {
+ family: r(t.family, e.family),
+ lineHeight: di(r(t.lineHeight, e.lineHeight), i),
+ size: i,
+ style: s,
+ weight: r(t.weight, e.weight),
+ string: "",
+ };
+ return n.string = xe(n), n;
+ }
+ function bi(t, e, i, n) {
+ let o, a, r, l = !0;
+ for (o = 0, a = t.length; o < a; ++o) {
+ if (
+ r = t[o],
+ void 0 !== r
+ && (void 0 !== e && "function" == typeof r && (r = r(e), l = !1),
+ void 0 !== i && s(r) && (r = r[i % r.length], l = !1),
+ void 0 !== r)
+ ) return n && !l && (n.cacheable = !1), r;
+ }
+ }
+ function xi(t, e, i) {
+ const { min: s, max: n } = t, o = h(e, (n - s) / 2), a = (t, e) => i && 0 === t ? 0 : t + e;
+ return { min: a(s, -Math.abs(o)), max: a(n, o) };
+ }
+ function _i(t, e) {
+ return Object.assign(Object.create(t), e);
+ }
+ function yi(t, e, i) {
+ return t
+ ? function(t, e) {
+ return {
+ x: i => t + t + e - i,
+ setWidth(t) {
+ e = t;
+ },
+ textAlign: t => "center" === t ? t : "right" === t ? "left" : "right",
+ xPlus: (t, e) => t - e,
+ leftForLtr: (t, e) => t - e,
+ };
+ }(e, i)
+ : { x: t => t, setWidth(t) {}, textAlign: t => t, xPlus: (t, e) => t + e, leftForLtr: (t, e) => t };
+ }
+ function vi(t, e) {
+ let i, s;
+ "ltr" !== e && "rtl" !== e
+ || (i = t.canvas.style,
+ s = [i.getPropertyValue("direction"), i.getPropertyPriority("direction")],
+ i.setProperty("direction", e, "important"),
+ t.prevTextDirection = s);
+ }
+ function wi(t, e) {
+ void 0 !== e && (delete t.prevTextDirection, t.canvas.style.setProperty("direction", e[0], e[1]));
+ }
+ function Mi(t) {
+ return "angle" === t
+ ? { between: G, compare: q, normalize: K }
+ : { between: Q, compare: (t, e) => t - e, normalize: t => t };
+ }
+ function ki({ start: t, end: e, count: i, loop: s, style: n }) {
+ return { start: t % i, end: e % i, loop: s && (e - t + 1) % i == 0, style: n };
+ }
+ function Si(t, e, i) {
+ if (!i) return [t];
+ const { property: s, start: n, end: o } = i,
+ a = e.length,
+ { compare: r, between: l, normalize: h } = Mi(s),
+ { start: c, end: d, loop: u, style: f } = function(t, e, i) {
+ const { property: s, start: n, end: o } = i, { between: a, normalize: r } = Mi(s), l = e.length;
+ let h, c, { start: d, end: u, loop: f } = t;
+ if (f) {
+ for (d += l, u += l, h = 0, c = l; h < c && a(r(e[d % l][s]), n, o); ++h) d--, u--;
+ d %= l, u %= l;
+ }
+ return u < d && (u += l), { start: d, end: u, loop: f, style: t.style };
+ }(t, e, i),
+ g = [];
+ let p, m, b, x = !1, _ = null;
+ const y = () => x || l(n, b, p) && 0 !== r(n, b), v = () => !x || 0 === r(o, p) || l(o, b, p);
+ for (let t = c, i = c; t <= d; ++t) {
+ m = e[t % a],
+ m.skip
+ || (p = h(m[s]),
+ p !== b
+ && (x = l(p, n, o),
+ null === _ && y() && (_ = 0 === r(p, n) ? t : i),
+ null !== _ && v() && (g.push(ki({ start: _, end: t, loop: u, count: a, style: f })), _ = null),
+ i = t,
+ b = p));
+ }
+ return null !== _ && g.push(ki({ start: _, end: d, loop: u, count: a, style: f })), g;
+ }
+ function Pi(t, e) {
+ const i = [], s = t.segments;
+ for (let n = 0; n < s.length; n++) {
+ const o = Si(s[n], t.points, e);
+ o.length && i.push(...o);
+ }
+ return i;
+ }
+ function Di(t, e) {
+ const i = t.points, s = t.options.spanGaps, n = i.length;
+ if (!n) return [];
+ const o = !!t._loop,
+ { start: a, end: r } = function(t, e, i, s) {
+ let n = 0, o = e - 1;
+ if (i && !s) for (; n < e && !t[n].skip;) n++;
+ for (; n < e && t[n].skip;) n++;
+ for (n %= e, i && (o += n); o > n && t[o % e].skip;) o--;
+ return o %= e, { start: n, end: o };
+ }(i, n, o, s);
+ if (!0 === s) return Oi(t, [{ start: a, end: r, loop: o }], i, e);
+ return Oi(
+ t,
+ function(t, e, i, s) {
+ const n = t.length, o = [];
+ let a, r = e, l = t[e];
+ for (a = e + 1; a <= i; ++a) {
+ const i = t[a % n];
+ i.skip || i.stop
+ ? l.skip || (s = !1, o.push({ start: e % n, end: (a - 1) % n, loop: s }), e = r = i.stop ? a : null)
+ : (r = a, l.skip && (e = a)), l = i;
+ }
+ return null !== r && o.push({ start: e % n, end: r % n, loop: s }), o;
+ }(i, a, r < a ? r + n : r, !!t._fullLoop && 0 === a && r === n - 1),
+ i,
+ e,
+ );
+ }
+ function Oi(t, e, i, s) {
+ return s && s.setContext && i
+ ? function(t, e, i, s) {
+ const n = t._chart.getContext(),
+ o = Ci(t.options),
+ { _datasetIndex: a, options: { spanGaps: r } } = t,
+ l = i.length,
+ h = [];
+ let c = o, d = e[0].start, u = d;
+ function f(t, e, s, n) {
+ const o = r ? -1 : 1;
+ if (t !== e) {
+ for (t += l; i[t % l].skip;) t -= o;
+ for (; i[e % l].skip;) e += o;
+ t % l != e % l && (h.push({ start: t % l, end: e % l, loop: s, style: n }), c = n, d = e % l);
+ }
+ }
+ for (const t of e) {
+ d = r ? d : t.start;
+ let e, o = i[d % l];
+ for (u = d + 1; u <= t.end; u++) {
+ const r = i[u % l];
+ e = Ci(
+ s.setContext(
+ _i(n, { type: "segment", p0: o, p1: r, p0DataIndex: (u - 1) % l, p1DataIndex: u % l, datasetIndex: a }),
+ ),
+ ),
+ Ai(e, c) && f(d, u - 1, t.loop, c),
+ o = r,
+ c = e;
+ }
+ d < u - 1 && f(d, u - 1, t.loop, c);
+ }
+ return h;
+ }(t, e, i, s)
+ : e;
+ }
+ function Ci(t) {
+ return {
+ backgroundColor: t.backgroundColor,
+ borderCapStyle: t.borderCapStyle,
+ borderDash: t.borderDash,
+ borderDashOffset: t.borderDashOffset,
+ borderJoinStyle: t.borderJoinStyle,
+ borderWidth: t.borderWidth,
+ borderColor: t.borderColor,
+ };
+ }
+ function Ai(t, e) {
+ return e && JSON.stringify(t) !== JSON.stringify(e);
+ }
+ var Ti = Object.freeze({
+ __proto__: null,
+ easingEffects: si,
+ isPatternOrGradient: Zt,
+ color: Jt,
+ getHoverColor: Qt,
+ noop: t,
+ uid: e,
+ isNullOrUndef: i,
+ isArray: s,
+ isObject: n,
+ isFinite: o,
+ finiteOrDefault: a,
+ valueOrDefault: r,
+ toPercentage: l,
+ toDimension: h,
+ callback: c,
+ each: d,
+ _elementsEqual: u,
+ clone: f,
+ _merger: p,
+ merge: m,
+ mergeIf: b,
+ _mergerIf: x,
+ _deprecated: function(t, e, i, s) {
+ void 0 !== e && console.warn(t + ": \"" + i + "\" is deprecated. Please use \"" + s + "\" instead");
+ },
+ resolveObjectKey: y,
+ _splitKey: v,
+ _capitalize: w,
+ defined: M,
+ isFunction: k,
+ setsEqual: S,
+ _isClickEvent: P,
+ toFontString: xe,
+ _measureText: _e,
+ _longestText: ye,
+ _alignPixel: ve,
+ clearCanvas: we,
+ drawPoint: Me,
+ drawPointLegend: ke,
+ _isPointInArea: Se,
+ clipArea: Pe,
+ unclipArea: De,
+ _steppedLineTo: Oe,
+ _bezierCurveTo: Ce,
+ renderText: Ae,
+ addRoundedRectPath: Le,
+ _lookup: tt,
+ _lookupByKey: et,
+ _rlookupByKey: it,
+ _filterBetween: st,
+ listenArrayEvents: ot,
+ unlistenArrayEvents: at,
+ _arrayUnique: rt,
+ _createResolver: Ee,
+ _attachContext: Re,
+ _descriptors: Ie,
+ _parseObjectDataRadialScale: Ue,
+ splineCurve: Ge,
+ splineCurveMonotone: Ze,
+ _updateBezierControlPoints: Qe,
+ _isDomSupported: oe,
+ _getParentNode: ae,
+ getStyle: he,
+ getRelativePosition: ue,
+ getMaximumSize: ge,
+ retinaScale: pe,
+ supportsEventListenerOptions: me,
+ readUsedSize: be,
+ fontString: function(t, e, i) {
+ return e + " " + t + "px " + i;
+ },
+ requestAnimFrame: lt,
+ throttled: ht,
+ debounce: ct,
+ _toLeftRightCenter: dt,
+ _alignStartEnd: ut,
+ _textX: ft,
+ _getStartAndCountOfVisiblePoints: gt,
+ _scaleRangesChanged: pt,
+ _pointInLine: ni,
+ _steppedInterpolation: oi,
+ _bezierInterpolation: ai,
+ formatNumber: li,
+ toLineHeight: di,
+ _readValueToProps: ui,
+ toTRBL: fi,
+ toTRBLCorners: gi,
+ toPadding: pi,
+ toFont: mi,
+ resolve: bi,
+ _addGrace: xi,
+ createContext: _i,
+ PI: D,
+ TAU: O,
+ PITAU: C,
+ INFINITY: A,
+ RAD_PER_DEG: T,
+ HALF_PI: L,
+ QUARTER_PI: E,
+ TWO_THIRDS_PI: R,
+ log10: I,
+ sign: z,
+ niceNum: F,
+ _factorize: V,
+ isNumber: B,
+ almostEquals: N,
+ almostWhole: W,
+ _setMinAndMaxByKey: j,
+ toRadians: H,
+ toDegrees: $,
+ _decimalPlaces: Y,
+ getAngleFromPoint: U,
+ distanceBetweenPoints: X,
+ _angleDiff: q,
+ _normalizeAngle: K,
+ _angleBetween: G,
+ _limitValue: Z,
+ _int16Range: J,
+ _isBetween: Q,
+ getRtlAdapter: yi,
+ overrideTextDirection: vi,
+ restoreTextDirection: wi,
+ _boundSegment: Si,
+ _boundSegments: Pi,
+ _computeSegments: Di,
+ });
+ function Li(t, e, i, s) {
+ const { controller: n, data: o, _sorted: a } = t, r = n._cachedMeta.iScale;
+ if (r && e === r.axis && "r" !== e && a && o.length) {
+ const t = r._reversePixels ? it : et;
+ if (!s) return t(o, e, i);
+ if (n._sharedOptions) {
+ const s = o[0], n = "function" == typeof s.getRange && s.getRange(e);
+ if (n) {
+ const s = t(o, e, i - n), a = t(o, e, i + n);
+ return { lo: s.lo, hi: a.hi };
+ }
+ }
+ }
+ return { lo: 0, hi: o.length - 1 };
+ }
+ function Ei(t, e, i, s, n) {
+ const o = t.getSortedVisibleDatasetMetas(), a = i[e];
+ for (let t = 0, i = o.length; t < i; ++t) {
+ const { index: i, data: r } = o[t], { lo: l, hi: h } = Li(o[t], e, a, n);
+ for (let t = l; t <= h; ++t) {
+ const e = r[t];
+ e.skip || s(e, i, t);
+ }
+ }
+ }
+ function Ri(t, e, i, s, n) {
+ const o = [];
+ if (!n && !t.isPointInArea(e)) return o;
+ return Ei(t, i, e, function(i, a, r) {
+ (n || Se(i, t.chartArea, 0)) && i.inRange(e.x, e.y, s) && o.push({ element: i, datasetIndex: a, index: r });
+ }, !0),
+ o;
+ }
+ function Ii(t, e, i, s, n, o) {
+ let a = [];
+ const r = function(t) {
+ const e = -1 !== t.indexOf("x"), i = -1 !== t.indexOf("y");
+ return function(t, s) {
+ const n = e ? Math.abs(t.x - s.x) : 0, o = i ? Math.abs(t.y - s.y) : 0;
+ return Math.sqrt(Math.pow(n, 2) + Math.pow(o, 2));
+ };
+ }(i);
+ let l = Number.POSITIVE_INFINITY;
+ return Ei(t, i, e, function(i, h, c) {
+ const d = i.inRange(e.x, e.y, n);
+ if (s && !d) return;
+ const u = i.getCenterPoint(n);
+ if (!(!!o || t.isPointInArea(u)) && !d) return;
+ const f = r(e, u);
+ f < l
+ ? (a = [{ element: i, datasetIndex: h, index: c }], l = f)
+ : f === l && a.push({ element: i, datasetIndex: h, index: c });
+ }),
+ a;
+ }
+ function zi(t, e, i, s, n, o) {
+ return o || t.isPointInArea(e)
+ ? "r" !== i || s ? Ii(t, e, i, s, n, o) : function(t, e, i, s) {
+ let n = [];
+ return Ei(t, i, e, function(t, i, o) {
+ const { startAngle: a, endAngle: r } = t.getProps(["startAngle", "endAngle"], s),
+ { angle: l } = U(t, { x: e.x, y: e.y });
+ G(l, a, r) && n.push({ element: t, datasetIndex: i, index: o });
+ }),
+ n;
+ }(t, e, i, n)
+ : [];
+ }
+ function Fi(t, e, i, s, n) {
+ const o = [], a = "x" === i ? "inXRange" : "inYRange";
+ let r = !1;
+ return Ei(t, i, e, (t, s, l) => {
+ t[a](e[i], n) && (o.push({ element: t, datasetIndex: s, index: l }), r = r || t.inRange(e.x, e.y, n));
+ }),
+ s && !r ? [] : o;
+ }
+ var Vi = {
+ evaluateInteractionItems: Ei,
+ modes: {
+ index(t, e, i, s) {
+ const n = ue(e, t),
+ o = i.axis || "x",
+ a = i.includeInvisible || !1,
+ r = i.intersect ? Ri(t, n, o, s, a) : zi(t, n, o, !1, s, a),
+ l = [];
+ return r.length
+ ? (t.getSortedVisibleDatasetMetas().forEach(t => {
+ const e = r[0].index, i = t.data[e];
+ i && !i.skip && l.push({ element: i, datasetIndex: t.index, index: e });
+ }),
+ l)
+ : [];
+ },
+ dataset(t, e, i, s) {
+ const n = ue(e, t), o = i.axis || "xy", a = i.includeInvisible || !1;
+ let r = i.intersect ? Ri(t, n, o, s, a) : zi(t, n, o, !1, s, a);
+ if (r.length > 0) {
+ const e = r[0].datasetIndex, i = t.getDatasetMeta(e).data;
+ r = [];
+ for (let t = 0; t < i.length; ++t) r.push({ element: i[t], datasetIndex: e, index: t });
+ }
+ return r;
+ },
+ point: (t, e, i, s) => Ri(t, ue(e, t), i.axis || "xy", s, i.includeInvisible || !1),
+ nearest(t, e, i, s) {
+ const n = ue(e, t), o = i.axis || "xy", a = i.includeInvisible || !1;
+ return zi(t, n, o, i.intersect, s, a);
+ },
+ x: (t, e, i, s) => Fi(t, ue(e, t), "x", i.intersect, s),
+ y: (t, e, i, s) => Fi(t, ue(e, t), "y", i.intersect, s),
+ },
+ };
+ const Bi = ["left", "top", "right", "bottom"];
+ function Ni(t, e) {
+ return t.filter(t => t.pos === e);
+ }
+ function Wi(t, e) {
+ return t.filter(t => -1 === Bi.indexOf(t.pos) && t.box.axis === e);
+ }
+ function ji(t, e) {
+ return t.sort((t, i) => {
+ const s = e ? i : t, n = e ? t : i;
+ return s.weight === n.weight ? s.index - n.index : s.weight - n.weight;
+ });
+ }
+ function Hi(t, e) {
+ const i = function(t) {
+ const e = {};
+ for (const i of t) {
+ const { stack: t, pos: s, stackWeight: n } = i;
+ if (!t || !Bi.includes(s)) continue;
+ const o = e[t] || (e[t] = { count: 0, placed: 0, weight: 0, size: 0 });
+ o.count++, o.weight += n;
+ }
+ return e;
+ }(t),
+ { vBoxMaxWidth: s, hBoxMaxHeight: n } = e;
+ let o, a, r;
+ for (o = 0, a = t.length; o < a; ++o) {
+ r = t[o];
+ const { fullSize: a } = r.box, l = i[r.stack], h = l && r.stackWeight / l.weight;
+ r.horizontal
+ ? (r.width = h ? h * s : a && e.availableWidth, r.height = n)
+ : (r.width = s, r.height = h ? h * n : a && e.availableHeight);
+ }
+ return i;
+ }
+ function $i(t, e, i, s) {
+ return Math.max(t[i], e[i]) + Math.max(t[s], e[s]);
+ }
+ function Yi(t, e) {
+ t.top = Math.max(t.top, e.top),
+ t.left = Math.max(t.left, e.left),
+ t.bottom = Math.max(t.bottom, e.bottom),
+ t.right = Math.max(t.right, e.right);
+ }
+ function Ui(t, e, i, s) {
+ const { pos: o, box: a } = i, r = t.maxPadding;
+ if (!n(o)) {
+ i.size && (t[o] -= i.size);
+ const e = s[i.stack] || { size: 0, count: 1 };
+ e.size = Math.max(e.size, i.horizontal ? a.height : a.width), i.size = e.size / e.count, t[o] += i.size;
+ }
+ a.getPadding && Yi(r, a.getPadding());
+ const l = Math.max(0, e.outerWidth - $i(r, t, "left", "right")),
+ h = Math.max(0, e.outerHeight - $i(r, t, "top", "bottom")),
+ c = l !== t.w,
+ d = h !== t.h;
+ return t.w = l, t.h = h, i.horizontal ? { same: c, other: d } : { same: d, other: c };
+ }
+ function Xi(t, e) {
+ const i = e.maxPadding;
+ function s(t) {
+ const s = { left: 0, top: 0, right: 0, bottom: 0 };
+ return t.forEach(t => {
+ s[t] = Math.max(e[t], i[t]);
+ }),
+ s;
+ }
+ return s(t ? ["left", "right"] : ["top", "bottom"]);
+ }
+ function qi(t, e, i, s) {
+ const n = [];
+ let o, a, r, l, h, c;
+ for (o = 0, a = t.length, h = 0; o < a; ++o) {
+ r = t[o], l = r.box, l.update(r.width || e.w, r.height || e.h, Xi(r.horizontal, e));
+ const { same: a, other: d } = Ui(e, i, r, s);
+ h |= a && n.length, c = c || d, l.fullSize || n.push(r);
+ }
+ return h && qi(n, e, i, s) || c;
+ }
+ function Ki(t, e, i, s, n) {
+ t.top = i, t.left = e, t.right = e + s, t.bottom = i + n, t.width = s, t.height = n;
+ }
+ function Gi(t, e, i, s) {
+ const n = i.padding;
+ let { x: o, y: a } = e;
+ for (const r of t) {
+ const t = r.box, l = s[r.stack] || { count: 1, placed: 0, weight: 1 }, h = r.stackWeight / l.weight || 1;
+ if (r.horizontal) {
+ const s = e.w * h, o = l.size || t.height;
+ M(l.start) && (a = l.start),
+ t.fullSize ? Ki(t, n.left, a, i.outerWidth - n.right - n.left, o) : Ki(t, e.left + l.placed, a, s, o),
+ l.start = a,
+ l.placed += s,
+ a = t.bottom;
+ } else {
+ const s = e.h * h, a = l.size || t.width;
+ M(l.start) && (o = l.start),
+ t.fullSize ? Ki(t, o, n.top, a, i.outerHeight - n.bottom - n.top) : Ki(t, o, e.top + l.placed, a, s),
+ l.start = o,
+ l.placed += s,
+ o = t.right;
+ }
+ }
+ e.x = o, e.y = a;
+ }
+ ne.set("layout", { autoPadding: !0, padding: { top: 0, right: 0, bottom: 0, left: 0 } });
+ var Zi = {
+ addBox(t, e) {
+ t.boxes || (t.boxes = []),
+ e.fullSize = e.fullSize || !1,
+ e.position = e.position || "top",
+ e.weight = e.weight || 0,
+ e._layers = e._layers || function() {
+ return [{
+ z: 0,
+ draw(t) {
+ e.draw(t);
+ },
+ }];
+ },
+ t.boxes.push(e);
+ },
+ removeBox(t, e) {
+ const i = t.boxes ? t.boxes.indexOf(e) : -1;
+ -1 !== i && t.boxes.splice(i, 1);
+ },
+ configure(t, e, i) {
+ e.fullSize = i.fullSize, e.position = i.position, e.weight = i.weight;
+ },
+ update(t, e, i, s) {
+ if (!t) return;
+ const n = pi(t.options.layout.padding),
+ o = Math.max(e - n.width, 0),
+ a = Math.max(i - n.height, 0),
+ r = function(t) {
+ const e = function(t) {
+ const e = [];
+ let i, s, n, o, a, r;
+ for (i = 0, s = (t || []).length; i < s; ++i) {
+ n = t[i],
+ ({ position: o, options: { stack: a, stackWeight: r = 1 } } = n),
+ e.push({
+ index: i,
+ box: n,
+ pos: o,
+ horizontal: n.isHorizontal(),
+ weight: n.weight,
+ stack: a && o + a,
+ stackWeight: r,
+ });
+ }
+ return e;
+ }(t),
+ i = ji(e.filter(t => t.box.fullSize), !0),
+ s = ji(Ni(e, "left"), !0),
+ n = ji(Ni(e, "right")),
+ o = ji(Ni(e, "top"), !0),
+ a = ji(Ni(e, "bottom")),
+ r = Wi(e, "x"),
+ l = Wi(e, "y");
+ return {
+ fullSize: i,
+ leftAndTop: s.concat(o),
+ rightAndBottom: n.concat(l).concat(a).concat(r),
+ chartArea: Ni(e, "chartArea"),
+ vertical: s.concat(n).concat(l),
+ horizontal: o.concat(a).concat(r),
+ };
+ }(t.boxes),
+ l = r.vertical,
+ h = r.horizontal;
+ d(t.boxes, t => {
+ "function" == typeof t.beforeLayout && t.beforeLayout();
+ });
+ const c = l.reduce((t, e) => e.box.options && !1 === e.box.options.display ? t : t + 1, 0) || 1,
+ u = Object.freeze({
+ outerWidth: e,
+ outerHeight: i,
+ padding: n,
+ availableWidth: o,
+ availableHeight: a,
+ vBoxMaxWidth: o / 2 / c,
+ hBoxMaxHeight: a / 2,
+ }),
+ f = Object.assign({}, n);
+ Yi(f, pi(s));
+ const g = Object.assign({ maxPadding: f, w: o, h: a, x: n.left, y: n.top }, n), p = Hi(l.concat(h), u);
+ qi(r.fullSize, g, u, p),
+ qi(l, g, u, p),
+ qi(h, g, u, p) && qi(l, g, u, p),
+ function(t) {
+ const e = t.maxPadding;
+ function i(i) {
+ const s = Math.max(e[i] - t[i], 0);
+ return t[i] += s, s;
+ }
+ t.y += i("top"), t.x += i("left"), i("right"), i("bottom");
+ }(g),
+ Gi(r.leftAndTop, g, u, p),
+ g.x += g.w,
+ g.y += g.h,
+ Gi(r.rightAndBottom, g, u, p),
+ t.chartArea = { left: g.left, top: g.top, right: g.left + g.w, bottom: g.top + g.h, height: g.h, width: g.w },
+ d(r.chartArea, e => {
+ const i = e.box;
+ Object.assign(i, t.chartArea), i.update(g.w, g.h, { left: 0, top: 0, right: 0, bottom: 0 });
+ });
+ },
+ };
+ class Ji {
+ acquireContext(t, e) {}
+ releaseContext(t) {
+ return !1;
+ }
+ addEventListener(t, e, i) {}
+ removeEventListener(t, e, i) {}
+ getDevicePixelRatio() {
+ return 1;
+ }
+ getMaximumSize(t, e, i, s) {
+ return e = Math.max(0, e || t.width),
+ i = i || t.height,
+ { width: e, height: Math.max(0, s ? Math.floor(e / s) : i) };
+ }
+ isAttached(t) {
+ return !0;
+ }
+ updateConfig(t) {}
+ }
+ class Qi extends Ji {
+ acquireContext(t) {
+ return t && t.getContext && t.getContext("2d") || null;
+ }
+ updateConfig(t) {
+ t.options.animation = !1;
+ }
+ }
+ const ts = {
+ touchstart: "mousedown",
+ touchmove: "mousemove",
+ touchend: "mouseup",
+ pointerenter: "mouseenter",
+ pointerdown: "mousedown",
+ pointermove: "mousemove",
+ pointerup: "mouseup",
+ pointerleave: "mouseout",
+ pointerout: "mouseout",
+ },
+ es = t => null === t || "" === t;
+ const is = !!me && { passive: !0 };
+ function ss(t, e, i) {
+ t.canvas.removeEventListener(e, i, is);
+ }
+ function ns(t, e) {
+ for (const i of t) if (i === e || i.contains(e)) return !0;
+ }
+ function os(t, e, i) {
+ const s = t.canvas,
+ n = new MutationObserver(t => {
+ let e = !1;
+ for (const i of t) e = e || ns(i.addedNodes, s), e = e && !ns(i.removedNodes, s);
+ e && i();
+ });
+ return n.observe(document, { childList: !0, subtree: !0 }), n;
+ }
+ function as(t, e, i) {
+ const s = t.canvas,
+ n = new MutationObserver(t => {
+ let e = !1;
+ for (const i of t) e = e || ns(i.removedNodes, s), e = e && !ns(i.addedNodes, s);
+ e && i();
+ });
+ return n.observe(document, { childList: !0, subtree: !0 }), n;
+ }
+ const rs = new Map();
+ let ls = 0;
+ function hs() {
+ const t = window.devicePixelRatio;
+ t !== ls && (ls = t,
+ rs.forEach((e, i) => {
+ i.currentDevicePixelRatio !== t && e();
+ }));
+ }
+ function cs(t, e, i) {
+ const s = t.canvas, n = s && ae(s);
+ if (!n) return;
+ const o = ht((t, e) => {
+ const s = n.clientWidth;
+ i(t, e), s < n.clientWidth && i();
+ }, window),
+ a = new ResizeObserver(t => {
+ const e = t[0], i = e.contentRect.width, s = e.contentRect.height;
+ 0 === i && 0 === s || o(i, s);
+ });
+ return a.observe(n),
+ function(t, e) {
+ rs.size || window.addEventListener("resize", hs), rs.set(t, e);
+ }(t, o),
+ a;
+ }
+ function ds(t, e, i) {
+ i && i.disconnect(),
+ "resize" === e && function(t) {
+ rs.delete(t), rs.size || window.removeEventListener("resize", hs);
+ }(t);
+ }
+ function us(t, e, i) {
+ const s = t.canvas,
+ n = ht(
+ e => {
+ null !== t.ctx && i(function(t, e) {
+ const i = ts[t.type] || t.type, { x: s, y: n } = ue(t, e);
+ return { type: i, chart: e, native: t, x: void 0 !== s ? s : null, y: void 0 !== n ? n : null };
+ }(e, t));
+ },
+ t,
+ t => {
+ const e = t[0];
+ return [e, e.offsetX, e.offsetY];
+ },
+ );
+ return function(t, e, i) {
+ t.addEventListener(e, i, is);
+ }(s, e, n),
+ n;
+ }
+ class fs extends Ji {
+ acquireContext(t, e) {
+ const i = t && t.getContext && t.getContext("2d");
+ return i && i.canvas === t
+ ? (function(t, e) {
+ const i = t.style, s = t.getAttribute("height"), n = t.getAttribute("width");
+ if (
+ t.$chartjs = {
+ initial: { height: s, width: n, style: { display: i.display, height: i.height, width: i.width } },
+ },
+ i.display = i.display || "block",
+ i.boxSizing = i.boxSizing || "border-box",
+ es(n)
+ ) {
+ const e = be(t, "width");
+ void 0 !== e && (t.width = e);
+ }
+ if (es(s)) {
+ if ("" === t.style.height) t.height = t.width / (e || 2);
+ else {
+ const e = be(t, "height");
+ void 0 !== e && (t.height = e);
+ }
+ }
+ }(t, e),
+ i)
+ : null;
+ }
+ releaseContext(t) {
+ const e = t.canvas;
+ if (!e.$chartjs) return !1;
+ const s = e.$chartjs.initial;
+ ["height", "width"].forEach(t => {
+ const n = s[t];
+ i(n) ? e.removeAttribute(t) : e.setAttribute(t, n);
+ });
+ const n = s.style || {};
+ return Object.keys(n).forEach(t => {
+ e.style[t] = n[t];
+ }),
+ e.width = e.width,
+ delete e.$chartjs,
+ !0;
+ }
+ addEventListener(t, e, i) {
+ this.removeEventListener(t, e);
+ const s = t.$proxies || (t.$proxies = {}), n = { attach: os, detach: as, resize: cs }[e] || us;
+ s[e] = n(t, e, i);
+ }
+ removeEventListener(t, e) {
+ const i = t.$proxies || (t.$proxies = {}), s = i[e];
+ if (!s) return;
+ ({ attach: ds, detach: ds, resize: ds }[e] || ss)(t, e, s), i[e] = void 0;
+ }
+ getDevicePixelRatio() {
+ return window.devicePixelRatio;
+ }
+ getMaximumSize(t, e, i, s) {
+ return ge(t, e, i, s);
+ }
+ isAttached(t) {
+ const e = ae(t);
+ return !(!e || !e.isConnected);
+ }
+ }
+ function gs(t) {
+ return !oe() || "undefined" != typeof OffscreenCanvas && t instanceof OffscreenCanvas ? Qi : fs;
+ }
+ var ps = Object.freeze({
+ __proto__: null,
+ _detectPlatform: gs,
+ BasePlatform: Ji,
+ BasicPlatform: Qi,
+ DomPlatform: fs,
+ });
+ const ms = "transparent",
+ bs = {
+ boolean: (t, e, i) => i > .5 ? e : t,
+ color(t, e, i) {
+ const s = Jt(t || ms), n = s.valid && Jt(e || ms);
+ return n && n.valid ? n.mix(s, i).hexString() : e;
+ },
+ number: (t, e, i) => t + (e - t) * i,
+ };
+ class xs {
+ constructor(t, e, i, s) {
+ const n = e[i];
+ s = bi([t.to, s, n, t.from]);
+ const o = bi([t.from, n, s]);
+ this._active = !0,
+ this._fn = t.fn || bs[t.type || typeof o],
+ this._easing = si[t.easing] || si.linear,
+ this._start = Math.floor(Date.now() + (t.delay || 0)),
+ this._duration = this._total = Math.floor(t.duration),
+ this._loop = !!t.loop,
+ this._target = e,
+ this._prop = i,
+ this._from = o,
+ this._to = s,
+ this._promises = void 0;
+ }
+ active() {
+ return this._active;
+ }
+ update(t, e, i) {
+ if (this._active) {
+ this._notify(!1);
+ const s = this._target[this._prop], n = i - this._start, o = this._duration - n;
+ this._start = i,
+ this._duration = Math.floor(Math.max(o, t.duration)),
+ this._total += n,
+ this._loop = !!t.loop,
+ this._to = bi([t.to, e, s, t.from]),
+ this._from = bi([t.from, s, e]);
+ }
+ }
+ cancel() {
+ this._active && (this.tick(Date.now()), this._active = !1, this._notify(!1));
+ }
+ tick(t) {
+ const e = t - this._start, i = this._duration, s = this._prop, n = this._from, o = this._loop, a = this._to;
+ let r;
+ if (this._active = n !== a && (o || e < i), !this._active) return this._target[s] = a, void this._notify(!0);
+ e < 0
+ ? this._target[s] = n
+ : (r = e / i % 2,
+ r = o && r > 1 ? 2 - r : r,
+ r = this._easing(Math.min(1, Math.max(0, r))),
+ this._target[s] = this._fn(n, a, r));
+ }
+ wait() {
+ const t = this._promises || (this._promises = []);
+ return new Promise((e, i) => {
+ t.push({ res: e, rej: i });
+ });
+ }
+ _notify(t) {
+ const e = t ? "res" : "rej", i = this._promises || [];
+ for (let t = 0; t < i.length; t++) i[t][e]();
+ }
+ }
+ ne.set("animation", {
+ delay: void 0,
+ duration: 1e3,
+ easing: "easeOutQuart",
+ fn: void 0,
+ from: void 0,
+ loop: void 0,
+ to: void 0,
+ type: void 0,
+ });
+ const _s = Object.keys(ne.animation);
+ ne.describe("animation", {
+ _fallback: !1,
+ _indexable: !1,
+ _scriptable: t => "onProgress" !== t && "onComplete" !== t && "fn" !== t,
+ }),
+ ne.set("animations", {
+ colors: { type: "color", properties: ["color", "borderColor", "backgroundColor"] },
+ numbers: { type: "number", properties: ["x", "y", "borderWidth", "radius", "tension"] },
+ }),
+ ne.describe("animations", { _fallback: "animation" }),
+ ne.set("transitions", {
+ active: { animation: { duration: 400 } },
+ resize: { animation: { duration: 0 } },
+ show: { animations: { colors: { from: "transparent" }, visible: { type: "boolean", duration: 0 } } },
+ hide: {
+ animations: { colors: { to: "transparent" }, visible: { type: "boolean", easing: "linear", fn: t => 0 | t } },
+ },
+ });
+ class ys {
+ constructor(t, e) {
+ this._chart = t, this._properties = new Map(), this.configure(e);
+ }
+ configure(t) {
+ if (!n(t)) return;
+ const e = this._properties;
+ Object.getOwnPropertyNames(t).forEach(i => {
+ const o = t[i];
+ if (!n(o)) return;
+ const a = {};
+ for (const t of _s) a[t] = o[t];
+ (s(o.properties) && o.properties || [i]).forEach(t => {
+ t !== i && e.has(t) || e.set(t, a);
+ });
+ });
+ }
+ _animateOptions(t, e) {
+ const i = e.options,
+ s = function(t, e) {
+ if (!e) return;
+ let i = t.options;
+ if (!i) return void (t.options = e);
+ i.$shared && (t.options = i = Object.assign({}, i, { $shared: !1, $animations: {} }));
+ return i;
+ }(t, i);
+ if (!s) return [];
+ const n = this._createAnimations(s, i);
+ return i.$shared && function(t, e) {
+ const i = [], s = Object.keys(e);
+ for (let e = 0; e < s.length; e++) {
+ const n = t[s[e]];
+ n && n.active() && i.push(n.wait());
+ }
+ return Promise.all(i);
+ }(t.options.$animations, i).then(() => {
+ t.options = i;
+ }, () => {}),
+ n;
+ }
+ _createAnimations(t, e) {
+ const i = this._properties, s = [], n = t.$animations || (t.$animations = {}), o = Object.keys(e), a = Date.now();
+ let r;
+ for (r = o.length - 1; r >= 0; --r) {
+ const l = o[r];
+ if ("$" === l.charAt(0)) continue;
+ if ("options" === l) {
+ s.push(...this._animateOptions(t, e));
+ continue;
+ }
+ const h = e[l];
+ let c = n[l];
+ const d = i.get(l);
+ if (c) {
+ if (d && c.active()) {
+ c.update(d, h, a);
+ continue;
+ }
+ c.cancel();
+ }
+ d && d.duration ? (n[l] = c = new xs(d, t, l, h), s.push(c)) : t[l] = h;
+ }
+ return s;
+ }
+ update(t, e) {
+ if (0 === this._properties.size) return void Object.assign(t, e);
+ const i = this._createAnimations(t, e);
+ return i.length ? (mt.add(this._chart, i), !0) : void 0;
+ }
+ }
+ function vs(t, e) {
+ const i = t && t.options || {}, s = i.reverse, n = void 0 === i.min ? e : 0, o = void 0 === i.max ? e : 0;
+ return { start: s ? o : n, end: s ? n : o };
+ }
+ function ws(t, e) {
+ const i = [], s = t._getSortedDatasetMetas(e);
+ let n, o;
+ for (n = 0, o = s.length; n < o; ++n) i.push(s[n].index);
+ return i;
+ }
+ function Ms(t, e, i, s = {}) {
+ const n = t.keys, a = "single" === s.mode;
+ let r, l, h, c;
+ if (null !== e) {
+ for (r = 0, l = n.length; r < l; ++r) {
+ if (h = +n[r], h === i) {
+ if (s.all) continue;
+ break;
+ }
+ c = t.values[h], o(c) && (a || 0 === e || z(e) === z(c)) && (e += c);
+ }
+ return e;
+ }
+ }
+ function ks(t, e) {
+ const i = t && t.options.stacked;
+ return i || void 0 === i && void 0 !== e.stack;
+ }
+ function Ss(t, e, i) {
+ const s = t[e] || (t[e] = {});
+ return s[i] || (s[i] = {});
+ }
+ function Ps(t, e, i, s) {
+ for (const n of e.getMatchingVisibleMetas(s).reverse()) {
+ const e = t[n.index];
+ if (i && e > 0 || !i && e < 0) return n.index;
+ }
+ return null;
+ }
+ function Ds(t, e) {
+ const { chart: i, _cachedMeta: s } = t,
+ n = i._stacks || (i._stacks = {}),
+ { iScale: o, vScale: a, index: r } = s,
+ l = o.axis,
+ h = a.axis,
+ c = function(t, e, i) {
+ return `${t.id}.${e.id}.${i.stack || i.type}`;
+ }(o, a, s),
+ d = e.length;
+ let u;
+ for (let t = 0; t < d; ++t) {
+ const i = e[t], { [l]: o, [h]: d } = i;
+ u = (i._stacks || (i._stacks = {}))[h] = Ss(n, c, o),
+ u[r] = d,
+ u._top = Ps(u, a, !0, s.type),
+ u._bottom = Ps(u, a, !1, s.type);
+ }
+ }
+ function Os(t, e) {
+ const i = t.scales;
+ return Object.keys(i).filter(t => i[t].axis === e).shift();
+ }
+ function Cs(t, e) {
+ const i = t.controller.index, s = t.vScale && t.vScale.axis;
+ if (s) {
+ e = e || t._parsed;
+ for (const t of e) {
+ const e = t._stacks;
+ if (!e || void 0 === e[s] || void 0 === e[s][i]) return;
+ delete e[s][i];
+ }
+ }
+ }
+ const As = t => "reset" === t || "none" === t, Ts = (t, e) => e ? t : Object.assign({}, t);
+ class Ls {
+ constructor(t, e) {
+ this.chart = t,
+ this._ctx = t.ctx,
+ this.index = e,
+ this._cachedDataOpts = {},
+ this._cachedMeta = this.getMeta(),
+ this._type = this._cachedMeta.type,
+ this.options = void 0,
+ this._parsing = !1,
+ this._data = void 0,
+ this._objectData = void 0,
+ this._sharedOptions = void 0,
+ this._drawStart = void 0,
+ this._drawCount = void 0,
+ this.enableOptionSharing = !1,
+ this.supportsDecimation = !1,
+ this.$context = void 0,
+ this._syncList = [],
+ this.initialize();
+ }
+ initialize() {
+ const t = this._cachedMeta;
+ this.configure(), this.linkScales(), t._stacked = ks(t.vScale, t), this.addElements();
+ }
+ updateIndex(t) {
+ this.index !== t && Cs(this._cachedMeta), this.index = t;
+ }
+ linkScales() {
+ const t = this.chart,
+ e = this._cachedMeta,
+ i = this.getDataset(),
+ s = (t, e, i, s) => "x" === t ? e : "r" === t ? s : i,
+ n = e.xAxisID = r(i.xAxisID, Os(t, "x")),
+ o = e.yAxisID = r(i.yAxisID, Os(t, "y")),
+ a = e.rAxisID = r(i.rAxisID, Os(t, "r")),
+ l = e.indexAxis,
+ h = e.iAxisID = s(l, n, o, a),
+ c = e.vAxisID = s(l, o, n, a);
+ e.xScale = this.getScaleForId(n),
+ e.yScale = this.getScaleForId(o),
+ e.rScale = this.getScaleForId(a),
+ e.iScale = this.getScaleForId(h),
+ e.vScale = this.getScaleForId(c);
+ }
+ getDataset() {
+ return this.chart.data.datasets[this.index];
+ }
+ getMeta() {
+ return this.chart.getDatasetMeta(this.index);
+ }
+ getScaleForId(t) {
+ return this.chart.scales[t];
+ }
+ _getOtherScale(t) {
+ const e = this._cachedMeta;
+ return t === e.iScale ? e.vScale : e.iScale;
+ }
+ reset() {
+ this._update("reset");
+ }
+ _destroy() {
+ const t = this._cachedMeta;
+ this._data && at(this._data, this), t._stacked && Cs(t);
+ }
+ _dataCheck() {
+ const t = this.getDataset(), e = t.data || (t.data = []), i = this._data;
+ if (n(e)) {
+ this._data = function(t) {
+ const e = Object.keys(t), i = new Array(e.length);
+ let s, n, o;
+ for (s = 0, n = e.length; s < n; ++s) o = e[s], i[s] = { x: o, y: t[o] };
+ return i;
+ }(e);
+ } else if (i !== e) {
+ if (i) {
+ at(i, this);
+ const t = this._cachedMeta;
+ Cs(t), t._parsed = [];
+ }
+ e && Object.isExtensible(e) && ot(e, this), this._syncList = [], this._data = e;
+ }
+ }
+ addElements() {
+ const t = this._cachedMeta;
+ this._dataCheck(), this.datasetElementType && (t.dataset = new this.datasetElementType());
+ }
+ buildOrUpdateElements(t) {
+ const e = this._cachedMeta, i = this.getDataset();
+ let s = !1;
+ this._dataCheck();
+ const n = e._stacked;
+ e._stacked = ks(e.vScale, e),
+ e.stack !== i.stack && (s = !0, Cs(e), e.stack = i.stack),
+ this._resyncElements(t),
+ (s || n !== e._stacked) && Ds(this, e._parsed);
+ }
+ configure() {
+ const t = this.chart.config, e = t.datasetScopeKeys(this._type), i = t.getOptionScopes(this.getDataset(), e, !0);
+ this.options = t.createResolver(i, this.getContext()),
+ this._parsing = this.options.parsing,
+ this._cachedDataOpts = {};
+ }
+ parse(t, e) {
+ const { _cachedMeta: i, _data: o } = this, { iScale: a, _stacked: r } = i, l = a.axis;
+ let h, c, d, u = 0 === t && e === o.length || i._sorted, f = t > 0 && i._parsed[t - 1];
+ if (!1 === this._parsing) i._parsed = o, i._sorted = !0, d = o;
+ else {
+ d = s(o[t])
+ ? this.parseArrayData(i, o, t, e)
+ : n(o[t])
+ ? this.parseObjectData(i, o, t, e)
+ : this.parsePrimitiveData(i, o, t, e);
+ const a = () => null === c[l] || f && c[l] < f[l];
+ for (h = 0; h < e; ++h) i._parsed[h + t] = c = d[h], u && (a() && (u = !1), f = c);
+ i._sorted = u;
+ }
+ r && Ds(this, d);
+ }
+ parsePrimitiveData(t, e, i, s) {
+ const { iScale: n, vScale: o } = t, a = n.axis, r = o.axis, l = n.getLabels(), h = n === o, c = new Array(s);
+ let d, u, f;
+ for (d = 0, u = s; d < u; ++d) f = d + i, c[d] = { [a]: h || n.parse(l[f], f), [r]: o.parse(e[f], f) };
+ return c;
+ }
+ parseArrayData(t, e, i, s) {
+ const { xScale: n, yScale: o } = t, a = new Array(s);
+ let r, l, h, c;
+ for (r = 0, l = s; r < l; ++r) h = r + i, c = e[h], a[r] = { x: n.parse(c[0], h), y: o.parse(c[1], h) };
+ return a;
+ }
+ parseObjectData(t, e, i, s) {
+ const { xScale: n, yScale: o } = t, { xAxisKey: a = "x", yAxisKey: r = "y" } = this._parsing, l = new Array(s);
+ let h, c, d, u;
+ for (h = 0, c = s; h < c; ++h) d = h + i, u = e[d], l[h] = { x: n.parse(y(u, a), d), y: o.parse(y(u, r), d) };
+ return l;
+ }
+ getParsed(t) {
+ return this._cachedMeta._parsed[t];
+ }
+ getDataElement(t) {
+ return this._cachedMeta.data[t];
+ }
+ applyStack(t, e, i) {
+ const s = this.chart, n = this._cachedMeta, o = e[t.axis];
+ return Ms({ keys: ws(s, !0), values: e._stacks[t.axis] }, o, n.index, { mode: i });
+ }
+ updateRangeFromParsed(t, e, i, s) {
+ const n = i[e.axis];
+ let o = null === n ? NaN : n;
+ const a = s && i._stacks[e.axis];
+ s && a && (s.values = a, o = Ms(s, n, this._cachedMeta.index)),
+ t.min = Math.min(t.min, o),
+ t.max = Math.max(t.max, o);
+ }
+ getMinMax(t, e) {
+ const i = this._cachedMeta,
+ s = i._parsed,
+ n = i._sorted && t === i.iScale,
+ a = s.length,
+ r = this._getOtherScale(t),
+ l = ((t, e, i) => t && !e.hidden && e._stacked && { keys: ws(i, !0), values: null })(e, i, this.chart),
+ h = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY },
+ { min: c, max: d } = function(t) {
+ const { min: e, max: i, minDefined: s, maxDefined: n } = t.getUserBounds();
+ return { min: s ? e : Number.NEGATIVE_INFINITY, max: n ? i : Number.POSITIVE_INFINITY };
+ }(r);
+ let u, f;
+ function g() {
+ f = s[u];
+ const e = f[r.axis];
+ return !o(f[t.axis]) || c > e || d < e;
+ }
+ for (u = 0; u < a && (g() || (this.updateRangeFromParsed(h, t, f, l), !n)); ++u);
+ if (n) {
+ for (u = a - 1; u >= 0; --u) {
+ if (!g()) {
+ this.updateRangeFromParsed(h, t, f, l);
+ break;
+ }
+ }
+ }
+ return h;
+ }
+ getAllParsedValues(t) {
+ const e = this._cachedMeta._parsed, i = [];
+ let s, n, a;
+ for (s = 0, n = e.length; s < n; ++s) a = e[s][t.axis], o(a) && i.push(a);
+ return i;
+ }
+ getMaxOverflow() {
+ return !1;
+ }
+ getLabelAndValue(t) {
+ const e = this._cachedMeta, i = e.iScale, s = e.vScale, n = this.getParsed(t);
+ return { label: i ? "" + i.getLabelForValue(n[i.axis]) : "", value: s ? "" + s.getLabelForValue(n[s.axis]) : "" };
+ }
+ _update(t) {
+ const e = this._cachedMeta;
+ this.update(t || "default"),
+ e._clip = function(t) {
+ let e, i, s, o;
+ return n(t) ? (e = t.top, i = t.right, s = t.bottom, o = t.left) : e =
+ i =
+ s =
+ o =
+ t,
+ { top: e, right: i, bottom: s, left: o, disabled: !1 === t };
+ }(r(
+ this.options.clip,
+ function(t, e, i) {
+ if (!1 === i) return !1;
+ const s = vs(t, i), n = vs(e, i);
+ return { top: n.end, right: s.end, bottom: n.start, left: s.start };
+ }(e.xScale, e.yScale, this.getMaxOverflow()),
+ ));
+ }
+ update(t) {}
+ draw() {
+ const t = this._ctx,
+ e = this.chart,
+ i = this._cachedMeta,
+ s = i.data || [],
+ n = e.chartArea,
+ o = [],
+ a = this._drawStart || 0,
+ r = this._drawCount || s.length - a,
+ l = this.options.drawActiveElementsOnTop;
+ let h;
+ for (i.dataset && i.dataset.draw(t, n, a, r), h = a; h < a + r; ++h) {
+ const e = s[h];
+ e.hidden || (e.active && l ? o.push(e) : e.draw(t, n));
+ }
+ for (h = 0; h < o.length; ++h) o[h].draw(t, n);
+ }
+ getStyle(t, e) {
+ const i = e ? "active" : "default";
+ return void 0 === t && this._cachedMeta.dataset
+ ? this.resolveDatasetElementOptions(i)
+ : this.resolveDataElementOptions(t || 0, i);
+ }
+ getContext(t, e, i) {
+ const s = this.getDataset();
+ let n;
+ if (t >= 0 && t < this._cachedMeta.data.length) {
+ const e = this._cachedMeta.data[t];
+ n = e.$context || (e.$context = function(t, e, i) {
+ return _i(t, {
+ active: !1,
+ dataIndex: e,
+ parsed: void 0,
+ raw: void 0,
+ element: i,
+ index: e,
+ mode: "default",
+ type: "data",
+ });
+ }(this.getContext(), t, e)),
+ n.parsed = this.getParsed(t),
+ n.raw = s.data[t],
+ n.index = n.dataIndex = t;
+ } else {n = this.$context || (this.$context = function(t, e) {
+ return _i(t, { active: !1, dataset: void 0, datasetIndex: e, index: e, mode: "default", type: "dataset" });
+ }(this.chart.getContext(), this.index)),
+ n.dataset = s,
+ n.index = n.datasetIndex = this.index;}
+ return n.active = !!e, n.mode = i, n;
+ }
+ resolveDatasetElementOptions(t) {
+ return this._resolveElementOptions(this.datasetElementType.id, t);
+ }
+ resolveDataElementOptions(t, e) {
+ return this._resolveElementOptions(this.dataElementType.id, e, t);
+ }
+ _resolveElementOptions(t, e = "default", i) {
+ const s = "active" === e,
+ n = this._cachedDataOpts,
+ o = t + "-" + e,
+ a = n[o],
+ r = this.enableOptionSharing && M(i);
+ if (a) return Ts(a, r);
+ const l = this.chart.config,
+ h = l.datasetElementScopeKeys(this._type, t),
+ c = s ? [`${t}Hover`, "hover", t, ""] : [t, ""],
+ d = l.getOptionScopes(this.getDataset(), h),
+ u = Object.keys(ne.elements[t]),
+ f = l.resolveNamedOptions(d, u, () => this.getContext(i, s), c);
+ return f.$shared && (f.$shared = r, n[o] = Object.freeze(Ts(f, r))), f;
+ }
+ _resolveAnimations(t, e, i) {
+ const s = this.chart, n = this._cachedDataOpts, o = `animation-${e}`, a = n[o];
+ if (a) return a;
+ let r;
+ if (!1 !== s.options.animation) {
+ const s = this.chart.config,
+ n = s.datasetAnimationScopeKeys(this._type, e),
+ o = s.getOptionScopes(this.getDataset(), n);
+ r = s.createResolver(o, this.getContext(t, i, e));
+ }
+ const l = new ys(s, r && r.animations);
+ return r && r._cacheable && (n[o] = Object.freeze(l)), l;
+ }
+ getSharedOptions(t) {
+ if (t.$shared) return this._sharedOptions || (this._sharedOptions = Object.assign({}, t));
+ }
+ includeOptions(t, e) {
+ return !e || As(t) || this.chart._animationsDisabled;
+ }
+ _getSharedOptions(t, e) {
+ const i = this.resolveDataElementOptions(t, e),
+ s = this._sharedOptions,
+ n = this.getSharedOptions(i),
+ o = this.includeOptions(e, n) || n !== s;
+ return this.updateSharedOptions(n, e, i), { sharedOptions: n, includeOptions: o };
+ }
+ updateElement(t, e, i, s) {
+ As(s) ? Object.assign(t, i) : this._resolveAnimations(e, s).update(t, i);
+ }
+ updateSharedOptions(t, e, i) {
+ t && !As(e) && this._resolveAnimations(void 0, e).update(t, i);
+ }
+ _setStyle(t, e, i, s) {
+ t.active = s;
+ const n = this.getStyle(e, s);
+ this._resolveAnimations(e, i, s).update(t, { options: !s && this.getSharedOptions(n) || n });
+ }
+ removeHoverStyle(t, e, i) {
+ this._setStyle(t, i, "active", !1);
+ }
+ setHoverStyle(t, e, i) {
+ this._setStyle(t, i, "active", !0);
+ }
+ _removeDatasetHoverStyle() {
+ const t = this._cachedMeta.dataset;
+ t && this._setStyle(t, void 0, "active", !1);
+ }
+ _setDatasetHoverStyle() {
+ const t = this._cachedMeta.dataset;
+ t && this._setStyle(t, void 0, "active", !0);
+ }
+ _resyncElements(t) {
+ const e = this._data, i = this._cachedMeta.data;
+ for (const [t, e, i] of this._syncList) this[t](e, i);
+ this._syncList = [];
+ const s = i.length, n = e.length, o = Math.min(n, s);
+ o && this.parse(0, o), n > s ? this._insertElements(s, n - s, t) : n < s && this._removeElements(n, s - n);
+ }
+ _insertElements(t, e, i = !0) {
+ const s = this._cachedMeta, n = s.data, o = t + e;
+ let a;
+ const r = t => {
+ for (t.length += e, a = t.length - 1; a >= o; a--) t[a] = t[a - e];
+ };
+ for (r(n), a = t; a < o; ++a) n[a] = new this.dataElementType();
+ this._parsing && r(s._parsed), this.parse(t, e), i && this.updateElements(n, t, e, "reset");
+ }
+ updateElements(t, e, i, s) {}
+ _removeElements(t, e) {
+ const i = this._cachedMeta;
+ if (this._parsing) {
+ const s = i._parsed.splice(t, e);
+ i._stacked && Cs(i, s);
+ }
+ i.data.splice(t, e);
+ }
+ _sync(t) {
+ if (this._parsing) this._syncList.push(t);
+ else {
+ const [e, i, s] = t;
+ this[e](i, s);
+ }
+ this.chart._dataChanges.push([this.index, ...t]);
+ }
+ _onDataPush() {
+ const t = arguments.length;
+ this._sync(["_insertElements", this.getDataset().data.length - t, t]);
+ }
+ _onDataPop() {
+ this._sync(["_removeElements", this._cachedMeta.data.length - 1, 1]);
+ }
+ _onDataShift() {
+ this._sync(["_removeElements", 0, 1]);
+ }
+ _onDataSplice(t, e) {
+ e && this._sync(["_removeElements", t, e]);
+ const i = arguments.length - 2;
+ i && this._sync(["_insertElements", t, i]);
+ }
+ _onDataUnshift() {
+ this._sync(["_insertElements", 0, arguments.length]);
+ }
+ }
+ Ls.defaults = {}, Ls.prototype.datasetElementType = null, Ls.prototype.dataElementType = null;
+ class Es {
+ constructor() {
+ this.x = void 0, this.y = void 0, this.active = !1, this.options = void 0, this.$animations = void 0;
+ }
+ tooltipPosition(t) {
+ const { x: e, y: i } = this.getProps(["x", "y"], t);
+ return { x: e, y: i };
+ }
+ hasValue() {
+ return B(this.x) && B(this.y);
+ }
+ getProps(t, e) {
+ const i = this.$animations;
+ if (!e || !i) return this;
+ const s = {};
+ return t.forEach(t => {
+ s[t] = i[t] && i[t].active() ? i[t]._to : this[t];
+ }),
+ s;
+ }
+ }
+ Es.defaults = {}, Es.defaultRoutes = void 0;
+ const Rs = {
+ values: t => s(t) ? t : "" + t,
+ numeric(t, e, i) {
+ if (0 === t) return "0";
+ const s = this.chart.options.locale;
+ let n, o = t;
+ if (i.length > 1) {
+ const e = Math.max(Math.abs(i[0].value), Math.abs(i[i.length - 1].value));
+ (e < 1e-4 || e > 1e15) && (n = "scientific"),
+ o = function(t, e) {
+ let i = e.length > 3 ? e[2].value - e[1].value : e[1].value - e[0].value;
+ Math.abs(i) >= 1 && t !== Math.floor(t) && (i = t - Math.floor(t));
+ return i;
+ }(t, i);
+ }
+ const a = I(Math.abs(o)),
+ r = Math.max(Math.min(-1 * Math.floor(a), 20), 0),
+ l = { notation: n, minimumFractionDigits: r, maximumFractionDigits: r };
+ return Object.assign(l, this.options.ticks.format), li(t, s, l);
+ },
+ logarithmic(t, e, i) {
+ if (0 === t) return "0";
+ const s = t / Math.pow(10, Math.floor(I(t)));
+ return 1 === s || 2 === s || 5 === s ? Rs.numeric.call(this, t, e, i) : "";
+ },
+ };
+ var Is = { formatters: Rs };
+ function zs(t, e) {
+ const s = t.options.ticks,
+ n = s.maxTicksLimit || function(t) {
+ const e = t.options.offset, i = t._tickSize(), s = t._length / i + (e ? 0 : 1), n = t._maxLength / i;
+ return Math.floor(Math.min(s, n));
+ }(t),
+ o = s.major.enabled
+ ? function(t) {
+ const e = [];
+ let i, s;
+ for (i = 0, s = t.length; i < s; i++) t[i].major && e.push(i);
+ return e;
+ }(e)
+ : [],
+ a = o.length,
+ r = o[0],
+ l = o[a - 1],
+ h = [];
+ if (a > n) {
+ return function(t, e, i, s) {
+ let n, o = 0, a = i[0];
+ for (s = Math.ceil(s), n = 0; n < t.length; n++) n === a && (e.push(t[n]), o++, a = i[o * s]);
+ }(e, h, o, a / n),
+ h;
+ }
+ const c = function(t, e, i) {
+ const s = function(t) {
+ const e = t.length;
+ let i, s;
+ if (e < 2) return !1;
+ for (s = t[0], i = 1; i < e; ++i) if (t[i] - t[i - 1] !== s) return !1;
+ return s;
+ }(t),
+ n = e.length / i;
+ if (!s) return Math.max(n, 1);
+ const o = V(s);
+ for (let t = 0, e = o.length - 1; t < e; t++) {
+ const e = o[t];
+ if (e > n) return e;
+ }
+ return Math.max(n, 1);
+ }(o, e, n);
+ if (a > 0) {
+ let t, s;
+ const n = a > 1 ? Math.round((l - r) / (a - 1)) : null;
+ for (Fs(e, h, c, i(n) ? 0 : r - n, r), t = 0, s = a - 1; t < s; t++) Fs(e, h, c, o[t], o[t + 1]);
+ return Fs(e, h, c, l, i(n) ? e.length : l + n), h;
+ }
+ return Fs(e, h, c), h;
+ }
+ function Fs(t, e, i, s, n) {
+ const o = r(s, 0), a = Math.min(r(n, t.length), t.length);
+ let l, h, c, d = 0;
+ for (i = Math.ceil(i), n && (l = n - s, i = l / Math.floor(l / i)), c = o; c < 0;) d++, c = Math.round(o + d * i);
+ for (h = Math.max(o, 0); h < a; h++) h === c && (e.push(t[h]), d++, c = Math.round(o + d * i));
+ }
+ ne.set("scale", {
+ display: !0,
+ offset: !1,
+ reverse: !1,
+ beginAtZero: !1,
+ bounds: "ticks",
+ grace: 0,
+ grid: {
+ display: !0,
+ lineWidth: 1,
+ drawBorder: !0,
+ drawOnChartArea: !0,
+ drawTicks: !0,
+ tickLength: 8,
+ tickWidth: (t, e) => e.lineWidth,
+ tickColor: (t, e) => e.color,
+ offset: !1,
+ borderDash: [],
+ borderDashOffset: 0,
+ borderWidth: 1,
+ },
+ title: { display: !1, text: "", padding: { top: 4, bottom: 4 } },
+ ticks: {
+ minRotation: 0,
+ maxRotation: 50,
+ mirror: !1,
+ textStrokeWidth: 0,
+ textStrokeColor: "",
+ padding: 3,
+ display: !0,
+ autoSkip: !0,
+ autoSkipPadding: 3,
+ labelOffset: 0,
+ callback: Is.formatters.values,
+ minor: {},
+ major: {},
+ align: "center",
+ crossAlign: "near",
+ showLabelBackdrop: !1,
+ backdropColor: "rgba(255, 255, 255, 0.75)",
+ backdropPadding: 2,
+ },
+ }),
+ ne.route("scale.ticks", "color", "", "color"),
+ ne.route("scale.grid", "color", "", "borderColor"),
+ ne.route("scale.grid", "borderColor", "", "borderColor"),
+ ne.route("scale.title", "color", "", "color"),
+ ne.describe("scale", {
+ _fallback: !1,
+ _scriptable: t => !t.startsWith("before") && !t.startsWith("after") && "callback" !== t && "parser" !== t,
+ _indexable: t => "borderDash" !== t && "tickBorderDash" !== t,
+ }),
+ ne.describe("scales", { _fallback: "scale" }),
+ ne.describe("scale.ticks", {
+ _scriptable: t => "backdropPadding" !== t && "callback" !== t,
+ _indexable: t => "backdropPadding" !== t,
+ });
+ const Vs = (t, e, i) => "top" === e || "left" === e ? t[e] + i : t[e] - i;
+ function Bs(t, e) {
+ const i = [], s = t.length / e, n = t.length;
+ let o = 0;
+ for (; o < n; o += s) i.push(t[Math.floor(o)]);
+ return i;
+ }
+ function Ns(t, e, i) {
+ const s = t.ticks.length, n = Math.min(e, s - 1), o = t._startPixel, a = t._endPixel, r = 1e-6;
+ let l, h = t.getPixelForTick(n);
+ if (
+ !(i && (l = 1 === s
+ ? Math.max(h - o, a - h)
+ : 0 === e
+ ? (t.getPixelForTick(1) - h) / 2
+ : (h - t.getPixelForTick(n - 1)) / 2,
+ h += n < e ? l : -l,
+ h < o - r || h > a + r))
+ ) return h;
+ }
+ function Ws(t) {
+ return t.drawTicks ? t.tickLength : 0;
+ }
+ function js(t, e) {
+ if (!t.display) return 0;
+ const i = mi(t.font, e), n = pi(t.padding);
+ return (s(t.text) ? t.text.length : 1) * i.lineHeight + n.height;
+ }
+ function Hs(t, e, i) {
+ let s = dt(t);
+ return (i && "right" !== e || !i && "right" === e)
+ && (s = (t => "left" === t ? "right" : "right" === t ? "left" : t)(s)),
+ s;
+ }
+ class $s extends Es {
+ constructor(t) {
+ super(),
+ this.id = t.id,
+ this.type = t.type,
+ this.options = void 0,
+ this.ctx = t.ctx,
+ this.chart = t.chart,
+ this.top = void 0,
+ this.bottom = void 0,
+ this.left = void 0,
+ this.right = void 0,
+ this.width = void 0,
+ this.height = void 0,
+ this._margins = { left: 0, right: 0, top: 0, bottom: 0 },
+ this.maxWidth = void 0,
+ this.maxHeight = void 0,
+ this.paddingTop = void 0,
+ this.paddingBottom = void 0,
+ this.paddingLeft = void 0,
+ this.paddingRight = void 0,
+ this.axis = void 0,
+ this.labelRotation = void 0,
+ this.min = void 0,
+ this.max = void 0,
+ this._range = void 0,
+ this.ticks = [],
+ this._gridLineItems = null,
+ this._labelItems = null,
+ this._labelSizes = null,
+ this._length = 0,
+ this._maxLength = 0,
+ this._longestTextCache = {},
+ this._startPixel = void 0,
+ this._endPixel = void 0,
+ this._reversePixels = !1,
+ this._userMax = void 0,
+ this._userMin = void 0,
+ this._suggestedMax = void 0,
+ this._suggestedMin = void 0,
+ this._ticksLength = 0,
+ this._borderValue = 0,
+ this._cache = {},
+ this._dataLimitsCached = !1,
+ this.$context = void 0;
+ }
+ init(t) {
+ this.options = t.setContext(this.getContext()),
+ this.axis = t.axis,
+ this._userMin = this.parse(t.min),
+ this._userMax = this.parse(t.max),
+ this._suggestedMin = this.parse(t.suggestedMin),
+ this._suggestedMax = this.parse(t.suggestedMax);
+ }
+ parse(t, e) {
+ return t;
+ }
+ getUserBounds() {
+ let { _userMin: t, _userMax: e, _suggestedMin: i, _suggestedMax: s } = this;
+ return t = a(t, Number.POSITIVE_INFINITY),
+ e = a(e, Number.NEGATIVE_INFINITY),
+ i = a(i, Number.POSITIVE_INFINITY),
+ s = a(s, Number.NEGATIVE_INFINITY),
+ { min: a(t, i), max: a(e, s), minDefined: o(t), maxDefined: o(e) };
+ }
+ getMinMax(t) {
+ let e, { min: i, max: s, minDefined: n, maxDefined: o } = this.getUserBounds();
+ if (n && o) return { min: i, max: s };
+ const r = this.getMatchingVisibleMetas();
+ for (let a = 0, l = r.length; a < l; ++a) {
+ e = r[a].controller.getMinMax(this, t), n || (i = Math.min(i, e.min)), o || (s = Math.max(s, e.max));
+ }
+ return i = o && i > s ? s : i, s = n && i > s ? i : s, { min: a(i, a(s, i)), max: a(s, a(i, s)) };
+ }
+ getPadding() {
+ return {
+ left: this.paddingLeft || 0,
+ top: this.paddingTop || 0,
+ right: this.paddingRight || 0,
+ bottom: this.paddingBottom || 0,
+ };
+ }
+ getTicks() {
+ return this.ticks;
+ }
+ getLabels() {
+ const t = this.chart.data;
+ return this.options.labels || (this.isHorizontal() ? t.xLabels : t.yLabels) || t.labels || [];
+ }
+ beforeLayout() {
+ this._cache = {}, this._dataLimitsCached = !1;
+ }
+ beforeUpdate() {
+ c(this.options.beforeUpdate, [this]);
+ }
+ update(t, e, i) {
+ const { beginAtZero: s, grace: n, ticks: o } = this.options, a = o.sampleSize;
+ this.beforeUpdate(),
+ this.maxWidth = t,
+ this.maxHeight = e,
+ this._margins = i = Object.assign({ left: 0, right: 0, top: 0, bottom: 0 }, i),
+ this.ticks = null,
+ this._labelSizes = null,
+ this._gridLineItems = null,
+ this._labelItems = null,
+ this.beforeSetDimensions(),
+ this.setDimensions(),
+ this.afterSetDimensions(),
+ this._maxLength = this.isHorizontal() ? this.width + i.left + i.right : this.height + i.top + i.bottom,
+ this._dataLimitsCached
+ || (this.beforeDataLimits(),
+ this.determineDataLimits(),
+ this.afterDataLimits(),
+ this._range = xi(this, n, s),
+ this._dataLimitsCached = !0),
+ this.beforeBuildTicks(),
+ this.ticks = this.buildTicks() || [],
+ this.afterBuildTicks();
+ const r = a < this.ticks.length;
+ this._convertTicksToLabels(r ? Bs(this.ticks, a) : this.ticks),
+ this.configure(),
+ this.beforeCalculateLabelRotation(),
+ this.calculateLabelRotation(),
+ this.afterCalculateLabelRotation(),
+ o.display && (o.autoSkip || "auto" === o.source)
+ && (this.ticks = zs(this, this.ticks), this._labelSizes = null, this.afterAutoSkip()),
+ r && this._convertTicksToLabels(this.ticks),
+ this.beforeFit(),
+ this.fit(),
+ this.afterFit(),
+ this.afterUpdate();
+ }
+ configure() {
+ let t, e, i = this.options.reverse;
+ this.isHorizontal() ? (t = this.left, e = this.right) : (t = this.top, e = this.bottom, i = !i),
+ this._startPixel = t,
+ this._endPixel = e,
+ this._reversePixels = i,
+ this._length = e - t,
+ this._alignToPixels = this.options.alignToPixels;
+ }
+ afterUpdate() {
+ c(this.options.afterUpdate, [this]);
+ }
+ beforeSetDimensions() {
+ c(this.options.beforeSetDimensions, [this]);
+ }
+ setDimensions() {
+ this.isHorizontal()
+ ? (this.width = this.maxWidth, this.left = 0, this.right = this.width)
+ : (this.height = this.maxHeight, this.top = 0, this.bottom = this.height),
+ this.paddingLeft = 0,
+ this.paddingTop = 0,
+ this.paddingRight = 0,
+ this.paddingBottom = 0;
+ }
+ afterSetDimensions() {
+ c(this.options.afterSetDimensions, [this]);
+ }
+ _callHooks(t) {
+ this.chart.notifyPlugins(t, this.getContext()), c(this.options[t], [this]);
+ }
+ beforeDataLimits() {
+ this._callHooks("beforeDataLimits");
+ }
+ determineDataLimits() {}
+ afterDataLimits() {
+ this._callHooks("afterDataLimits");
+ }
+ beforeBuildTicks() {
+ this._callHooks("beforeBuildTicks");
+ }
+ buildTicks() {
+ return [];
+ }
+ afterBuildTicks() {
+ this._callHooks("afterBuildTicks");
+ }
+ beforeTickToLabelConversion() {
+ c(this.options.beforeTickToLabelConversion, [this]);
+ }
+ generateTickLabels(t) {
+ const e = this.options.ticks;
+ let i, s, n;
+ for (i = 0, s = t.length; i < s; i++) n = t[i], n.label = c(e.callback, [n.value, i, t], this);
+ }
+ afterTickToLabelConversion() {
+ c(this.options.afterTickToLabelConversion, [this]);
+ }
+ beforeCalculateLabelRotation() {
+ c(this.options.beforeCalculateLabelRotation, [this]);
+ }
+ calculateLabelRotation() {
+ const t = this.options, e = t.ticks, i = this.ticks.length, s = e.minRotation || 0, n = e.maxRotation;
+ let o, a, r, l = s;
+ if (!this._isVisible() || !e.display || s >= n || i <= 1 || !this.isHorizontal()) {
+ return void (this.labelRotation = s);
+ }
+ const h = this._getLabelSizes(),
+ c = h.widest.width,
+ d = h.highest.height,
+ u = Z(this.chart.width - c, 0, this.maxWidth);
+ o = t.offset ? this.maxWidth / i : u / (i - 1),
+ c + 6 > o
+ && (o = u / (i - (t.offset ? .5 : 1)),
+ a = this.maxHeight - Ws(t.grid) - e.padding - js(t.title, this.chart.options.font),
+ r = Math.sqrt(c * c + d * d),
+ l = $(
+ Math.min(
+ Math.asin(Z((h.highest.height + 6) / o, -1, 1)),
+ Math.asin(Z(a / r, -1, 1)) - Math.asin(Z(d / r, -1, 1)),
+ ),
+ ),
+ l = Math.max(s, Math.min(n, l))),
+ this.labelRotation = l;
+ }
+ afterCalculateLabelRotation() {
+ c(this.options.afterCalculateLabelRotation, [this]);
+ }
+ afterAutoSkip() {}
+ beforeFit() {
+ c(this.options.beforeFit, [this]);
+ }
+ fit() {
+ const t = { width: 0, height: 0 },
+ { chart: e, options: { ticks: i, title: s, grid: n } } = this,
+ o = this._isVisible(),
+ a = this.isHorizontal();
+ if (o) {
+ const o = js(s, e.options.font);
+ if (
+ a ? (t.width = this.maxWidth, t.height = Ws(n) + o) : (t.height = this.maxHeight, t.width = Ws(n) + o),
+ i.display && this.ticks.length
+ ) {
+ const { first: e, last: s, widest: n, highest: o } = this._getLabelSizes(),
+ r = 2 * i.padding,
+ l = H(this.labelRotation),
+ h = Math.cos(l),
+ c = Math.sin(l);
+ if (a) {
+ const e = i.mirror ? 0 : c * n.width + h * o.height;
+ t.height = Math.min(this.maxHeight, t.height + e + r);
+ } else {
+ const e = i.mirror ? 0 : h * n.width + c * o.height;
+ t.width = Math.min(this.maxWidth, t.width + e + r);
+ }
+ this._calculatePadding(e, s, c, h);
+ }
+ }
+ this._handleMargins(),
+ a
+ ? (this.width = this._length = e.width - this._margins.left - this._margins.right, this.height = t.height)
+ : (this.width = t.width, this.height = this._length = e.height - this._margins.top - this._margins.bottom);
+ }
+ _calculatePadding(t, e, i, s) {
+ const { ticks: { align: n, padding: o }, position: a } = this.options,
+ r = 0 !== this.labelRotation,
+ l = "top" !== a && "x" === this.axis;
+ if (this.isHorizontal()) {
+ const a = this.getPixelForTick(0) - this.left, h = this.right - this.getPixelForTick(this.ticks.length - 1);
+ let c = 0, d = 0;
+ r
+ ? l ? (c = s * t.width, d = i * e.height) : (c = i * t.height, d = s * e.width)
+ : "start" === n
+ ? d = e.width
+ : "end" === n
+ ? c = t.width
+ : "inner" !== n && (c = t.width / 2, d = e.width / 2),
+ this.paddingLeft = Math.max((c - a + o) * this.width / (this.width - a), 0),
+ this.paddingRight = Math.max((d - h + o) * this.width / (this.width - h), 0);
+ } else {
+ let i = e.height / 2, s = t.height / 2;
+ "start" === n ? (i = 0, s = t.height) : "end" === n && (i = e.height, s = 0),
+ this.paddingTop = i + o,
+ this.paddingBottom = s + o;
+ }
+ }
+ _handleMargins() {
+ this._margins
+ && (this._margins.left = Math.max(this.paddingLeft, this._margins.left),
+ this._margins.top = Math.max(this.paddingTop, this._margins.top),
+ this._margins.right = Math.max(this.paddingRight, this._margins.right),
+ this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom));
+ }
+ afterFit() {
+ c(this.options.afterFit, [this]);
+ }
+ isHorizontal() {
+ const { axis: t, position: e } = this.options;
+ return "top" === e || "bottom" === e || "x" === t;
+ }
+ isFullSize() {
+ return this.options.fullSize;
+ }
+ _convertTicksToLabels(t) {
+ let e, s;
+ for (this.beforeTickToLabelConversion(), this.generateTickLabels(t), e = 0, s = t.length; e < s; e++) {
+ i(t[e].label) && (t.splice(e, 1), s--, e--);
+ }
+ this.afterTickToLabelConversion();
+ }
+ _getLabelSizes() {
+ let t = this._labelSizes;
+ if (!t) {
+ const e = this.options.ticks.sampleSize;
+ let i = this.ticks;
+ e < i.length && (i = Bs(i, e)), this._labelSizes = t = this._computeLabelSizes(i, i.length);
+ }
+ return t;
+ }
+ _computeLabelSizes(t, e) {
+ const { ctx: n, _longestTextCache: o } = this, a = [], r = [];
+ let l, h, c, u, f, g, p, m, b, x, _, y = 0, v = 0;
+ for (l = 0; l < e; ++l) {
+ if (
+ u = t[l].label,
+ f = this._resolveTickFontOptions(l),
+ n.font = g = f.string,
+ p = o[g] = o[g] || { data: {}, gc: [] },
+ m = f.lineHeight,
+ b = x = 0,
+ i(u) || s(u)
+ ) {
+ if (s(u)) {
+ for (h = 0, c = u.length; h < c; ++h) _ = u[h], i(_) || s(_) || (b = _e(n, p.data, p.gc, b, _), x += m);
+ }
+ } else b = _e(n, p.data, p.gc, b, u), x = m;
+ a.push(b), r.push(x), y = Math.max(b, y), v = Math.max(x, v);
+ }
+ !function(t, e) {
+ d(t, t => {
+ const i = t.gc, s = i.length / 2;
+ let n;
+ if (s > e) {
+ for (n = 0; n < s; ++n) delete t.data[i[n]];
+ i.splice(0, s);
+ }
+ });
+ }(o, e);
+ const w = a.indexOf(y), M = r.indexOf(v), k = t => ({ width: a[t] || 0, height: r[t] || 0 });
+ return { first: k(0), last: k(e - 1), widest: k(w), highest: k(M), widths: a, heights: r };
+ }
+ getLabelForValue(t) {
+ return t;
+ }
+ getPixelForValue(t, e) {
+ return NaN;
+ }
+ getValueForPixel(t) {}
+ getPixelForTick(t) {
+ const e = this.ticks;
+ return t < 0 || t > e.length - 1 ? null : this.getPixelForValue(e[t].value);
+ }
+ getPixelForDecimal(t) {
+ this._reversePixels && (t = 1 - t);
+ const e = this._startPixel + t * this._length;
+ return J(this._alignToPixels ? ve(this.chart, e, 0) : e);
+ }
+ getDecimalForPixel(t) {
+ const e = (t - this._startPixel) / this._length;
+ return this._reversePixels ? 1 - e : e;
+ }
+ getBasePixel() {
+ return this.getPixelForValue(this.getBaseValue());
+ }
+ getBaseValue() {
+ const { min: t, max: e } = this;
+ return t < 0 && e < 0 ? e : t > 0 && e > 0 ? t : 0;
+ }
+ getContext(t) {
+ const e = this.ticks || [];
+ if (t >= 0 && t < e.length) {
+ const i = e[t];
+ return i.$context || (i.$context = function(t, e, i) {
+ return _i(t, { tick: i, index: e, type: "tick" });
+ }(this.getContext(), t, i));
+ }
+ return this.$context || (this.$context = _i(this.chart.getContext(), { scale: this, type: "scale" }));
+ }
+ _tickSize() {
+ const t = this.options.ticks,
+ e = H(this.labelRotation),
+ i = Math.abs(Math.cos(e)),
+ s = Math.abs(Math.sin(e)),
+ n = this._getLabelSizes(),
+ o = t.autoSkipPadding || 0,
+ a = n ? n.widest.width + o : 0,
+ r = n ? n.highest.height + o : 0;
+ return this.isHorizontal() ? r * i > a * s ? a / i : r / s : r * s < a * i ? r / i : a / s;
+ }
+ _isVisible() {
+ const t = this.options.display;
+ return "auto" !== t ? !!t : this.getMatchingVisibleMetas().length > 0;
+ }
+ _computeGridLineItems(t) {
+ const e = this.axis,
+ i = this.chart,
+ s = this.options,
+ { grid: o, position: a } = s,
+ l = o.offset,
+ h = this.isHorizontal(),
+ c = this.ticks.length + (l ? 1 : 0),
+ d = Ws(o),
+ u = [],
+ f = o.setContext(this.getContext()),
+ g = f.drawBorder ? f.borderWidth : 0,
+ p = g / 2,
+ m = function(t) {
+ return ve(i, t, g);
+ };
+ let b, x, _, y, v, w, M, k, S, P, D, O;
+ if ("top" === a) b = m(this.bottom), w = this.bottom - d, k = b - p, P = m(t.top) + p, O = t.bottom;
+ else if ("bottom" === a) b = m(this.top), P = t.top, O = m(t.bottom) - p, w = b + p, k = this.top + d;
+ else if ("left" === a) b = m(this.right), v = this.right - d, M = b - p, S = m(t.left) + p, D = t.right;
+ else if ("right" === a) b = m(this.left), S = t.left, D = m(t.right) - p, v = b + p, M = this.left + d;
+ else if ("x" === e) {
+ if ("center" === a) b = m((t.top + t.bottom) / 2 + .5);
+ else if (n(a)) {
+ const t = Object.keys(a)[0], e = a[t];
+ b = m(this.chart.scales[t].getPixelForValue(e));
+ }
+ P = t.top, O = t.bottom, w = b + p, k = w + d;
+ } else if ("y" === e) {
+ if ("center" === a) b = m((t.left + t.right) / 2);
+ else if (n(a)) {
+ const t = Object.keys(a)[0], e = a[t];
+ b = m(this.chart.scales[t].getPixelForValue(e));
+ }
+ v = b - p, M = v - d, S = t.left, D = t.right;
+ }
+ const C = r(s.ticks.maxTicksLimit, c), A = Math.max(1, Math.ceil(c / C));
+ for (x = 0; x < c; x += A) {
+ const t = o.setContext(this.getContext(x)),
+ e = t.lineWidth,
+ s = t.color,
+ n = t.borderDash || [],
+ a = t.borderDashOffset,
+ r = t.tickWidth,
+ c = t.tickColor,
+ d = t.tickBorderDash || [],
+ f = t.tickBorderDashOffset;
+ _ = Ns(this, x, l),
+ void 0 !== _ && (y = ve(i, _, e),
+ h
+ ? v =
+ M =
+ S =
+ D =
+ y
+ : w =
+ k =
+ P =
+ O =
+ y,
+ u.push({
+ tx1: v,
+ ty1: w,
+ tx2: M,
+ ty2: k,
+ x1: S,
+ y1: P,
+ x2: D,
+ y2: O,
+ width: e,
+ color: s,
+ borderDash: n,
+ borderDashOffset: a,
+ tickWidth: r,
+ tickColor: c,
+ tickBorderDash: d,
+ tickBorderDashOffset: f,
+ }));
+ }
+ return this._ticksLength = c, this._borderValue = b, u;
+ }
+ _computeLabelItems(t) {
+ const e = this.axis,
+ i = this.options,
+ { position: o, ticks: a } = i,
+ r = this.isHorizontal(),
+ l = this.ticks,
+ { align: h, crossAlign: c, padding: d, mirror: u } = a,
+ f = Ws(i.grid),
+ g = f + d,
+ p = u ? -d : g,
+ m = -H(this.labelRotation),
+ b = [];
+ let x, _, y, v, w, M, k, S, P, D, O, C, A = "middle";
+ if ("top" === o) M = this.bottom - p, k = this._getXAxisLabelAlignment();
+ else if ("bottom" === o) M = this.top + p, k = this._getXAxisLabelAlignment();
+ else if ("left" === o) {
+ const t = this._getYAxisLabelAlignment(f);
+ k = t.textAlign, w = t.x;
+ } else if ("right" === o) {
+ const t = this._getYAxisLabelAlignment(f);
+ k = t.textAlign, w = t.x;
+ } else if ("x" === e) {
+ if ("center" === o) M = (t.top + t.bottom) / 2 + g;
+ else if (n(o)) {
+ const t = Object.keys(o)[0], e = o[t];
+ M = this.chart.scales[t].getPixelForValue(e) + g;
+ }
+ k = this._getXAxisLabelAlignment();
+ } else if ("y" === e) {
+ if ("center" === o) w = (t.left + t.right) / 2 - g;
+ else if (n(o)) {
+ const t = Object.keys(o)[0], e = o[t];
+ w = this.chart.scales[t].getPixelForValue(e);
+ }
+ k = this._getYAxisLabelAlignment(f).textAlign;
+ }
+ "y" === e && ("start" === h ? A = "top" : "end" === h && (A = "bottom"));
+ const T = this._getLabelSizes();
+ for (x = 0, _ = l.length; x < _; ++x) {
+ y = l[x], v = y.label;
+ const t = a.setContext(this.getContext(x));
+ S = this.getPixelForTick(x) + a.labelOffset,
+ P = this._resolveTickFontOptions(x),
+ D = P.lineHeight,
+ O = s(v) ? v.length : 1;
+ const e = O / 2, i = t.color, n = t.textStrokeColor, h = t.textStrokeWidth;
+ let d, f = k;
+ if (
+ r
+ ? (w = S,
+ "inner" === k && (f = x === _ - 1
+ ? this.options.reverse ? "left" : "right"
+ : 0 === x
+ ? this.options.reverse ? "right" : "left"
+ : "center"),
+ C = "top" === o
+ ? "near" === c || 0 !== m
+ ? -O * D + D / 2
+ : "center" === c
+ ? -T.highest.height / 2 - e * D + D
+ : -T.highest.height + D / 2
+ : "near" === c || 0 !== m
+ ? D / 2
+ : "center" === c
+ ? T.highest.height / 2 - e * D
+ : T.highest.height - O * D,
+ u && (C *= -1))
+ : (M = S, C = (1 - O) * D / 2), t.showLabelBackdrop
+ ) {
+ const e = pi(t.backdropPadding), i = T.heights[x], s = T.widths[x];
+ let n = M + C - e.top, o = w - e.left;
+ switch (A) {
+ case "middle":
+ n -= i / 2;
+ break;
+ case "bottom":
+ n -= i;
+ }
+ switch (k) {
+ case "center":
+ o -= s / 2;
+ break;
+ case "right":
+ o -= s;
+ }
+ d = { left: o, top: n, width: s + e.width, height: i + e.height, color: t.backdropColor };
+ }
+ b.push({
+ rotation: m,
+ label: v,
+ font: P,
+ color: i,
+ strokeColor: n,
+ strokeWidth: h,
+ textOffset: C,
+ textAlign: f,
+ textBaseline: A,
+ translation: [w, M],
+ backdrop: d,
+ });
+ }
+ return b;
+ }
+ _getXAxisLabelAlignment() {
+ const { position: t, ticks: e } = this.options;
+ if (-H(this.labelRotation)) return "top" === t ? "left" : "right";
+ let i = "center";
+ return "start" === e.align ? i = "left" : "end" === e.align ? i = "right" : "inner" === e.align && (i = "inner"),
+ i;
+ }
+ _getYAxisLabelAlignment(t) {
+ const { position: e, ticks: { crossAlign: i, mirror: s, padding: n } } = this.options,
+ o = t + n,
+ a = this._getLabelSizes().widest.width;
+ let r, l;
+ return "left" === e
+ ? s
+ ? (l = this.right + n,
+ "near" === i ? r = "left" : "center" === i ? (r = "center", l += a / 2) : (r = "right", l += a))
+ : (l = this.right - o,
+ "near" === i ? r = "right" : "center" === i ? (r = "center", l -= a / 2) : (r = "left", l = this.left))
+ : "right" === e
+ ? s
+ ? (l = this.left + n,
+ "near" === i ? r = "right" : "center" === i ? (r = "center", l -= a / 2) : (r = "left", l -= a))
+ : (l = this.left + o,
+ "near" === i ? r = "left" : "center" === i ? (r = "center", l += a / 2) : (r = "right", l = this.right))
+ : r = "right",
+ { textAlign: r, x: l };
+ }
+ _computeLabelArea() {
+ if (this.options.ticks.mirror) return;
+ const t = this.chart, e = this.options.position;
+ return "left" === e || "right" === e
+ ? { top: 0, left: this.left, bottom: t.height, right: this.right }
+ : "top" === e || "bottom" === e
+ ? { top: this.top, left: 0, bottom: this.bottom, right: t.width }
+ : void 0;
+ }
+ drawBackground() {
+ const { ctx: t, options: { backgroundColor: e }, left: i, top: s, width: n, height: o } = this;
+ e && (t.save(), t.fillStyle = e, t.fillRect(i, s, n, o), t.restore());
+ }
+ getLineWidthForValue(t) {
+ const e = this.options.grid;
+ if (!this._isVisible() || !e.display) return 0;
+ const i = this.ticks.findIndex(e => e.value === t);
+ if (i >= 0) return e.setContext(this.getContext(i)).lineWidth;
+ return 0;
+ }
+ drawGrid(t) {
+ const e = this.options.grid,
+ i = this.ctx,
+ s = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(t));
+ let n, o;
+ const a = (t, e, s) => {
+ s.width && s.color
+ && (i.save(),
+ i.lineWidth = s.width,
+ i.strokeStyle = s.color,
+ i.setLineDash(s.borderDash || []),
+ i.lineDashOffset = s.borderDashOffset,
+ i.beginPath(),
+ i.moveTo(t.x, t.y),
+ i.lineTo(e.x, e.y),
+ i.stroke(),
+ i.restore());
+ };
+ if (e.display) {
+ for (n = 0, o = s.length; n < o; ++n) {
+ const t = s[n];
+ e.drawOnChartArea && a({ x: t.x1, y: t.y1 }, { x: t.x2, y: t.y2 }, t),
+ e.drawTicks
+ && a({ x: t.tx1, y: t.ty1 }, { x: t.tx2, y: t.ty2 }, {
+ color: t.tickColor,
+ width: t.tickWidth,
+ borderDash: t.tickBorderDash,
+ borderDashOffset: t.tickBorderDashOffset,
+ });
+ }
+ }
+ }
+ drawBorder() {
+ const { chart: t, ctx: e, options: { grid: i } } = this,
+ s = i.setContext(this.getContext()),
+ n = i.drawBorder ? s.borderWidth : 0;
+ if (!n) return;
+ const o = i.setContext(this.getContext(0)).lineWidth, a = this._borderValue;
+ let r, l, h, c;
+ this.isHorizontal()
+ ? (r = ve(t, this.left, n) - n / 2, l = ve(t, this.right, o) + o / 2, h = c = a)
+ : (h = ve(t, this.top, n) - n / 2, c = ve(t, this.bottom, o) + o / 2, r = l = a),
+ e.save(),
+ e.lineWidth = s.borderWidth,
+ e.strokeStyle = s.borderColor,
+ e.beginPath(),
+ e.moveTo(r, h),
+ e.lineTo(l, c),
+ e.stroke(),
+ e.restore();
+ }
+ drawLabels(t) {
+ if (!this.options.ticks.display) return;
+ const e = this.ctx, i = this._computeLabelArea();
+ i && Pe(e, i);
+ const s = this._labelItems || (this._labelItems = this._computeLabelItems(t));
+ let n, o;
+ for (n = 0, o = s.length; n < o; ++n) {
+ const t = s[n], i = t.font, o = t.label;
+ t.backdrop
+ && (e.fillStyle = t.backdrop.color,
+ e.fillRect(t.backdrop.left, t.backdrop.top, t.backdrop.width, t.backdrop.height)),
+ Ae(e, o, 0, t.textOffset, i, t);
+ }
+ i && De(e);
+ }
+ drawTitle() {
+ const { ctx: t, options: { position: e, title: i, reverse: o } } = this;
+ if (!i.display) return;
+ const a = mi(i.font), r = pi(i.padding), l = i.align;
+ let h = a.lineHeight / 2;
+ "bottom" === e || "center" === e || n(e)
+ ? (h += r.bottom, s(i.text) && (h += a.lineHeight * (i.text.length - 1)))
+ : h += r.top;
+ const { titleX: c, titleY: d, maxWidth: u, rotation: f } = function(t, e, i, s) {
+ const { top: o, left: a, bottom: r, right: l, chart: h } = t, { chartArea: c, scales: d } = h;
+ let u, f, g, p = 0;
+ const m = r - o, b = l - a;
+ if (t.isHorizontal()) {
+ if (f = ut(s, a, l), n(i)) {
+ const t = Object.keys(i)[0], s = i[t];
+ g = d[t].getPixelForValue(s) + m - e;
+ } else g = "center" === i ? (c.bottom + c.top) / 2 + m - e : Vs(t, i, e);
+ u = l - a;
+ } else {
+ if (n(i)) {
+ const t = Object.keys(i)[0], s = i[t];
+ f = d[t].getPixelForValue(s) - b + e;
+ } else f = "center" === i ? (c.left + c.right) / 2 - b + e : Vs(t, i, e);
+ g = ut(s, r, o), p = "left" === i ? -L : L;
+ }
+ return { titleX: f, titleY: g, maxWidth: u, rotation: p };
+ }(this, h, e, l);
+ Ae(t, i.text, 0, 0, a, {
+ color: i.color,
+ maxWidth: u,
+ rotation: f,
+ textAlign: Hs(l, e, o),
+ textBaseline: "middle",
+ translation: [c, d],
+ });
+ }
+ draw(t) {
+ this._isVisible()
+ && (this.drawBackground(), this.drawGrid(t), this.drawBorder(), this.drawTitle(), this.drawLabels(t));
+ }
+ _layers() {
+ const t = this.options, e = t.ticks && t.ticks.z || 0, i = r(t.grid && t.grid.z, -1);
+ return this._isVisible() && this.draw === $s.prototype.draw
+ ? [{
+ z: i,
+ draw: t => {
+ this.drawBackground(), this.drawGrid(t), this.drawTitle();
+ },
+ }, {
+ z: i + 1,
+ draw: () => {
+ this.drawBorder();
+ },
+ }, {
+ z: e,
+ draw: t => {
+ this.drawLabels(t);
+ },
+ }]
+ : [{
+ z: e,
+ draw: t => {
+ this.draw(t);
+ },
+ }];
+ }
+ getMatchingVisibleMetas(t) {
+ const e = this.chart.getSortedVisibleDatasetMetas(), i = this.axis + "AxisID", s = [];
+ let n, o;
+ for (n = 0, o = e.length; n < o; ++n) {
+ const o = e[n];
+ o[i] !== this.id || t && o.type !== t || s.push(o);
+ }
+ return s;
+ }
+ _resolveTickFontOptions(t) {
+ return mi(this.options.ticks.setContext(this.getContext(t)).font);
+ }
+ _maxDigits() {
+ const t = this._resolveTickFontOptions(0).lineHeight;
+ return (this.isHorizontal() ? this.width : this.height) / t;
+ }
+ }
+ class Ys {
+ constructor(t, e, i) {
+ this.type = t, this.scope = e, this.override = i, this.items = Object.create(null);
+ }
+ isForType(t) {
+ return Object.prototype.isPrototypeOf.call(this.type.prototype, t.prototype);
+ }
+ register(t) {
+ const e = Object.getPrototypeOf(t);
+ let i;
+ (function(t) {
+ return "id" in t && "defaults" in t;
+ })(e) && (i = this.register(e));
+ const s = this.items, n = t.id, o = this.scope + "." + n;
+ if (!n) throw new Error("class does not have id: " + t);
+ return n in s || (s[n] = t,
+ function(t, e, i) {
+ const s = m(Object.create(null), [i ? ne.get(i) : {}, ne.get(e), t.defaults]);
+ ne.set(e, s),
+ t.defaultRoutes && function(t, e) {
+ Object.keys(e).forEach(i => {
+ const s = i.split("."),
+ n = s.pop(),
+ o = [t].concat(s).join("."),
+ a = e[i].split("."),
+ r = a.pop(),
+ l = a.join(".");
+ ne.route(o, n, l, r);
+ });
+ }(e, t.defaultRoutes);
+ t.descriptors && ne.describe(e, t.descriptors);
+ }(t, o, i),
+ this.override && ne.override(t.id, t.overrides)),
+ o;
+ }
+ get(t) {
+ return this.items[t];
+ }
+ unregister(t) {
+ const e = this.items, i = t.id, s = this.scope;
+ i in e && delete e[i], s && i in ne[s] && (delete ne[s][i], this.override && delete te[i]);
+ }
+ }
+ var Us = new class {
+ constructor() {
+ this.controllers = new Ys(Ls, "datasets", !0),
+ this.elements = new Ys(Es, "elements"),
+ this.plugins = new Ys(Object, "plugins"),
+ this.scales = new Ys($s, "scales"),
+ this._typedRegistries = [this.controllers, this.scales, this.elements];
+ }
+ add(...t) {
+ this._each("register", t);
+ }
+ remove(...t) {
+ this._each("unregister", t);
+ }
+ addControllers(...t) {
+ this._each("register", t, this.controllers);
+ }
+ addElements(...t) {
+ this._each("register", t, this.elements);
+ }
+ addPlugins(...t) {
+ this._each("register", t, this.plugins);
+ }
+ addScales(...t) {
+ this._each("register", t, this.scales);
+ }
+ getController(t) {
+ return this._get(t, this.controllers, "controller");
+ }
+ getElement(t) {
+ return this._get(t, this.elements, "element");
+ }
+ getPlugin(t) {
+ return this._get(t, this.plugins, "plugin");
+ }
+ getScale(t) {
+ return this._get(t, this.scales, "scale");
+ }
+ removeControllers(...t) {
+ this._each("unregister", t, this.controllers);
+ }
+ removeElements(...t) {
+ this._each("unregister", t, this.elements);
+ }
+ removePlugins(...t) {
+ this._each("unregister", t, this.plugins);
+ }
+ removeScales(...t) {
+ this._each("unregister", t, this.scales);
+ }
+ _each(t, e, i) {
+ [...e].forEach(e => {
+ const s = i || this._getRegistryForType(e);
+ i || s.isForType(e) || s === this.plugins && e.id ? this._exec(t, s, e) : d(e, e => {
+ const s = i || this._getRegistryForType(e);
+ this._exec(t, s, e);
+ });
+ });
+ }
+ _exec(t, e, i) {
+ const s = w(t);
+ c(i["before" + s], [], i), e[t](i), c(i["after" + s], [], i);
+ }
+ _getRegistryForType(t) {
+ for (let e = 0; e < this._typedRegistries.length; e++) {
+ const i = this._typedRegistries[e];
+ if (i.isForType(t)) return i;
+ }
+ return this.plugins;
+ }
+ _get(t, e, i) {
+ const s = e.get(t);
+ if (void 0 === s) throw new Error("\"" + t + "\" is not a registered " + i + ".");
+ return s;
+ }
+ }();
+ class Xs {
+ constructor() {
+ this._init = [];
+ }
+ notify(t, e, i, s) {
+ "beforeInit" === e && (this._init = this._createDescriptors(t, !0), this._notify(this._init, t, "install"));
+ const n = s ? this._descriptors(t).filter(s) : this._descriptors(t), o = this._notify(n, t, e, i);
+ return "afterDestroy" === e && (this._notify(n, t, "stop"), this._notify(this._init, t, "uninstall")), o;
+ }
+ _notify(t, e, i, s) {
+ s = s || {};
+ for (const n of t) {
+ const t = n.plugin;
+ if (!1 === c(t[i], [e, s, n.options], t) && s.cancelable) return !1;
+ }
+ return !0;
+ }
+ invalidate() {
+ i(this._cache) || (this._oldCache = this._cache, this._cache = void 0);
+ }
+ _descriptors(t) {
+ if (this._cache) return this._cache;
+ const e = this._cache = this._createDescriptors(t);
+ return this._notifyStateChanges(t), e;
+ }
+ _createDescriptors(t, e) {
+ const i = t && t.config,
+ s = r(i.options && i.options.plugins, {}),
+ n = function(t) {
+ const e = {}, i = [], s = Object.keys(Us.plugins.items);
+ for (let t = 0; t < s.length; t++) i.push(Us.getPlugin(s[t]));
+ const n = t.plugins || [];
+ for (let t = 0; t < n.length; t++) {
+ const s = n[t];
+ -1 === i.indexOf(s) && (i.push(s), e[s.id] = !0);
+ }
+ return { plugins: i, localIds: e };
+ }(i);
+ return !1 !== s || e
+ ? function(t, { plugins: e, localIds: i }, s, n) {
+ const o = [], a = t.getContext();
+ for (const r of e) {
+ const e = r.id, l = qs(s[e], n);
+ null !== l && o.push({ plugin: r, options: Ks(t.config, { plugin: r, local: i[e] }, l, a) });
+ }
+ return o;
+ }(t, n, s, e)
+ : [];
+ }
+ _notifyStateChanges(t) {
+ const e = this._oldCache || [],
+ i = this._cache,
+ s = (t, e) => t.filter(t => !e.some(e => t.plugin.id === e.plugin.id));
+ this._notify(s(e, i), t, "stop"), this._notify(s(i, e), t, "start");
+ }
+ }
+ function qs(t, e) {
+ return e || !1 !== t ? !0 === t ? {} : t : null;
+ }
+ function Ks(t, { plugin: e, local: i }, s, n) {
+ const o = t.pluginScopeKeys(e), a = t.getOptionScopes(s, o);
+ return i && e.defaults && a.push(e.defaults),
+ t.createResolver(a, n, [""], { scriptable: !1, indexable: !1, allKeys: !0 });
+ }
+ function Gs(t, e) {
+ const i = ne.datasets[t] || {};
+ return ((e.datasets || {})[t] || {}).indexAxis || e.indexAxis || i.indexAxis || "x";
+ }
+ function Zs(t, e) {
+ return "x" === t || "y" === t
+ ? t
+ : e.axis || ("top" === (i = e.position) || "bottom" === i ? "x" : "left" === i || "right" === i ? "y" : void 0)
+ || t.charAt(0).toLowerCase();
+ var i;
+ }
+ function Js(t) {
+ const e = t.options || (t.options = {});
+ e.plugins = r(e.plugins, {}),
+ e.scales = function(t, e) {
+ const i = te[t.type] || { scales: {} },
+ s = e.scales || {},
+ o = Gs(t.type, e),
+ a = Object.create(null),
+ r = Object.create(null);
+ return Object.keys(s).forEach(t => {
+ const e = s[t];
+ if (!n(e)) return console.error(`Invalid scale configuration for scale: ${t}`);
+ if (e._proxy) return console.warn(`Ignoring resolver passed as options for scale: ${t}`);
+ const l = Zs(t, e),
+ h = function(t, e) {
+ return t === e ? "_index_" : "_value_";
+ }(l, o),
+ c = i.scales || {};
+ a[l] = a[l] || t, r[t] = b(Object.create(null), [{ axis: l }, e, c[l], c[h]]);
+ }),
+ t.data.datasets.forEach(i => {
+ const n = i.type || t.type, o = i.indexAxis || Gs(n, e), l = (te[n] || {}).scales || {};
+ Object.keys(l).forEach(t => {
+ const e = function(t, e) {
+ let i = t;
+ return "_index_" === t ? i = e : "_value_" === t && (i = "x" === e ? "y" : "x"), i;
+ }(t, o),
+ n = i[e + "AxisID"] || a[e] || e;
+ r[n] = r[n] || Object.create(null), b(r[n], [{ axis: e }, s[n], l[t]]);
+ });
+ }),
+ Object.keys(r).forEach(t => {
+ const e = r[t];
+ b(e, [ne.scales[e.type], ne.scale]);
+ }),
+ r;
+ }(t, e);
+ }
+ function Qs(t) {
+ return (t = t || {}).datasets = t.datasets || [], t.labels = t.labels || [], t;
+ }
+ const tn = new Map(), en = new Set();
+ function sn(t, e) {
+ let i = tn.get(t);
+ return i || (i = e(), tn.set(t, i), en.add(i)), i;
+ }
+ const nn = (t, e, i) => {
+ const s = y(e, i);
+ void 0 !== s && t.add(s);
+ };
+ class on {
+ constructor(t) {
+ this._config = function(t) {
+ return (t = t || {}).data = Qs(t.data), Js(t), t;
+ }(t),
+ this._scopeCache = new Map(),
+ this._resolverCache = new Map();
+ }
+ get platform() {
+ return this._config.platform;
+ }
+ get type() {
+ return this._config.type;
+ }
+ set type(t) {
+ this._config.type = t;
+ }
+ get data() {
+ return this._config.data;
+ }
+ set data(t) {
+ this._config.data = Qs(t);
+ }
+ get options() {
+ return this._config.options;
+ }
+ set options(t) {
+ this._config.options = t;
+ }
+ get plugins() {
+ return this._config.plugins;
+ }
+ update() {
+ const t = this._config;
+ this.clearCache(), Js(t);
+ }
+ clearCache() {
+ this._scopeCache.clear(), this._resolverCache.clear();
+ }
+ datasetScopeKeys(t) {
+ return sn(t, () => [[`datasets.${t}`, ""]]);
+ }
+ datasetAnimationScopeKeys(t, e) {
+ return sn(
+ `${t}.transition.${e}`,
+ () => [[`datasets.${t}.transitions.${e}`, `transitions.${e}`], [`datasets.${t}`, ""]],
+ );
+ }
+ datasetElementScopeKeys(t, e) {
+ return sn(`${t}-${e}`, () => [[`datasets.${t}.elements.${e}`, `datasets.${t}`, `elements.${e}`, ""]]);
+ }
+ pluginScopeKeys(t) {
+ const e = t.id;
+ return sn(`${this.type}-plugin-${e}`, () => [[`plugins.${e}`, ...t.additionalOptionScopes || []]]);
+ }
+ _cachedScopes(t, e) {
+ const i = this._scopeCache;
+ let s = i.get(t);
+ return s && !e || (s = new Map(), i.set(t, s)), s;
+ }
+ getOptionScopes(t, e, i) {
+ const { options: s, type: n } = this, o = this._cachedScopes(t, i), a = o.get(e);
+ if (a) return a;
+ const r = new Set();
+ e.forEach(e => {
+ t && (r.add(t), e.forEach(e => nn(r, t, e))),
+ e.forEach(t => nn(r, s, t)),
+ e.forEach(t => nn(r, te[n] || {}, t)),
+ e.forEach(t => nn(r, ne, t)),
+ e.forEach(t => nn(r, ee, t));
+ });
+ const l = Array.from(r);
+ return 0 === l.length && l.push(Object.create(null)), en.has(e) && o.set(e, l), l;
+ }
+ chartOptionScopes() {
+ const { options: t, type: e } = this;
+ return [t, te[e] || {}, ne.datasets[e] || {}, { type: e }, ne, ee];
+ }
+ resolveNamedOptions(t, e, i, n = [""]) {
+ const o = { $shared: !0 }, { resolver: a, subPrefixes: r } = an(this._resolverCache, t, n);
+ let l = a;
+ if (
+ function(t, e) {
+ const { isScriptable: i, isIndexable: n } = Ie(t);
+ for (const o of e) {
+ const e = i(o), a = n(o), r = (a || e) && t[o];
+ if (e && (k(r) || rn(r)) || a && s(r)) return !0;
+ }
+ return !1;
+ }(a, e)
+ ) {
+ o.$shared = !1;
+ l = Re(a, i = k(i) ? i() : i, this.createResolver(t, i, r));
+ }
+ for (const t of e) o[t] = l[t];
+ return o;
+ }
+ createResolver(t, e, i = [""], s) {
+ const { resolver: o } = an(this._resolverCache, t, i);
+ return n(e) ? Re(o, e, void 0, s) : o;
+ }
+ }
+ function an(t, e, i) {
+ let s = t.get(e);
+ s || (s = new Map(), t.set(e, s));
+ const n = i.join();
+ let o = s.get(n);
+ if (!o) o = { resolver: Ee(e, i), subPrefixes: i.filter(t => !t.toLowerCase().includes("hover")) }, s.set(n, o);
+ return o;
+ }
+ const rn = t => n(t) && Object.getOwnPropertyNames(t).reduce((e, i) => e || k(t[i]), !1);
+ const ln = ["top", "bottom", "left", "right", "chartArea"];
+ function hn(t, e) {
+ return "top" === t || "bottom" === t || -1 === ln.indexOf(t) && "x" === e;
+ }
+ function cn(t, e) {
+ return function(i, s) {
+ return i[t] === s[t] ? i[e] - s[e] : i[t] - s[t];
+ };
+ }
+ function dn(t) {
+ const e = t.chart, i = e.options.animation;
+ e.notifyPlugins("afterRender"), c(i && i.onComplete, [t], e);
+ }
+ function un(t) {
+ const e = t.chart, i = e.options.animation;
+ c(i && i.onProgress, [t], e);
+ }
+ function fn(t) {
+ return oe() && "string" == typeof t ? t = document.getElementById(t) : t && t.length && (t = t[0]),
+ t && t.canvas && (t = t.canvas),
+ t;
+ }
+ const gn = {},
+ pn = t => {
+ const e = fn(t);
+ return Object.values(gn).filter(t => t.canvas === e).pop();
+ };
+ function mn(t, e, i) {
+ const s = Object.keys(t);
+ for (const n of s) {
+ const s = +n;
+ if (s >= e) {
+ const o = t[n];
+ delete t[n], (i > 0 || s > e) && (t[s + i] = o);
+ }
+ }
+ }
+ class bn {
+ constructor(t, i) {
+ const s = this.config = new on(i), n = fn(t), o = pn(n);
+ if (o) {
+ throw new Error(
+ "Canvas is already in use. Chart with ID '" + o.id + "' must be destroyed before the canvas with ID '"
+ + o.canvas.id + "' can be reused.",
+ );
+ }
+ const a = s.createResolver(s.chartOptionScopes(), this.getContext());
+ this.platform = new (s.platform || gs(n))(), this.platform.updateConfig(s);
+ const r = this.platform.acquireContext(n, a.aspectRatio), l = r && r.canvas, h = l && l.height, c = l && l.width;
+ this.id = e(),
+ this.ctx = r,
+ this.canvas = l,
+ this.width = c,
+ this.height = h,
+ this._options = a,
+ this._aspectRatio = this.aspectRatio,
+ this._layers = [],
+ this._metasets = [],
+ this._stacks = void 0,
+ this.boxes = [],
+ this.currentDevicePixelRatio = void 0,
+ this.chartArea = void 0,
+ this._active = [],
+ this._lastEvent = void 0,
+ this._listeners = {},
+ this._responsiveListeners = void 0,
+ this._sortedMetasets = [],
+ this.scales = {},
+ this._plugins = new Xs(),
+ this.$proxies = {},
+ this._hiddenIndices = {},
+ this.attached = !1,
+ this._animationsDisabled = void 0,
+ this.$context = void 0,
+ this._doResize = ct(t => this.update(t), a.resizeDelay || 0),
+ this._dataChanges = [],
+ gn[this.id] = this,
+ r && l
+ ? (mt.listen(this, "complete", dn),
+ mt.listen(this, "progress", un),
+ this._initialize(),
+ this.attached && this.update())
+ : console.error("Failed to create chart: can't acquire context from the given item");
+ }
+ get aspectRatio() {
+ const { options: { aspectRatio: t, maintainAspectRatio: e }, width: s, height: n, _aspectRatio: o } = this;
+ return i(t) ? e && o ? o : n ? s / n : null : t;
+ }
+ get data() {
+ return this.config.data;
+ }
+ set data(t) {
+ this.config.data = t;
+ }
+ get options() {
+ return this._options;
+ }
+ set options(t) {
+ this.config.options = t;
+ }
+ _initialize() {
+ return this.notifyPlugins("beforeInit"),
+ this.options.responsive ? this.resize() : pe(this, this.options.devicePixelRatio),
+ this.bindEvents(),
+ this.notifyPlugins("afterInit"),
+ this;
+ }
+ clear() {
+ return we(this.canvas, this.ctx), this;
+ }
+ stop() {
+ return mt.stop(this), this;
+ }
+ resize(t, e) {
+ mt.running(this) ? this._resizeBeforeDraw = { width: t, height: e } : this._resize(t, e);
+ }
+ _resize(t, e) {
+ const i = this.options,
+ s = this.canvas,
+ n = i.maintainAspectRatio && this.aspectRatio,
+ o = this.platform.getMaximumSize(s, t, e, n),
+ a = i.devicePixelRatio || this.platform.getDevicePixelRatio(),
+ r = this.width ? "resize" : "attach";
+ this.width = o.width,
+ this.height = o.height,
+ this._aspectRatio = this.aspectRatio,
+ pe(this, a, !0)
+ && (this.notifyPlugins("resize", { size: o }),
+ c(i.onResize, [this, o], this),
+ this.attached && this._doResize(r) && this.render());
+ }
+ ensureScalesHaveIDs() {
+ d(this.options.scales || {}, (t, e) => {
+ t.id = e;
+ });
+ }
+ buildOrUpdateScales() {
+ const t = this.options, e = t.scales, i = this.scales, s = Object.keys(i).reduce((t, e) => (t[e] = !1, t), {});
+ let n = [];
+ e && (n = n.concat(
+ Object.keys(e).map(t => {
+ const i = e[t], s = Zs(t, i), n = "r" === s, o = "x" === s;
+ return {
+ options: i,
+ dposition: n ? "chartArea" : o ? "bottom" : "left",
+ dtype: n ? "radialLinear" : o ? "category" : "linear",
+ };
+ }),
+ )),
+ d(n, e => {
+ const n = e.options, o = n.id, a = Zs(o, n), l = r(n.type, e.dtype);
+ void 0 !== n.position && hn(n.position, a) === hn(e.dposition) || (n.position = e.dposition), s[o] = !0;
+ let h = null;
+ if (o in i && i[o].type === l) h = i[o];
+ else h = new (Us.getScale(l))({ id: o, type: l, ctx: this.ctx, chart: this }), i[h.id] = h;
+ h.init(n, t);
+ }),
+ d(s, (t, e) => {
+ t || delete i[e];
+ }),
+ d(i, t => {
+ Zi.configure(this, t, t.options), Zi.addBox(this, t);
+ });
+ }
+ _updateMetasets() {
+ const t = this._metasets, e = this.data.datasets.length, i = t.length;
+ if (t.sort((t, e) => t.index - e.index), i > e) {
+ for (let t = e; t < i; ++t) this._destroyDatasetMeta(t);
+ t.splice(e, i - e);
+ }
+ this._sortedMetasets = t.slice(0).sort(cn("order", "index"));
+ }
+ _removeUnreferencedMetasets() {
+ const { _metasets: t, data: { datasets: e } } = this;
+ t.length > e.length && delete this._stacks,
+ t.forEach((t, i) => {
+ 0 === e.filter(e => e === t._dataset).length && this._destroyDatasetMeta(i);
+ });
+ }
+ buildOrUpdateControllers() {
+ const t = [], e = this.data.datasets;
+ let i, s;
+ for (this._removeUnreferencedMetasets(), i = 0, s = e.length; i < s; i++) {
+ const s = e[i];
+ let n = this.getDatasetMeta(i);
+ const o = s.type || this.config.type;
+ if (
+ n.type && n.type !== o && (this._destroyDatasetMeta(i), n = this.getDatasetMeta(i)),
+ n.type = o,
+ n.indexAxis = s.indexAxis || Gs(o, this.options),
+ n.order = s.order || 0,
+ n.index = i,
+ n.label = "" + s.label,
+ n.visible = this.isDatasetVisible(i),
+ n.controller
+ ) n.controller.updateIndex(i), n.controller.linkScales();
+ else {
+ const e = Us.getController(o), { datasetElementType: s, dataElementType: a } = ne.datasets[o];
+ Object.assign(e.prototype, { dataElementType: Us.getElement(a), datasetElementType: s && Us.getElement(s) }),
+ n.controller = new e(this, i),
+ t.push(n.controller);
+ }
+ }
+ return this._updateMetasets(), t;
+ }
+ _resetElements() {
+ d(this.data.datasets, (t, e) => {
+ this.getDatasetMeta(e).controller.reset();
+ }, this);
+ }
+ reset() {
+ this._resetElements(), this.notifyPlugins("reset");
+ }
+ update(t) {
+ const e = this.config;
+ e.update();
+ const i = this._options = e.createResolver(e.chartOptionScopes(), this.getContext()),
+ s = this._animationsDisabled = !i.animation;
+ if (
+ this._updateScales(),
+ this._checkEventBindings(),
+ this._updateHiddenIndices(),
+ this._plugins.invalidate(),
+ !1 === this.notifyPlugins("beforeUpdate", { mode: t, cancelable: !0 })
+ ) return;
+ const n = this.buildOrUpdateControllers();
+ this.notifyPlugins("beforeElementsUpdate");
+ let o = 0;
+ for (let t = 0, e = this.data.datasets.length; t < e; t++) {
+ const { controller: e } = this.getDatasetMeta(t), i = !s && -1 === n.indexOf(e);
+ e.buildOrUpdateElements(i), o = Math.max(+e.getMaxOverflow(), o);
+ }
+ o = this._minPadding = i.layout.autoPadding ? o : 0,
+ this._updateLayout(o),
+ s || d(n, t => {
+ t.reset();
+ }),
+ this._updateDatasets(t),
+ this.notifyPlugins("afterUpdate", { mode: t }),
+ this._layers.sort(cn("z", "_idx"));
+ const { _active: a, _lastEvent: r } = this;
+ r ? this._eventHandler(r, !0) : a.length && this._updateHoverStyles(a, a, !0), this.render();
+ }
+ _updateScales() {
+ d(this.scales, t => {
+ Zi.removeBox(this, t);
+ }),
+ this.ensureScalesHaveIDs(),
+ this.buildOrUpdateScales();
+ }
+ _checkEventBindings() {
+ const t = this.options, e = new Set(Object.keys(this._listeners)), i = new Set(t.events);
+ S(e, i) && !!this._responsiveListeners === t.responsive || (this.unbindEvents(), this.bindEvents());
+ }
+ _updateHiddenIndices() {
+ const { _hiddenIndices: t } = this, e = this._getUniformDataChanges() || [];
+ for (const { method: i, start: s, count: n } of e) mn(t, s, "_removeElements" === i ? -n : n);
+ }
+ _getUniformDataChanges() {
+ const t = this._dataChanges;
+ if (!t || !t.length) return;
+ this._dataChanges = [];
+ const e = this.data.datasets.length,
+ i = e => new Set(t.filter(t => t[0] === e).map((t, e) => e + "," + t.splice(1).join(","))),
+ s = i(0);
+ for (let t = 1; t < e; t++) if (!S(s, i(t))) return;
+ return Array.from(s).map(t => t.split(",")).map(t => ({ method: t[1], start: +t[2], count: +t[3] }));
+ }
+ _updateLayout(t) {
+ if (!1 === this.notifyPlugins("beforeLayout", { cancelable: !0 })) return;
+ Zi.update(this, this.width, this.height, t);
+ const e = this.chartArea, i = e.width <= 0 || e.height <= 0;
+ this._layers = [],
+ d(this.boxes, t => {
+ i && "chartArea" === t.position || (t.configure && t.configure(), this._layers.push(...t._layers()));
+ }, this),
+ this._layers.forEach((t, e) => {
+ t._idx = e;
+ }),
+ this.notifyPlugins("afterLayout");
+ }
+ _updateDatasets(t) {
+ if (!1 !== this.notifyPlugins("beforeDatasetsUpdate", { mode: t, cancelable: !0 })) {
+ for (let t = 0, e = this.data.datasets.length; t < e; ++t) this.getDatasetMeta(t).controller.configure();
+ for (let e = 0, i = this.data.datasets.length; e < i; ++e) {
+ this._updateDataset(e, k(t) ? t({ datasetIndex: e }) : t);
+ }
+ this.notifyPlugins("afterDatasetsUpdate", { mode: t });
+ }
+ }
+ _updateDataset(t, e) {
+ const i = this.getDatasetMeta(t), s = { meta: i, index: t, mode: e, cancelable: !0 };
+ !1 !== this.notifyPlugins("beforeDatasetUpdate", s)
+ && (i.controller._update(e), s.cancelable = !1, this.notifyPlugins("afterDatasetUpdate", s));
+ }
+ render() {
+ !1 !== this.notifyPlugins("beforeRender", { cancelable: !0 })
+ && (mt.has(this) ? this.attached && !mt.running(this) && mt.start(this) : (this.draw(), dn({ chart: this })));
+ }
+ draw() {
+ let t;
+ if (this._resizeBeforeDraw) {
+ const { width: t, height: e } = this._resizeBeforeDraw;
+ this._resize(t, e), this._resizeBeforeDraw = null;
+ }
+ if (this.clear(), this.width <= 0 || this.height <= 0) return;
+ if (!1 === this.notifyPlugins("beforeDraw", { cancelable: !0 })) return;
+ const e = this._layers;
+ for (t = 0; t < e.length && e[t].z <= 0; ++t) e[t].draw(this.chartArea);
+ for (this._drawDatasets(); t < e.length; ++t) e[t].draw(this.chartArea);
+ this.notifyPlugins("afterDraw");
+ }
+ _getSortedDatasetMetas(t) {
+ const e = this._sortedMetasets, i = [];
+ let s, n;
+ for (s = 0, n = e.length; s < n; ++s) {
+ const n = e[s];
+ t && !n.visible || i.push(n);
+ }
+ return i;
+ }
+ getSortedVisibleDatasetMetas() {
+ return this._getSortedDatasetMetas(!0);
+ }
+ _drawDatasets() {
+ if (!1 === this.notifyPlugins("beforeDatasetsDraw", { cancelable: !0 })) return;
+ const t = this.getSortedVisibleDatasetMetas();
+ for (let e = t.length - 1; e >= 0; --e) this._drawDataset(t[e]);
+ this.notifyPlugins("afterDatasetsDraw");
+ }
+ _drawDataset(t) {
+ const e = this.ctx,
+ i = t._clip,
+ s = !i.disabled,
+ n = this.chartArea,
+ o = { meta: t, index: t.index, cancelable: !0 };
+ !1 !== this.notifyPlugins("beforeDatasetDraw", o)
+ && (s
+ && Pe(e, {
+ left: !1 === i.left ? 0 : n.left - i.left,
+ right: !1 === i.right ? this.width : n.right + i.right,
+ top: !1 === i.top ? 0 : n.top - i.top,
+ bottom: !1 === i.bottom ? this.height : n.bottom + i.bottom,
+ }),
+ t.controller.draw(),
+ s && De(e),
+ o.cancelable = !1,
+ this.notifyPlugins("afterDatasetDraw", o));
+ }
+ isPointInArea(t) {
+ return Se(t, this.chartArea, this._minPadding);
+ }
+ getElementsAtEventForMode(t, e, i, s) {
+ const n = Vi.modes[e];
+ return "function" == typeof n ? n(this, t, i, s) : [];
+ }
+ getDatasetMeta(t) {
+ const e = this.data.datasets[t], i = this._metasets;
+ let s = i.filter(t => t && t._dataset === e).pop();
+ return s
+ || (s = {
+ type: null,
+ data: [],
+ dataset: null,
+ controller: null,
+ hidden: null,
+ xAxisID: null,
+ yAxisID: null,
+ order: e && e.order || 0,
+ index: t,
+ _dataset: e,
+ _parsed: [],
+ _sorted: !1,
+ },
+ i.push(s)),
+ s;
+ }
+ getContext() {
+ return this.$context || (this.$context = _i(null, { chart: this, type: "chart" }));
+ }
+ getVisibleDatasetCount() {
+ return this.getSortedVisibleDatasetMetas().length;
+ }
+ isDatasetVisible(t) {
+ const e = this.data.datasets[t];
+ if (!e) return !1;
+ const i = this.getDatasetMeta(t);
+ return "boolean" == typeof i.hidden ? !i.hidden : !e.hidden;
+ }
+ setDatasetVisibility(t, e) {
+ this.getDatasetMeta(t).hidden = !e;
+ }
+ toggleDataVisibility(t) {
+ this._hiddenIndices[t] = !this._hiddenIndices[t];
+ }
+ getDataVisibility(t) {
+ return !this._hiddenIndices[t];
+ }
+ _updateVisibility(t, e, i) {
+ const s = i ? "show" : "hide", n = this.getDatasetMeta(t), o = n.controller._resolveAnimations(void 0, s);
+ M(e)
+ ? (n.data[e].hidden = !i, this.update())
+ : (this.setDatasetVisibility(t, i),
+ o.update(n, { visible: i }),
+ this.update(e => e.datasetIndex === t ? s : void 0));
+ }
+ hide(t, e) {
+ this._updateVisibility(t, e, !1);
+ }
+ show(t, e) {
+ this._updateVisibility(t, e, !0);
+ }
+ _destroyDatasetMeta(t) {
+ const e = this._metasets[t];
+ e && e.controller && e.controller._destroy(), delete this._metasets[t];
+ }
+ _stop() {
+ let t, e;
+ for (this.stop(), mt.remove(this), t = 0, e = this.data.datasets.length; t < e; ++t) this._destroyDatasetMeta(t);
+ }
+ destroy() {
+ this.notifyPlugins("beforeDestroy");
+ const { canvas: t, ctx: e } = this;
+ this._stop(),
+ this.config.clearCache(),
+ t && (this.unbindEvents(), we(t, e), this.platform.releaseContext(e), this.canvas = null, this.ctx = null),
+ this.notifyPlugins("destroy"),
+ delete gn[this.id],
+ this.notifyPlugins("afterDestroy");
+ }
+ toBase64Image(...t) {
+ return this.canvas.toDataURL(...t);
+ }
+ bindEvents() {
+ this.bindUserEvents(), this.options.responsive ? this.bindResponsiveEvents() : this.attached = !0;
+ }
+ bindUserEvents() {
+ const t = this._listeners,
+ e = this.platform,
+ i = (i, s) => {
+ e.addEventListener(this, i, s), t[i] = s;
+ },
+ s = (t, e, i) => {
+ t.offsetX = e, t.offsetY = i, this._eventHandler(t);
+ };
+ d(this.options.events, t => i(t, s));
+ }
+ bindResponsiveEvents() {
+ this._responsiveListeners || (this._responsiveListeners = {});
+ const t = this._responsiveListeners,
+ e = this.platform,
+ i = (i, s) => {
+ e.addEventListener(this, i, s), t[i] = s;
+ },
+ s = (i, s) => {
+ t[i] && (e.removeEventListener(this, i, s), delete t[i]);
+ },
+ n = (t, e) => {
+ this.canvas && this.resize(t, e);
+ };
+ let o;
+ const a = () => {
+ s("attach", a), this.attached = !0, this.resize(), i("resize", n), i("detach", o);
+ };
+ o = () => {
+ this.attached = !1, s("resize", n), this._stop(), this._resize(0, 0), i("attach", a);
+ }, e.isAttached(this.canvas) ? a() : o();
+ }
+ unbindEvents() {
+ d(this._listeners, (t, e) => {
+ this.platform.removeEventListener(this, e, t);
+ }),
+ this._listeners = {},
+ d(this._responsiveListeners, (t, e) => {
+ this.platform.removeEventListener(this, e, t);
+ }),
+ this._responsiveListeners = void 0;
+ }
+ updateHoverStyle(t, e, i) {
+ const s = i ? "set" : "remove";
+ let n, o, a, r;
+ for (
+ "dataset" === e && (n = this.getDatasetMeta(t[0].datasetIndex), n.controller["_" + s + "DatasetHoverStyle"]()),
+ a = 0,
+ r = t.length;
+ a < r;
+ ++a
+ ) {
+ o = t[a];
+ const e = o && this.getDatasetMeta(o.datasetIndex).controller;
+ e && e[s + "HoverStyle"](o.element, o.datasetIndex, o.index);
+ }
+ }
+ getActiveElements() {
+ return this._active || [];
+ }
+ setActiveElements(t) {
+ const e = this._active || [],
+ i = t.map(({ datasetIndex: t, index: e }) => {
+ const i = this.getDatasetMeta(t);
+ if (!i) throw new Error("No dataset found at index " + t);
+ return { datasetIndex: t, element: i.data[e], index: e };
+ });
+ !u(i, e) && (this._active = i, this._lastEvent = null, this._updateHoverStyles(i, e));
+ }
+ notifyPlugins(t, e, i) {
+ return this._plugins.notify(this, t, e, i);
+ }
+ _updateHoverStyles(t, e, i) {
+ const s = this.options.hover,
+ n = (t, e) => t.filter(t => !e.some(e => t.datasetIndex === e.datasetIndex && t.index === e.index)),
+ o = n(e, t),
+ a = i ? t : n(t, e);
+ o.length && this.updateHoverStyle(o, s.mode, !1), a.length && s.mode && this.updateHoverStyle(a, s.mode, !0);
+ }
+ _eventHandler(t, e) {
+ const i = { event: t, replay: e, cancelable: !0, inChartArea: this.isPointInArea(t) },
+ s = e => (e.options.events || this.options.events).includes(t.native.type);
+ if (!1 === this.notifyPlugins("beforeEvent", i, s)) return;
+ const n = this._handleEvent(t, e, i.inChartArea);
+ return i.cancelable = !1, this.notifyPlugins("afterEvent", i, s), (n || i.changed) && this.render(), this;
+ }
+ _handleEvent(t, e, i) {
+ const { _active: s = [], options: n } = this,
+ o = e,
+ a = this._getActiveElements(t, s, i, o),
+ r = P(t),
+ l = function(t, e, i, s) {
+ return i && "mouseout" !== t.type ? s ? e : t : null;
+ }(t, this._lastEvent, i, r);
+ i && (this._lastEvent = null, c(n.onHover, [t, a, this], this), r && c(n.onClick, [t, a, this], this));
+ const h = !u(a, s);
+ return (h || e) && (this._active = a, this._updateHoverStyles(a, s, e)), this._lastEvent = l, h;
+ }
+ _getActiveElements(t, e, i, s) {
+ if ("mouseout" === t.type) return [];
+ if (!i) return e;
+ const n = this.options.hover;
+ return this.getElementsAtEventForMode(t, n.mode, n, s);
+ }
+ }
+ const xn = () => d(bn.instances, t => t._plugins.invalidate()), _n = !0;
+ function yn() {
+ throw new Error("This method is not implemented: Check that a complete date adapter is provided.");
+ }
+ Object.defineProperties(bn, {
+ defaults: { enumerable: _n, value: ne },
+ instances: { enumerable: _n, value: gn },
+ overrides: { enumerable: _n, value: te },
+ registry: { enumerable: _n, value: Us },
+ version: { enumerable: _n, value: "3.9.0" },
+ getChart: { enumerable: _n, value: pn },
+ register: {
+ enumerable: _n,
+ value: (...t) => {
+ Us.add(...t), xn();
+ },
+ },
+ unregister: {
+ enumerable: _n,
+ value: (...t) => {
+ Us.remove(...t), xn();
+ },
+ },
+ });
+ class vn {
+ constructor(t) {
+ this.options = t || {};
+ }
+ init(t) {}
+ formats() {
+ return yn();
+ }
+ parse(t, e) {
+ return yn();
+ }
+ format(t, e) {
+ return yn();
+ }
+ add(t, e, i) {
+ return yn();
+ }
+ diff(t, e, i) {
+ return yn();
+ }
+ startOf(t, e, i) {
+ return yn();
+ }
+ endOf(t, e) {
+ return yn();
+ }
+ }
+ vn.override = function(t) {
+ Object.assign(vn.prototype, t);
+ };
+ var wn = { _date: vn };
+ function Mn(t) {
+ const e = t.iScale,
+ i = function(t, e) {
+ if (!t._cache.$bar) {
+ const i = t.getMatchingVisibleMetas(e);
+ let s = [];
+ for (let e = 0, n = i.length; e < n; e++) s = s.concat(i[e].controller.getAllParsedValues(t));
+ t._cache.$bar = rt(s.sort((t, e) => t - e));
+ }
+ return t._cache.$bar;
+ }(e, t.type);
+ let s, n, o, a, r = e._length;
+ const l = () => {
+ 32767 !== o && -32768 !== o && (M(a) && (r = Math.min(r, Math.abs(o - a) || r)), a = o);
+ };
+ for (s = 0, n = i.length; s < n; ++s) o = e.getPixelForValue(i[s]), l();
+ for (a = void 0, s = 0, n = e.ticks.length; s < n; ++s) o = e.getPixelForTick(s), l();
+ return r;
+ }
+ function kn(t, e, i, n) {
+ return s(t)
+ ? function(t, e, i, s) {
+ const n = i.parse(t[0], s), o = i.parse(t[1], s), a = Math.min(n, o), r = Math.max(n, o);
+ let l = a, h = r;
+ Math.abs(a) > Math.abs(r) && (l = r, h = a),
+ e[i.axis] = h,
+ e._custom = { barStart: l, barEnd: h, start: n, end: o, min: a, max: r };
+ }(t, e, i, n)
+ : e[i.axis] = i.parse(t, n),
+ e;
+ }
+ function Sn(t, e, i, s) {
+ const n = t.iScale, o = t.vScale, a = n.getLabels(), r = n === o, l = [];
+ let h, c, d, u;
+ for (h = i, c = i + s; h < c; ++h) u = e[h], d = {}, d[n.axis] = r || n.parse(a[h], h), l.push(kn(u, d, o, h));
+ return l;
+ }
+ function Pn(t) {
+ return t && void 0 !== t.barStart && void 0 !== t.barEnd;
+ }
+ function Dn(t, e, i, s) {
+ let n = e.borderSkipped;
+ const o = {};
+ if (!n) return void (t.borderSkipped = o);
+ if (!0 === n) return void (t.borderSkipped = { top: !0, right: !0, bottom: !0, left: !0 });
+ const { start: a, end: r, reverse: l, top: h, bottom: c } = function(t) {
+ let e, i, s, n, o;
+ return t.horizontal ? (e = t.base > t.x, i = "left", s = "right") : (e = t.base < t.y, i = "bottom", s = "top"),
+ e ? (n = "end", o = "start") : (n = "start", o = "end"),
+ { start: i, end: s, reverse: e, top: n, bottom: o };
+ }(t);
+ "middle" === n && i
+ && (t.enableBorderRadius = !0,
+ (i._top || 0) === s ? n = h : (i._bottom || 0) === s ? n = c : (o[On(c, a, r, l)] = !0, n = h)),
+ o[On(n, a, r, l)] = !0,
+ t.borderSkipped = o;
+ }
+ function On(t, e, i, s) {
+ var n, o, a;
+ return s ? (a = i, t = Cn(t = (n = t) === (o = e) ? a : n === a ? o : n, i, e)) : t = Cn(t, e, i), t;
+ }
+ function Cn(t, e, i) {
+ return "start" === t ? e : "end" === t ? i : t;
+ }
+ function An(t, { inflateAmount: e }, i) {
+ t.inflateAmount = "auto" === e ? 1 === i ? .33 : 0 : e;
+ }
+ class Tn extends Ls {
+ parsePrimitiveData(t, e, i, s) {
+ return Sn(t, e, i, s);
+ }
+ parseArrayData(t, e, i, s) {
+ return Sn(t, e, i, s);
+ }
+ parseObjectData(t, e, i, s) {
+ const { iScale: n, vScale: o } = t,
+ { xAxisKey: a = "x", yAxisKey: r = "y" } = this._parsing,
+ l = "x" === n.axis ? a : r,
+ h = "x" === o.axis ? a : r,
+ c = [];
+ let d, u, f, g;
+ for (d = i, u = i + s; d < u; ++d) {
+ g = e[d], f = {}, f[n.axis] = n.parse(y(g, l), d), c.push(kn(y(g, h), f, o, d));
+ }
+ return c;
+ }
+ updateRangeFromParsed(t, e, i, s) {
+ super.updateRangeFromParsed(t, e, i, s);
+ const n = i._custom;
+ n && e === this._cachedMeta.vScale && (t.min = Math.min(t.min, n.min), t.max = Math.max(t.max, n.max));
+ }
+ getMaxOverflow() {
+ return 0;
+ }
+ getLabelAndValue(t) {
+ const e = this._cachedMeta,
+ { iScale: i, vScale: s } = e,
+ n = this.getParsed(t),
+ o = n._custom,
+ a = Pn(o) ? "[" + o.start + ", " + o.end + "]" : "" + s.getLabelForValue(n[s.axis]);
+ return { label: "" + i.getLabelForValue(n[i.axis]), value: a };
+ }
+ initialize() {
+ this.enableOptionSharing = !0, super.initialize();
+ this._cachedMeta.stack = this.getDataset().stack;
+ }
+ update(t) {
+ const e = this._cachedMeta;
+ this.updateElements(e.data, 0, e.data.length, t);
+ }
+ updateElements(t, e, s, n) {
+ const o = "reset" === n,
+ { index: a, _cachedMeta: { vScale: r } } = this,
+ l = r.getBasePixel(),
+ h = r.isHorizontal(),
+ c = this._getRuler(),
+ { sharedOptions: d, includeOptions: u } = this._getSharedOptions(e, n);
+ for (let f = e; f < e + s; f++) {
+ const e = this.getParsed(f),
+ s = o || i(e[r.axis]) ? { base: l, head: l } : this._calculateBarValuePixels(f),
+ g = this._calculateBarIndexPixels(f, c),
+ p = (e._stacks || {})[r.axis],
+ m = {
+ horizontal: h,
+ base: s.base,
+ enableBorderRadius: !p || Pn(e._custom) || a === p._top || a === p._bottom,
+ x: h ? s.head : g.center,
+ y: h ? g.center : s.head,
+ height: h ? g.size : Math.abs(s.size),
+ width: h ? Math.abs(s.size) : g.size,
+ };
+ u && (m.options = d || this.resolveDataElementOptions(f, t[f].active ? "active" : n));
+ const b = m.options || t[f].options;
+ Dn(m, b, p, a), An(m, b, c.ratio), this.updateElement(t[f], f, m, n);
+ }
+ }
+ _getStacks(t, e) {
+ const { iScale: s } = this._cachedMeta,
+ n = s.getMatchingVisibleMetas(this._type).filter(t => t.controller.options.grouped),
+ o = s.options.stacked,
+ a = [],
+ r = t => {
+ const s = t.controller.getParsed(e), n = s && s[t.vScale.axis];
+ if (i(n) || isNaN(n)) return !0;
+ };
+ for (const i of n) {
+ if (
+ (void 0 === e || !r(i))
+ && ((!1 === o || -1 === a.indexOf(i.stack) || void 0 === o && void 0 === i.stack) && a.push(i.stack),
+ i.index === t)
+ ) break;
+ }
+ return a.length || a.push(void 0), a;
+ }
+ _getStackCount(t) {
+ return this._getStacks(void 0, t).length;
+ }
+ _getStackIndex(t, e, i) {
+ const s = this._getStacks(t, i), n = void 0 !== e ? s.indexOf(e) : -1;
+ return -1 === n ? s.length - 1 : n;
+ }
+ _getRuler() {
+ const t = this.options, e = this._cachedMeta, i = e.iScale, s = [];
+ let n, o;
+ for (n = 0, o = e.data.length; n < o; ++n) s.push(i.getPixelForValue(this.getParsed(n)[i.axis], n));
+ const a = t.barThickness;
+ return {
+ min: a || Mn(e),
+ pixels: s,
+ start: i._startPixel,
+ end: i._endPixel,
+ stackCount: this._getStackCount(),
+ scale: i,
+ grouped: t.grouped,
+ ratio: a ? 1 : t.categoryPercentage * t.barPercentage,
+ };
+ }
+ _calculateBarValuePixels(t) {
+ const { _cachedMeta: { vScale: e, _stacked: s }, options: { base: n, minBarLength: o } } = this,
+ a = n || 0,
+ r = this.getParsed(t),
+ l = r._custom,
+ h = Pn(l);
+ let c, d, u = r[e.axis], f = 0, g = s ? this.applyStack(e, r, s) : u;
+ g !== u && (f = g - u, g = u),
+ h && (u = l.barStart, g = l.barEnd - l.barStart, 0 !== u && z(u) !== z(l.barEnd) && (f = 0), f += u);
+ const p = i(n) || h ? f : n;
+ let m = e.getPixelForValue(p);
+ if (c = this.chart.getDataVisibility(t) ? e.getPixelForValue(f + g) : m, d = c - m, Math.abs(d) < o) {
+ d = function(t, e, i) {
+ return 0 !== t ? z(t) : (e.isHorizontal() ? 1 : -1) * (e.min >= i ? 1 : -1);
+ }(d, e, a) * o, u === a && (m -= d / 2);
+ const t = e.getPixelForDecimal(0), i = e.getPixelForDecimal(1), s = Math.min(t, i), n = Math.max(t, i);
+ m = Math.max(Math.min(m, n), s), c = m + d;
+ }
+ if (m === e.getPixelForValue(a)) {
+ const t = z(d) * e.getLineWidthForValue(a) / 2;
+ m += t, d -= t;
+ }
+ return { size: d, base: m, head: c, center: c + d / 2 };
+ }
+ _calculateBarIndexPixels(t, e) {
+ const s = e.scale, n = this.options, o = n.skipNull, a = r(n.maxBarThickness, 1 / 0);
+ let l, h;
+ if (e.grouped) {
+ const s = o ? this._getStackCount(t) : e.stackCount,
+ r = "flex" === n.barThickness
+ ? function(t, e, i, s) {
+ const n = e.pixels, o = n[t];
+ let a = t > 0 ? n[t - 1] : null, r = t < n.length - 1 ? n[t + 1] : null;
+ const l = i.categoryPercentage;
+ null === a && (a = o - (null === r ? e.end - e.start : r - o)), null === r && (r = o + o - a);
+ const h = o - (o - Math.min(a, r)) / 2 * l;
+ return { chunk: Math.abs(r - a) / 2 * l / s, ratio: i.barPercentage, start: h };
+ }(t, e, n, s)
+ : function(t, e, s, n) {
+ const o = s.barThickness;
+ let a, r;
+ return i(o) ? (a = e.min * s.categoryPercentage, r = s.barPercentage) : (a = o * n, r = 1),
+ { chunk: a / n, ratio: r, start: e.pixels[t] - a / 2 };
+ }(t, e, n, s),
+ c = this._getStackIndex(this.index, this._cachedMeta.stack, o ? t : void 0);
+ l = r.start + r.chunk * c + r.chunk / 2, h = Math.min(a, r.chunk * r.ratio);
+ } else l = s.getPixelForValue(this.getParsed(t)[s.axis], t), h = Math.min(a, e.min * e.ratio);
+ return { base: l - h / 2, head: l + h / 2, center: l, size: h };
+ }
+ draw() {
+ const t = this._cachedMeta, e = t.vScale, i = t.data, s = i.length;
+ let n = 0;
+ for (; n < s; ++n) null !== this.getParsed(n)[e.axis] && i[n].draw(this._ctx);
+ }
+ }
+ Tn.id = "bar",
+ Tn.defaults = {
+ datasetElementType: !1,
+ dataElementType: "bar",
+ categoryPercentage: .8,
+ barPercentage: .9,
+ grouped: !0,
+ animations: { numbers: { type: "number", properties: ["x", "y", "base", "width", "height"] } },
+ },
+ Tn.overrides = {
+ scales: {
+ _index_: { type: "category", offset: !0, grid: { offset: !0 } },
+ _value_: { type: "linear", beginAtZero: !0 },
+ },
+ };
+ class Ln extends Ls {
+ initialize() {
+ this.enableOptionSharing = !0, super.initialize();
+ }
+ parsePrimitiveData(t, e, i, s) {
+ const n = super.parsePrimitiveData(t, e, i, s);
+ for (let t = 0; t < n.length; t++) n[t]._custom = this.resolveDataElementOptions(t + i).radius;
+ return n;
+ }
+ parseArrayData(t, e, i, s) {
+ const n = super.parseArrayData(t, e, i, s);
+ for (let t = 0; t < n.length; t++) {
+ const s = e[i + t];
+ n[t]._custom = r(s[2], this.resolveDataElementOptions(t + i).radius);
+ }
+ return n;
+ }
+ parseObjectData(t, e, i, s) {
+ const n = super.parseObjectData(t, e, i, s);
+ for (let t = 0; t < n.length; t++) {
+ const s = e[i + t];
+ n[t]._custom = r(s && s.r && +s.r, this.resolveDataElementOptions(t + i).radius);
+ }
+ return n;
+ }
+ getMaxOverflow() {
+ const t = this._cachedMeta.data;
+ let e = 0;
+ for (let i = t.length - 1; i >= 0; --i) e = Math.max(e, t[i].size(this.resolveDataElementOptions(i)) / 2);
+ return e > 0 && e;
+ }
+ getLabelAndValue(t) {
+ const e = this._cachedMeta,
+ { xScale: i, yScale: s } = e,
+ n = this.getParsed(t),
+ o = i.getLabelForValue(n.x),
+ a = s.getLabelForValue(n.y),
+ r = n._custom;
+ return { label: e.label, value: "(" + o + ", " + a + (r ? ", " + r : "") + ")" };
+ }
+ update(t) {
+ const e = this._cachedMeta.data;
+ this.updateElements(e, 0, e.length, t);
+ }
+ updateElements(t, e, i, s) {
+ const n = "reset" === s,
+ { iScale: o, vScale: a } = this._cachedMeta,
+ { sharedOptions: r, includeOptions: l } = this._getSharedOptions(e, s),
+ h = o.axis,
+ c = a.axis;
+ for (let d = e; d < e + i; d++) {
+ const e = t[d],
+ i = !n && this.getParsed(d),
+ u = {},
+ f = u[h] = n ? o.getPixelForDecimal(.5) : o.getPixelForValue(i[h]),
+ g = u[c] = n ? a.getBasePixel() : a.getPixelForValue(i[c]);
+ u.skip = isNaN(f) || isNaN(g),
+ l
+ && (u.options = r || this.resolveDataElementOptions(d, e.active ? "active" : s), n && (u.options.radius = 0)),
+ this.updateElement(e, d, u, s);
+ }
+ }
+ resolveDataElementOptions(t, e) {
+ const i = this.getParsed(t);
+ let s = super.resolveDataElementOptions(t, e);
+ s.$shared && (s = Object.assign({}, s, { $shared: !1 }));
+ const n = s.radius;
+ return "active" !== e && (s.radius = 0), s.radius += r(i && i._custom, n), s;
+ }
+ }
+ Ln.id = "bubble",
+ Ln.defaults = {
+ datasetElementType: !1,
+ dataElementType: "point",
+ animations: { numbers: { type: "number", properties: ["x", "y", "borderWidth", "radius"] } },
+ },
+ Ln.overrides = {
+ scales: { x: { type: "linear" }, y: { type: "linear" } },
+ plugins: { tooltip: { callbacks: { title: () => "" } } },
+ };
+ class En extends Ls {
+ constructor(t, e) {
+ super(t, e),
+ this.enableOptionSharing = !0,
+ this.innerRadius = void 0,
+ this.outerRadius = void 0,
+ this.offsetX = void 0,
+ this.offsetY = void 0;
+ }
+ linkScales() {}
+ parse(t, e) {
+ const i = this.getDataset().data, s = this._cachedMeta;
+ if (!1 === this._parsing) s._parsed = i;
+ else {
+ let o, a, r = t => +i[t];
+ if (n(i[t])) {
+ const { key: t = "value" } = this._parsing;
+ r = e => +y(i[e], t);
+ }
+ for (o = t, a = t + e; o < a; ++o) s._parsed[o] = r(o);
+ }
+ }
+ _getRotation() {
+ return H(this.options.rotation - 90);
+ }
+ _getCircumference() {
+ return H(this.options.circumference);
+ }
+ _getRotationExtents() {
+ let t = O, e = -O;
+ for (let i = 0; i < this.chart.data.datasets.length; ++i) {
+ if (this.chart.isDatasetVisible(i)) {
+ const s = this.chart.getDatasetMeta(i).controller, n = s._getRotation(), o = s._getCircumference();
+ t = Math.min(t, n), e = Math.max(e, n + o);
+ }
+ }
+ return { rotation: t, circumference: e - t };
+ }
+ update(t) {
+ const e = this.chart,
+ { chartArea: i } = e,
+ s = this._cachedMeta,
+ n = s.data,
+ o = this.getMaxBorderWidth() + this.getMaxOffset(n) + this.options.spacing,
+ a = Math.max((Math.min(i.width, i.height) - o) / 2, 0),
+ r = Math.min(l(this.options.cutout, a), 1),
+ c = this._getRingWeight(this.index),
+ { circumference: d, rotation: u } = this._getRotationExtents(),
+ { ratioX: f, ratioY: g, offsetX: p, offsetY: m } = function(t, e, i) {
+ let s = 1, n = 1, o = 0, a = 0;
+ if (e < O) {
+ const r = t,
+ l = r + e,
+ h = Math.cos(r),
+ c = Math.sin(r),
+ d = Math.cos(l),
+ u = Math.sin(l),
+ f = (t, e, s) => G(t, r, l, !0) ? 1 : Math.max(e, e * i, s, s * i),
+ g = (t, e, s) => G(t, r, l, !0) ? -1 : Math.min(e, e * i, s, s * i),
+ p = f(0, h, d),
+ m = f(L, c, u),
+ b = g(D, h, d),
+ x = g(D + L, c, u);
+ s = (p - b) / 2, n = (m - x) / 2, o = -(p + b) / 2, a = -(m + x) / 2;
+ }
+ return { ratioX: s, ratioY: n, offsetX: o, offsetY: a };
+ }(u, d, r),
+ b = (i.width - o) / f,
+ x = (i.height - o) / g,
+ _ = Math.max(Math.min(b, x) / 2, 0),
+ y = h(this.options.radius, _),
+ v = (y - Math.max(y * r, 0)) / this._getVisibleDatasetWeightTotal();
+ this.offsetX = p * y,
+ this.offsetY = m * y,
+ s.total = this.calculateTotal(),
+ this.outerRadius = y - v * this._getRingWeightOffset(this.index),
+ this.innerRadius = Math.max(this.outerRadius - v * c, 0),
+ this.updateElements(n, 0, n.length, t);
+ }
+ _circumference(t, e) {
+ const i = this.options, s = this._cachedMeta, n = this._getCircumference();
+ return e && i.animation.animateRotate || !this.chart.getDataVisibility(t) || null === s._parsed[t]
+ || s.data[t].hidden
+ ? 0
+ : this.calculateCircumference(s._parsed[t] * n / O);
+ }
+ updateElements(t, e, i, s) {
+ const n = "reset" === s,
+ o = this.chart,
+ a = o.chartArea,
+ r = o.options.animation,
+ l = (a.left + a.right) / 2,
+ h = (a.top + a.bottom) / 2,
+ c = n && r.animateScale,
+ d = c ? 0 : this.innerRadius,
+ u = c ? 0 : this.outerRadius,
+ { sharedOptions: f, includeOptions: g } = this._getSharedOptions(e, s);
+ let p, m = this._getRotation();
+ for (p = 0; p < e; ++p) m += this._circumference(p, n);
+ for (p = e; p < e + i; ++p) {
+ const e = this._circumference(p, n),
+ i = t[p],
+ o = {
+ x: l + this.offsetX,
+ y: h + this.offsetY,
+ startAngle: m,
+ endAngle: m + e,
+ circumference: e,
+ outerRadius: u,
+ innerRadius: d,
+ };
+ g && (o.options = f || this.resolveDataElementOptions(p, i.active ? "active" : s)),
+ m += e,
+ this.updateElement(i, p, o, s);
+ }
+ }
+ calculateTotal() {
+ const t = this._cachedMeta, e = t.data;
+ let i, s = 0;
+ for (i = 0; i < e.length; i++) {
+ const n = t._parsed[i];
+ null === n || isNaN(n) || !this.chart.getDataVisibility(i) || e[i].hidden || (s += Math.abs(n));
+ }
+ return s;
+ }
+ calculateCircumference(t) {
+ const e = this._cachedMeta.total;
+ return e > 0 && !isNaN(t) ? O * (Math.abs(t) / e) : 0;
+ }
+ getLabelAndValue(t) {
+ const e = this._cachedMeta, i = this.chart, s = i.data.labels || [], n = li(e._parsed[t], i.options.locale);
+ return { label: s[t] || "", value: n };
+ }
+ getMaxBorderWidth(t) {
+ let e = 0;
+ const i = this.chart;
+ let s, n, o, a, r;
+ if (!t) {
+ for (s = 0, n = i.data.datasets.length; s < n; ++s) {
+ if (i.isDatasetVisible(s)) {
+ o = i.getDatasetMeta(s), t = o.data, a = o.controller;
+ break;
+ }
+ }
+ }
+ if (!t) return 0;
+ for (s = 0, n = t.length; s < n; ++s) {
+ r = a.resolveDataElementOptions(s),
+ "inner" !== r.borderAlign && (e = Math.max(e, r.borderWidth || 0, r.hoverBorderWidth || 0));
+ }
+ return e;
+ }
+ getMaxOffset(t) {
+ let e = 0;
+ for (let i = 0, s = t.length; i < s; ++i) {
+ const t = this.resolveDataElementOptions(i);
+ e = Math.max(e, t.offset || 0, t.hoverOffset || 0);
+ }
+ return e;
+ }
+ _getRingWeightOffset(t) {
+ let e = 0;
+ for (let i = 0; i < t; ++i) this.chart.isDatasetVisible(i) && (e += this._getRingWeight(i));
+ return e;
+ }
+ _getRingWeight(t) {
+ return Math.max(r(this.chart.data.datasets[t].weight, 1), 0);
+ }
+ _getVisibleDatasetWeightTotal() {
+ return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
+ }
+ }
+ En.id = "doughnut",
+ En.defaults = {
+ datasetElementType: !1,
+ dataElementType: "arc",
+ animation: { animateRotate: !0, animateScale: !1 },
+ animations: {
+ numbers: {
+ type: "number",
+ properties: [
+ "circumference",
+ "endAngle",
+ "innerRadius",
+ "outerRadius",
+ "startAngle",
+ "x",
+ "y",
+ "offset",
+ "borderWidth",
+ "spacing",
+ ],
+ },
+ },
+ cutout: "50%",
+ rotation: 0,
+ circumference: 360,
+ radius: "100%",
+ spacing: 0,
+ indexAxis: "r",
+ },
+ En.descriptors = { _scriptable: t => "spacing" !== t, _indexable: t => "spacing" !== t },
+ En.overrides = {
+ aspectRatio: 1,
+ plugins: {
+ legend: {
+ labels: {
+ generateLabels(t) {
+ const e = t.data;
+ if (e.labels.length && e.datasets.length) {
+ const { labels: { pointStyle: i } } = t.legend.options;
+ return e.labels.map((e, s) => {
+ const n = t.getDatasetMeta(0).controller.getStyle(s);
+ return {
+ text: e,
+ fillStyle: n.backgroundColor,
+ strokeStyle: n.borderColor,
+ lineWidth: n.borderWidth,
+ pointStyle: i,
+ hidden: !t.getDataVisibility(s),
+ index: s,
+ };
+ });
+ }
+ return [];
+ },
+ },
+ onClick(t, e, i) {
+ i.chart.toggleDataVisibility(e.index), i.chart.update();
+ },
+ },
+ tooltip: {
+ callbacks: {
+ title: () => "",
+ label(t) {
+ let e = t.label;
+ const i = ": " + t.formattedValue;
+ return s(e) ? (e = e.slice(), e[0] += i) : e += i, e;
+ },
+ },
+ },
+ },
+ };
+ class Rn extends Ls {
+ initialize() {
+ this.enableOptionSharing = !0, this.supportsDecimation = !0, super.initialize();
+ }
+ update(t) {
+ const e = this._cachedMeta, { dataset: i, data: s = [], _dataset: n } = e, o = this.chart._animationsDisabled;
+ let { start: a, count: r } = gt(e, s, o);
+ this._drawStart = a,
+ this._drawCount = r,
+ pt(e) && (a = 0, r = s.length),
+ i._chart = this.chart,
+ i._datasetIndex = this.index,
+ i._decimated = !!n._decimated,
+ i.points = s;
+ const l = this.resolveDatasetElementOptions(t);
+ this.options.showLine || (l.borderWidth = 0),
+ l.segment = this.options.segment,
+ this.updateElement(i, void 0, { animated: !o, options: l }, t),
+ this.updateElements(s, a, r, t);
+ }
+ updateElements(t, e, s, n) {
+ const o = "reset" === n,
+ { iScale: a, vScale: r, _stacked: l, _dataset: h } = this._cachedMeta,
+ { sharedOptions: c, includeOptions: d } = this._getSharedOptions(e, n),
+ u = a.axis,
+ f = r.axis,
+ { spanGaps: g, segment: p } = this.options,
+ m = B(g) ? g : Number.POSITIVE_INFINITY,
+ b = this.chart._animationsDisabled || o || "none" === n;
+ let x = e > 0 && this.getParsed(e - 1);
+ for (let g = e; g < e + s; ++g) {
+ const e = t[g],
+ s = this.getParsed(g),
+ _ = b ? e : {},
+ y = i(s[f]),
+ v = _[u] = a.getPixelForValue(s[u], g),
+ w = _[f] = o || y ? r.getBasePixel() : r.getPixelForValue(l ? this.applyStack(r, s, l) : s[f], g);
+ _.skip = isNaN(v) || isNaN(w) || y,
+ _.stop = g > 0 && Math.abs(s[u] - x[u]) > m,
+ p && (_.parsed = s, _.raw = h.data[g]),
+ d && (_.options = c || this.resolveDataElementOptions(g, e.active ? "active" : n)),
+ b || this.updateElement(e, g, _, n),
+ x = s;
+ }
+ }
+ getMaxOverflow() {
+ const t = this._cachedMeta, e = t.dataset, i = e.options && e.options.borderWidth || 0, s = t.data || [];
+ if (!s.length) return i;
+ const n = s[0].size(this.resolveDataElementOptions(0)),
+ o = s[s.length - 1].size(this.resolveDataElementOptions(s.length - 1));
+ return Math.max(i, n, o) / 2;
+ }
+ draw() {
+ const t = this._cachedMeta;
+ t.dataset.updateControlPoints(this.chart.chartArea, t.iScale.axis), super.draw();
+ }
+ }
+ Rn.id = "line",
+ Rn.defaults = { datasetElementType: "line", dataElementType: "point", showLine: !0, spanGaps: !1 },
+ Rn.overrides = { scales: { _index_: { type: "category" }, _value_: { type: "linear" } } };
+ class In extends Ls {
+ constructor(t, e) {
+ super(t, e), this.innerRadius = void 0, this.outerRadius = void 0;
+ }
+ getLabelAndValue(t) {
+ const e = this._cachedMeta, i = this.chart, s = i.data.labels || [], n = li(e._parsed[t].r, i.options.locale);
+ return { label: s[t] || "", value: n };
+ }
+ parseObjectData(t, e, i, s) {
+ return Ue.bind(this)(t, e, i, s);
+ }
+ update(t) {
+ const e = this._cachedMeta.data;
+ this._updateRadius(), this.updateElements(e, 0, e.length, t);
+ }
+ getMinMax() {
+ const t = this._cachedMeta, e = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY };
+ return t.data.forEach((t, i) => {
+ const s = this.getParsed(i).r;
+ !isNaN(s) && this.chart.getDataVisibility(i) && (s < e.min && (e.min = s), s > e.max && (e.max = s));
+ }),
+ e;
+ }
+ _updateRadius() {
+ const t = this.chart,
+ e = t.chartArea,
+ i = t.options,
+ s = Math.min(e.right - e.left, e.bottom - e.top),
+ n = Math.max(s / 2, 0),
+ o = (n - Math.max(i.cutoutPercentage ? n / 100 * i.cutoutPercentage : 1, 0)) / t.getVisibleDatasetCount();
+ this.outerRadius = n - o * this.index, this.innerRadius = this.outerRadius - o;
+ }
+ updateElements(t, e, i, s) {
+ const n = "reset" === s,
+ o = this.chart,
+ a = o.options.animation,
+ r = this._cachedMeta.rScale,
+ l = r.xCenter,
+ h = r.yCenter,
+ c = r.getIndexAngle(0) - .5 * D;
+ let d, u = c;
+ const f = 360 / this.countVisibleElements();
+ for (d = 0; d < e; ++d) u += this._computeAngle(d, s, f);
+ for (d = e; d < e + i; d++) {
+ const e = t[d];
+ let i = u,
+ g = u + this._computeAngle(d, s, f),
+ p = o.getDataVisibility(d) ? r.getDistanceFromCenterForValue(this.getParsed(d).r) : 0;
+ u = g, n && (a.animateScale && (p = 0), a.animateRotate && (i = g = c));
+ const m = {
+ x: l,
+ y: h,
+ innerRadius: 0,
+ outerRadius: p,
+ startAngle: i,
+ endAngle: g,
+ options: this.resolveDataElementOptions(d, e.active ? "active" : s),
+ };
+ this.updateElement(e, d, m, s);
+ }
+ }
+ countVisibleElements() {
+ const t = this._cachedMeta;
+ let e = 0;
+ return t.data.forEach((t, i) => {
+ !isNaN(this.getParsed(i).r) && this.chart.getDataVisibility(i) && e++;
+ }),
+ e;
+ }
+ _computeAngle(t, e, i) {
+ return this.chart.getDataVisibility(t) ? H(this.resolveDataElementOptions(t, e).angle || i) : 0;
+ }
+ }
+ In.id = "polarArea",
+ In.defaults = {
+ dataElementType: "arc",
+ animation: { animateRotate: !0, animateScale: !0 },
+ animations: {
+ numbers: { type: "number", properties: ["x", "y", "startAngle", "endAngle", "innerRadius", "outerRadius"] },
+ },
+ indexAxis: "r",
+ startAngle: 0,
+ },
+ In.overrides = {
+ aspectRatio: 1,
+ plugins: {
+ legend: {
+ labels: {
+ generateLabels(t) {
+ const e = t.data;
+ if (e.labels.length && e.datasets.length) {
+ const { labels: { pointStyle: i } } = t.legend.options;
+ return e.labels.map((e, s) => {
+ const n = t.getDatasetMeta(0).controller.getStyle(s);
+ return {
+ text: e,
+ fillStyle: n.backgroundColor,
+ strokeStyle: n.borderColor,
+ lineWidth: n.borderWidth,
+ pointStyle: i,
+ hidden: !t.getDataVisibility(s),
+ index: s,
+ };
+ });
+ }
+ return [];
+ },
+ },
+ onClick(t, e, i) {
+ i.chart.toggleDataVisibility(e.index), i.chart.update();
+ },
+ },
+ tooltip: {
+ callbacks: { title: () => "", label: t => t.chart.data.labels[t.dataIndex] + ": " + t.formattedValue },
+ },
+ },
+ scales: {
+ r: {
+ type: "radialLinear",
+ angleLines: { display: !1 },
+ beginAtZero: !0,
+ grid: { circular: !0 },
+ pointLabels: { display: !1 },
+ startAngle: 0,
+ },
+ },
+ };
+ class zn extends En {}
+ zn.id = "pie", zn.defaults = { cutout: 0, rotation: 0, circumference: 360, radius: "100%" };
+ class Fn extends Ls {
+ getLabelAndValue(t) {
+ const e = this._cachedMeta.vScale, i = this.getParsed(t);
+ return { label: e.getLabels()[t], value: "" + e.getLabelForValue(i[e.axis]) };
+ }
+ parseObjectData(t, e, i, s) {
+ return Ue.bind(this)(t, e, i, s);
+ }
+ update(t) {
+ const e = this._cachedMeta, i = e.dataset, s = e.data || [], n = e.iScale.getLabels();
+ if (i.points = s, "resize" !== t) {
+ const e = this.resolveDatasetElementOptions(t);
+ this.options.showLine || (e.borderWidth = 0);
+ const o = { _loop: !0, _fullLoop: n.length === s.length, options: e };
+ this.updateElement(i, void 0, o, t);
+ }
+ this.updateElements(s, 0, s.length, t);
+ }
+ updateElements(t, e, i, s) {
+ const n = this._cachedMeta.rScale, o = "reset" === s;
+ for (let a = e; a < e + i; a++) {
+ const e = t[a],
+ i = this.resolveDataElementOptions(a, e.active ? "active" : s),
+ r = n.getPointPositionForValue(a, this.getParsed(a).r),
+ l = o ? n.xCenter : r.x,
+ h = o ? n.yCenter : r.y,
+ c = { x: l, y: h, angle: r.angle, skip: isNaN(l) || isNaN(h), options: i };
+ this.updateElement(e, a, c, s);
+ }
+ }
+ }
+ Fn.id = "radar",
+ Fn.defaults = {
+ datasetElementType: "line",
+ dataElementType: "point",
+ indexAxis: "r",
+ showLine: !0,
+ elements: { line: { fill: "start" } },
+ },
+ Fn.overrides = { aspectRatio: 1, scales: { r: { type: "radialLinear" } } };
+ class Vn extends Ls {
+ update(t) {
+ const e = this._cachedMeta, { data: i = [] } = e, s = this.chart._animationsDisabled;
+ let { start: n, count: o } = gt(e, i, s);
+ if (this._drawStart = n, this._drawCount = o, pt(e) && (n = 0, o = i.length), this.options.showLine) {
+ const { dataset: n, _dataset: o } = e;
+ n._chart = this.chart, n._datasetIndex = this.index, n._decimated = !!o._decimated, n.points = i;
+ const a = this.resolveDatasetElementOptions(t);
+ a.segment = this.options.segment, this.updateElement(n, void 0, { animated: !s, options: a }, t);
+ }
+ this.updateElements(i, n, o, t);
+ }
+ addElements() {
+ const { showLine: t } = this.options;
+ !this.datasetElementType && t && (this.datasetElementType = Us.getElement("line")), super.addElements();
+ }
+ updateElements(t, e, s, n) {
+ const o = "reset" === n,
+ { iScale: a, vScale: r, _stacked: l, _dataset: h } = this._cachedMeta,
+ c = this.resolveDataElementOptions(e, n),
+ d = this.getSharedOptions(c),
+ u = this.includeOptions(n, d),
+ f = a.axis,
+ g = r.axis,
+ { spanGaps: p, segment: m } = this.options,
+ b = B(p) ? p : Number.POSITIVE_INFINITY,
+ x = this.chart._animationsDisabled || o || "none" === n;
+ let _ = e > 0 && this.getParsed(e - 1);
+ for (let c = e; c < e + s; ++c) {
+ const e = t[c],
+ s = this.getParsed(c),
+ p = x ? e : {},
+ y = i(s[g]),
+ v = p[f] = a.getPixelForValue(s[f], c),
+ w = p[g] = o || y ? r.getBasePixel() : r.getPixelForValue(l ? this.applyStack(r, s, l) : s[g], c);
+ p.skip = isNaN(v) || isNaN(w) || y,
+ p.stop = c > 0 && Math.abs(s[f] - _[f]) > b,
+ m && (p.parsed = s, p.raw = h.data[c]),
+ u && (p.options = d || this.resolveDataElementOptions(c, e.active ? "active" : n)),
+ x || this.updateElement(e, c, p, n),
+ _ = s;
+ }
+ this.updateSharedOptions(d, n, c);
+ }
+ getMaxOverflow() {
+ const t = this._cachedMeta, e = t.data || [];
+ if (!this.options.showLine) {
+ let t = 0;
+ for (let i = e.length - 1; i >= 0; --i) t = Math.max(t, e[i].size(this.resolveDataElementOptions(i)) / 2);
+ return t > 0 && t;
+ }
+ const i = t.dataset, s = i.options && i.options.borderWidth || 0;
+ if (!e.length) return s;
+ const n = e[0].size(this.resolveDataElementOptions(0)),
+ o = e[e.length - 1].size(this.resolveDataElementOptions(e.length - 1));
+ return Math.max(s, n, o) / 2;
+ }
+ }
+ Vn.id = "scatter",
+ Vn.defaults = { datasetElementType: !1, dataElementType: "point", showLine: !1, fill: !1 },
+ Vn.overrides = {
+ interaction: { mode: "point" },
+ plugins: {
+ tooltip: { callbacks: { title: () => "", label: t => "(" + t.label + ", " + t.formattedValue + ")" } },
+ },
+ scales: { x: { type: "linear" }, y: { type: "linear" } },
+ };
+ var Bn = Object.freeze({
+ __proto__: null,
+ BarController: Tn,
+ BubbleController: Ln,
+ DoughnutController: En,
+ LineController: Rn,
+ PolarAreaController: In,
+ PieController: zn,
+ RadarController: Fn,
+ ScatterController: Vn,
+ });
+ function Nn(t, e, i) {
+ const { startAngle: s, pixelMargin: n, x: o, y: a, outerRadius: r, innerRadius: l } = e;
+ let h = n / r;
+ t.beginPath(),
+ t.arc(o, a, r, s - h, i + h),
+ l > n ? (h = n / l, t.arc(o, a, l, i + h, s - h, !0)) : t.arc(o, a, n, i + L, s - L),
+ t.closePath(),
+ t.clip();
+ }
+ function Wn(t, e, i, s) {
+ const n = ui(t.options.borderRadius, ["outerStart", "outerEnd", "innerStart", "innerEnd"]);
+ const o = (i - e) / 2,
+ a = Math.min(o, s * e / 2),
+ r = t => {
+ const e = (i - Math.min(o, t)) * s / 2;
+ return Z(t, 0, Math.min(o, e));
+ };
+ return {
+ outerStart: r(n.outerStart),
+ outerEnd: r(n.outerEnd),
+ innerStart: Z(n.innerStart, 0, a),
+ innerEnd: Z(n.innerEnd, 0, a),
+ };
+ }
+ function jn(t, e, i, s) {
+ return { x: i + t * Math.cos(e), y: s + t * Math.sin(e) };
+ }
+ function Hn(t, e, i, s, n, o) {
+ const { x: a, y: r, startAngle: l, pixelMargin: h, innerRadius: c } = e,
+ d = Math.max(e.outerRadius + s + i - h, 0),
+ u = c > 0 ? c + s + i + h : 0;
+ let f = 0;
+ const g = n - l;
+ if (s) {
+ const t = ((c > 0 ? c - s : 0) + (d > 0 ? d - s : 0)) / 2;
+ f = (g - (0 !== t ? g * t / (t + s) : g)) / 2;
+ }
+ const p = (g - Math.max(.001, g * d - i / D) / d) / 2,
+ m = l + p + f,
+ b = n - p - f,
+ { outerStart: x, outerEnd: _, innerStart: y, innerEnd: v } = Wn(e, u, d, b - m),
+ w = d - x,
+ M = d - _,
+ k = m + x / w,
+ S = b - _ / M,
+ P = u + y,
+ O = u + v,
+ C = m + y / P,
+ A = b - v / O;
+ if (t.beginPath(), o) {
+ if (t.arc(a, r, d, k, S), _ > 0) {
+ const e = jn(M, S, a, r);
+ t.arc(e.x, e.y, _, S, b + L);
+ }
+ const e = jn(O, b, a, r);
+ if (t.lineTo(e.x, e.y), v > 0) {
+ const e = jn(O, A, a, r);
+ t.arc(e.x, e.y, v, b + L, A + Math.PI);
+ }
+ if (t.arc(a, r, u, b - v / u, m + y / u, !0), y > 0) {
+ const e = jn(P, C, a, r);
+ t.arc(e.x, e.y, y, C + Math.PI, m - L);
+ }
+ const i = jn(w, m, a, r);
+ if (t.lineTo(i.x, i.y), x > 0) {
+ const e = jn(w, k, a, r);
+ t.arc(e.x, e.y, x, m - L, k);
+ }
+ } else {
+ t.moveTo(a, r);
+ const e = Math.cos(k) * d + a, i = Math.sin(k) * d + r;
+ t.lineTo(e, i);
+ const s = Math.cos(S) * d + a, n = Math.sin(S) * d + r;
+ t.lineTo(s, n);
+ }
+ t.closePath();
+ }
+ function $n(t, e, i, s, n, o) {
+ const { options: a } = e, { borderWidth: r, borderJoinStyle: l } = a, h = "inner" === a.borderAlign;
+ r
+ && (h ? (t.lineWidth = 2 * r, t.lineJoin = l || "round") : (t.lineWidth = r, t.lineJoin = l || "bevel"),
+ e.fullCircles && function(t, e, i) {
+ const { x: s, y: n, startAngle: o, pixelMargin: a, fullCircles: r } = e,
+ l = Math.max(e.outerRadius - a, 0),
+ h = e.innerRadius + a;
+ let c;
+ for (i && Nn(t, e, o + O), t.beginPath(), t.arc(s, n, h, o + O, o, !0), c = 0; c < r; ++c) t.stroke();
+ for (t.beginPath(), t.arc(s, n, l, o, o + O), c = 0; c < r; ++c) t.stroke();
+ }(t, e, h),
+ h && Nn(t, e, n),
+ Hn(t, e, i, s, n, o),
+ t.stroke());
+ }
+ class Yn extends Es {
+ constructor(t) {
+ super(),
+ this.options = void 0,
+ this.circumference = void 0,
+ this.startAngle = void 0,
+ this.endAngle = void 0,
+ this.innerRadius = void 0,
+ this.outerRadius = void 0,
+ this.pixelMargin = 0,
+ this.fullCircles = 0,
+ t && Object.assign(this, t);
+ }
+ inRange(t, e, i) {
+ const s = this.getProps(["x", "y"], i),
+ { angle: n, distance: o } = U(s, { x: t, y: e }),
+ { startAngle: a, endAngle: l, innerRadius: h, outerRadius: c, circumference: d } = this.getProps([
+ "startAngle",
+ "endAngle",
+ "innerRadius",
+ "outerRadius",
+ "circumference",
+ ], i),
+ u = this.options.spacing / 2,
+ f = r(d, l - a) >= O || G(n, a, l),
+ g = Q(o, h + u, c + u);
+ return f && g;
+ }
+ getCenterPoint(t) {
+ const { x: e, y: i, startAngle: s, endAngle: n, innerRadius: o, outerRadius: a } = this.getProps([
+ "x",
+ "y",
+ "startAngle",
+ "endAngle",
+ "innerRadius",
+ "outerRadius",
+ "circumference",
+ ], t),
+ { offset: r, spacing: l } = this.options,
+ h = (s + n) / 2,
+ c = (o + a + l + r) / 2;
+ return { x: e + Math.cos(h) * c, y: i + Math.sin(h) * c };
+ }
+ tooltipPosition(t) {
+ return this.getCenterPoint(t);
+ }
+ draw(t) {
+ const { options: e, circumference: i } = this, s = (e.offset || 0) / 2, n = (e.spacing || 0) / 2, o = e.circular;
+ if (
+ this.pixelMargin = "inner" === e.borderAlign ? .33 : 0,
+ this.fullCircles = i > O ? Math.floor(i / O) : 0,
+ 0 === i || this.innerRadius < 0 || this.outerRadius < 0
+ ) return;
+ t.save();
+ let a = 0;
+ if (s) {
+ a = s / 2;
+ const e = (this.startAngle + this.endAngle) / 2;
+ t.translate(Math.cos(e) * a, Math.sin(e) * a), this.circumference >= D && (a = s);
+ }
+ t.fillStyle = e.backgroundColor, t.strokeStyle = e.borderColor;
+ const r = function(t, e, i, s, n) {
+ const { fullCircles: o, startAngle: a, circumference: r } = e;
+ let l = e.endAngle;
+ if (o) {
+ Hn(t, e, i, s, a + O, n);
+ for (let e = 0; e < o; ++e) t.fill();
+ isNaN(r) || (l = a + r % O, r % O == 0 && (l += O));
+ }
+ return Hn(t, e, i, s, l, n), t.fill(), l;
+ }(t, this, a, n, o);
+ $n(t, this, a, n, r, o), t.restore();
+ }
+ }
+ function Un(t, e, i = e) {
+ t.lineCap = r(i.borderCapStyle, e.borderCapStyle),
+ t.setLineDash(r(i.borderDash, e.borderDash)),
+ t.lineDashOffset = r(i.borderDashOffset, e.borderDashOffset),
+ t.lineJoin = r(i.borderJoinStyle, e.borderJoinStyle),
+ t.lineWidth = r(i.borderWidth, e.borderWidth),
+ t.strokeStyle = r(i.borderColor, e.borderColor);
+ }
+ function Xn(t, e, i) {
+ t.lineTo(i.x, i.y);
+ }
+ function qn(t, e, i = {}) {
+ const s = t.length,
+ { start: n = 0, end: o = s - 1 } = i,
+ { start: a, end: r } = e,
+ l = Math.max(n, a),
+ h = Math.min(o, r),
+ c = n < a && o < a || n > r && o > r;
+ return { count: s, start: l, loop: e.loop, ilen: h < l && !c ? s + h - l : h - l };
+ }
+ function Kn(t, e, i, s) {
+ const { points: n, options: o } = e,
+ { count: a, start: r, loop: l, ilen: h } = qn(n, i, s),
+ c = function(t) {
+ return t.stepped ? Oe : t.tension || "monotone" === t.cubicInterpolationMode ? Ce : Xn;
+ }(o);
+ let d, u, f, { move: g = !0, reverse: p } = s || {};
+ for (d = 0; d <= h; ++d) {
+ u = n[(r + (p ? h - d : d)) % a], u.skip || (g ? (t.moveTo(u.x, u.y), g = !1) : c(t, f, u, p, o.stepped), f = u);
+ }
+ return l && (u = n[(r + (p ? h : 0)) % a], c(t, f, u, p, o.stepped)), !!l;
+ }
+ function Gn(t, e, i, s) {
+ const n = e.points, { count: o, start: a, ilen: r } = qn(n, i, s), { move: l = !0, reverse: h } = s || {};
+ let c, d, u, f, g, p, m = 0, b = 0;
+ const x = t => (a + (h ? r - t : t)) % o,
+ _ = () => {
+ f !== g && (t.lineTo(m, g), t.lineTo(m, f), t.lineTo(m, p));
+ };
+ for (l && (d = n[x(0)], t.moveTo(d.x, d.y)), c = 0; c <= r; ++c) {
+ if (d = n[x(c)], d.skip) continue;
+ const e = d.x, i = d.y, s = 0 | e;
+ s === u
+ ? (i < f ? f = i : i > g && (g = i), m = (b * m + e) / ++b)
+ : (_(), t.lineTo(e, i), u = s, b = 0, f = g = i), p = i;
+ }
+ _();
+ }
+ function Zn(t) {
+ const e = t.options, i = e.borderDash && e.borderDash.length;
+ return !(t._decimated || t._loop || e.tension || "monotone" === e.cubicInterpolationMode || e.stepped || i)
+ ? Gn
+ : Kn;
+ }
+ Yn.id = "arc",
+ Yn.defaults = {
+ borderAlign: "center",
+ borderColor: "#fff",
+ borderJoinStyle: void 0,
+ borderRadius: 0,
+ borderWidth: 2,
+ offset: 0,
+ spacing: 0,
+ angle: void 0,
+ circular: !0,
+ },
+ Yn.defaultRoutes = { backgroundColor: "backgroundColor" };
+ const Jn = "function" == typeof Path2D;
+ function Qn(t, e, i, s) {
+ Jn && !e.options.segment
+ ? function(t, e, i, s) {
+ let n = e._path;
+ n || (n = e._path = new Path2D(), e.path(n, i, s) && n.closePath()), Un(t, e.options), t.stroke(n);
+ }(t, e, i, s)
+ : function(t, e, i, s) {
+ const { segments: n, options: o } = e, a = Zn(e);
+ for (const r of n) {
+ Un(t, o, r.style), t.beginPath(), a(t, e, r, { start: i, end: i + s - 1 }) && t.closePath(), t.stroke();
+ }
+ }(t, e, i, s);
+ }
+ class to extends Es {
+ constructor(t) {
+ super(),
+ this.animated = !0,
+ this.options = void 0,
+ this._chart = void 0,
+ this._loop = void 0,
+ this._fullLoop = void 0,
+ this._path = void 0,
+ this._points = void 0,
+ this._segments = void 0,
+ this._decimated = !1,
+ this._pointsUpdated = !1,
+ this._datasetIndex = void 0,
+ t && Object.assign(this, t);
+ }
+ updateControlPoints(t, e) {
+ const i = this.options;
+ if ((i.tension || "monotone" === i.cubicInterpolationMode) && !i.stepped && !this._pointsUpdated) {
+ const s = i.spanGaps ? this._loop : this._fullLoop;
+ Qe(this._points, i, t, s, e), this._pointsUpdated = !0;
+ }
+ }
+ set points(t) {
+ this._points = t, delete this._segments, delete this._path, this._pointsUpdated = !1;
+ }
+ get points() {
+ return this._points;
+ }
+ get segments() {
+ return this._segments || (this._segments = Di(this, this.options.segment));
+ }
+ first() {
+ const t = this.segments, e = this.points;
+ return t.length && e[t[0].start];
+ }
+ last() {
+ const t = this.segments, e = this.points, i = t.length;
+ return i && e[t[i - 1].end];
+ }
+ interpolate(t, e) {
+ const i = this.options, s = t[e], n = this.points, o = Pi(this, { property: e, start: s, end: s });
+ if (!o.length) return;
+ const a = [],
+ r = function(t) {
+ return t.stepped ? oi : t.tension || "monotone" === t.cubicInterpolationMode ? ai : ni;
+ }(i);
+ let l, h;
+ for (l = 0, h = o.length; l < h; ++l) {
+ const { start: h, end: c } = o[l], d = n[h], u = n[c];
+ if (d === u) {
+ a.push(d);
+ continue;
+ }
+ const f = r(d, u, Math.abs((s - d[e]) / (u[e] - d[e])), i.stepped);
+ f[e] = t[e], a.push(f);
+ }
+ return 1 === a.length ? a[0] : a;
+ }
+ pathSegment(t, e, i) {
+ return Zn(this)(t, this, e, i);
+ }
+ path(t, e, i) {
+ const s = this.segments, n = Zn(this);
+ let o = this._loop;
+ e = e || 0, i = i || this.points.length - e;
+ for (const a of s) o &= n(t, this, a, { start: e, end: e + i - 1 });
+ return !!o;
+ }
+ draw(t, e, i, s) {
+ const n = this.options || {};
+ (this.points || []).length && n.borderWidth && (t.save(), Qn(t, this, i, s), t.restore()),
+ this.animated && (this._pointsUpdated = !1, this._path = void 0);
+ }
+ }
+ function eo(t, e, i, s) {
+ const n = t.options, { [i]: o } = t.getProps([i], s);
+ return Math.abs(e - o) < n.radius + n.hitRadius;
+ }
+ to.id = "line",
+ to.defaults = {
+ borderCapStyle: "butt",
+ borderDash: [],
+ borderDashOffset: 0,
+ borderJoinStyle: "miter",
+ borderWidth: 3,
+ capBezierPoints: !0,
+ cubicInterpolationMode: "default",
+ fill: !1,
+ spanGaps: !1,
+ stepped: !1,
+ tension: 0,
+ },
+ to.defaultRoutes = { backgroundColor: "backgroundColor", borderColor: "borderColor" },
+ to.descriptors = { _scriptable: !0, _indexable: t => "borderDash" !== t && "fill" !== t };
+ class io extends Es {
+ constructor(t) {
+ super(),
+ this.options = void 0,
+ this.parsed = void 0,
+ this.skip = void 0,
+ this.stop = void 0,
+ t && Object.assign(this, t);
+ }
+ inRange(t, e, i) {
+ const s = this.options, { x: n, y: o } = this.getProps(["x", "y"], i);
+ return Math.pow(t - n, 2) + Math.pow(e - o, 2) < Math.pow(s.hitRadius + s.radius, 2);
+ }
+ inXRange(t, e) {
+ return eo(this, t, "x", e);
+ }
+ inYRange(t, e) {
+ return eo(this, t, "y", e);
+ }
+ getCenterPoint(t) {
+ const { x: e, y: i } = this.getProps(["x", "y"], t);
+ return { x: e, y: i };
+ }
+ size(t) {
+ let e = (t = t || this.options || {}).radius || 0;
+ e = Math.max(e, e && t.hoverRadius || 0);
+ return 2 * (e + (e && t.borderWidth || 0));
+ }
+ draw(t, e) {
+ const i = this.options;
+ this.skip || i.radius < .1 || !Se(this, e, this.size(i) / 2)
+ || (t.strokeStyle = i.borderColor,
+ t.lineWidth = i.borderWidth,
+ t.fillStyle = i.backgroundColor,
+ Me(t, i, this.x, this.y));
+ }
+ getRange() {
+ const t = this.options || {};
+ return t.radius + t.hitRadius;
+ }
+ }
+ function so(t, e) {
+ const { x: i, y: s, base: n, width: o, height: a } = t.getProps(["x", "y", "base", "width", "height"], e);
+ let r, l, h, c, d;
+ return t.horizontal
+ ? (d = a / 2, r = Math.min(i, n), l = Math.max(i, n), h = s - d, c = s + d)
+ : (d = o / 2, r = i - d, l = i + d, h = Math.min(s, n), c = Math.max(s, n)),
+ { left: r, top: h, right: l, bottom: c };
+ }
+ function no(t, e, i, s) {
+ return t ? 0 : Z(e, i, s);
+ }
+ function oo(t) {
+ const e = so(t),
+ i = e.right - e.left,
+ s = e.bottom - e.top,
+ o = function(t, e, i) {
+ const s = t.options.borderWidth, n = t.borderSkipped, o = fi(s);
+ return {
+ t: no(n.top, o.top, 0, i),
+ r: no(n.right, o.right, 0, e),
+ b: no(n.bottom, o.bottom, 0, i),
+ l: no(n.left, o.left, 0, e),
+ };
+ }(t, i / 2, s / 2),
+ a = function(t, e, i) {
+ const { enableBorderRadius: s } = t.getProps(["enableBorderRadius"]),
+ o = t.options.borderRadius,
+ a = gi(o),
+ r = Math.min(e, i),
+ l = t.borderSkipped,
+ h = s || n(o);
+ return {
+ topLeft: no(!h || l.top || l.left, a.topLeft, 0, r),
+ topRight: no(!h || l.top || l.right, a.topRight, 0, r),
+ bottomLeft: no(!h || l.bottom || l.left, a.bottomLeft, 0, r),
+ bottomRight: no(!h || l.bottom || l.right, a.bottomRight, 0, r),
+ };
+ }(t, i / 2, s / 2);
+ return {
+ outer: { x: e.left, y: e.top, w: i, h: s, radius: a },
+ inner: {
+ x: e.left + o.l,
+ y: e.top + o.t,
+ w: i - o.l - o.r,
+ h: s - o.t - o.b,
+ radius: {
+ topLeft: Math.max(0, a.topLeft - Math.max(o.t, o.l)),
+ topRight: Math.max(0, a.topRight - Math.max(o.t, o.r)),
+ bottomLeft: Math.max(0, a.bottomLeft - Math.max(o.b, o.l)),
+ bottomRight: Math.max(0, a.bottomRight - Math.max(o.b, o.r)),
+ },
+ },
+ };
+ }
+ function ao(t, e, i, s) {
+ const n = null === e, o = null === i, a = t && !(n && o) && so(t, s);
+ return a && (n || Q(e, a.left, a.right)) && (o || Q(i, a.top, a.bottom));
+ }
+ function ro(t, e) {
+ t.rect(e.x, e.y, e.w, e.h);
+ }
+ function lo(t, e, i = {}) {
+ const s = t.x !== i.x ? -e : 0,
+ n = t.y !== i.y ? -e : 0,
+ o = (t.x + t.w !== i.x + i.w ? e : 0) - s,
+ a = (t.y + t.h !== i.y + i.h ? e : 0) - n;
+ return { x: t.x + s, y: t.y + n, w: t.w + o, h: t.h + a, radius: t.radius };
+ }
+ io.id = "point",
+ io.defaults = {
+ borderWidth: 1,
+ hitRadius: 1,
+ hoverBorderWidth: 1,
+ hoverRadius: 4,
+ pointStyle: "circle",
+ radius: 3,
+ rotation: 0,
+ },
+ io.defaultRoutes = { backgroundColor: "backgroundColor", borderColor: "borderColor" };
+ class ho extends Es {
+ constructor(t) {
+ super(),
+ this.options = void 0,
+ this.horizontal = void 0,
+ this.base = void 0,
+ this.width = void 0,
+ this.height = void 0,
+ this.inflateAmount = void 0,
+ t && Object.assign(this, t);
+ }
+ draw(t) {
+ const { inflateAmount: e, options: { borderColor: i, backgroundColor: s } } = this,
+ { inner: n, outer: o } = oo(this),
+ a = (r = o.radius).topLeft || r.topRight || r.bottomLeft || r.bottomRight ? Le : ro;
+ var r;
+ t.save(),
+ o.w === n.w && o.h === n.h
+ || (t.beginPath(), a(t, lo(o, e, n)), t.clip(), a(t, lo(n, -e, o)), t.fillStyle = i, t.fill("evenodd")),
+ t.beginPath(),
+ a(t, lo(n, e)),
+ t.fillStyle = s,
+ t.fill(),
+ t.restore();
+ }
+ inRange(t, e, i) {
+ return ao(this, t, e, i);
+ }
+ inXRange(t, e) {
+ return ao(this, t, null, e);
+ }
+ inYRange(t, e) {
+ return ao(this, null, t, e);
+ }
+ getCenterPoint(t) {
+ const { x: e, y: i, base: s, horizontal: n } = this.getProps(["x", "y", "base", "horizontal"], t);
+ return { x: n ? (e + s) / 2 : e, y: n ? i : (i + s) / 2 };
+ }
+ getRange(t) {
+ return "x" === t ? this.width / 2 : this.height / 2;
+ }
+ }
+ ho.id = "bar",
+ ho.defaults = {
+ borderSkipped: "start",
+ borderWidth: 0,
+ borderRadius: 0,
+ inflateAmount: "auto",
+ pointStyle: void 0,
+ },
+ ho.defaultRoutes = { backgroundColor: "backgroundColor", borderColor: "borderColor" };
+ var co = Object.freeze({ __proto__: null, ArcElement: Yn, LineElement: to, PointElement: io, BarElement: ho });
+ function uo(t) {
+ if (t._decimated) {
+ const e = t._data;
+ delete t._decimated, delete t._data, Object.defineProperty(t, "data", { value: e });
+ }
+ }
+ function fo(t) {
+ t.data.datasets.forEach(t => {
+ uo(t);
+ });
+ }
+ var go = {
+ id: "decimation",
+ defaults: { algorithm: "min-max", enabled: !1 },
+ beforeElementsUpdate: (t, e, s) => {
+ if (!s.enabled) return void fo(t);
+ const n = t.width;
+ t.data.datasets.forEach((e, o) => {
+ const { _data: a, indexAxis: r } = e, l = t.getDatasetMeta(o), h = a || e.data;
+ if ("y" === bi([r, t.options.indexAxis])) return;
+ if (!l.controller.supportsDecimation) return;
+ const c = t.scales[l.xAxisID];
+ if ("linear" !== c.type && "time" !== c.type) return;
+ if (t.options.parsing) return;
+ let { start: d, count: u } = function(t, e) {
+ const i = e.length;
+ let s, n = 0;
+ const { iScale: o } = t, { min: a, max: r, minDefined: l, maxDefined: h } = o.getUserBounds();
+ return l && (n = Z(et(e, o.axis, a).lo, 0, i - 1)),
+ s = h ? Z(et(e, o.axis, r).hi + 1, n, i) - n : i - n,
+ { start: n, count: s };
+ }(l, h);
+ if (u <= (s.threshold || 4 * n)) return void uo(e);
+ let f;
+ switch (
+ i(a)
+ && (e._data = h,
+ delete e.data,
+ Object.defineProperty(e, "data", {
+ configurable: !0,
+ enumerable: !0,
+ get: function() {
+ return this._decimated;
+ },
+ set: function(t) {
+ this._data = t;
+ },
+ })), s.algorithm
+ ) {
+ case "lttb":
+ f = function(t, e, i, s, n) {
+ const o = n.samples || s;
+ if (o >= i) return t.slice(e, e + i);
+ const a = [], r = (i - 2) / (o - 2);
+ let l = 0;
+ const h = e + i - 1;
+ let c, d, u, f, g, p = e;
+ for (a[l++] = t[p], c = 0; c < o - 2; c++) {
+ let s, n = 0, o = 0;
+ const h = Math.floor((c + 1) * r) + 1 + e, m = Math.min(Math.floor((c + 2) * r) + 1, i) + e, b = m - h;
+ for (s = h; s < m; s++) n += t[s].x, o += t[s].y;
+ n /= b, o /= b;
+ const x = Math.floor(c * r) + 1 + e,
+ _ = Math.min(Math.floor((c + 1) * r) + 1, i) + e,
+ { x: y, y: v } = t[p];
+ for (u = f = -1, s = x; s < _; s++) {
+ f = .5 * Math.abs((y - n) * (t[s].y - v) - (y - t[s].x) * (o - v)), f > u && (u = f, d = t[s], g = s);
+ }
+ a[l++] = d, p = g;
+ }
+ return a[l++] = t[h], a;
+ }(h, d, u, n, s);
+ break;
+ case "min-max":
+ f = function(t, e, s, n) {
+ let o, a, r, l, h, c, d, u, f, g, p = 0, m = 0;
+ const b = [], x = e + s - 1, _ = t[e].x, y = t[x].x - _;
+ for (o = e; o < e + s; ++o) {
+ a = t[o], r = (a.x - _) / y * n, l = a.y;
+ const e = 0 | r;
+ if (e === h) l < f ? (f = l, c = o) : l > g && (g = l, d = o), p = (m * p + a.x) / ++m;
+ else {
+ const s = o - 1;
+ if (!i(c) && !i(d)) {
+ const e = Math.min(c, d), i = Math.max(c, d);
+ e !== u && e !== s && b.push({ ...t[e], x: p }), i !== u && i !== s && b.push({ ...t[i], x: p });
+ }
+ o > 0 && s !== u && b.push(t[s]), b.push(a), h = e, m = 0, f = g = l, c = d = u = o;
+ }
+ }
+ return b;
+ }(h, d, u, n);
+ break;
+ default:
+ throw new Error(`Unsupported decimation algorithm '${s.algorithm}'`);
+ }
+ e._decimated = f;
+ });
+ },
+ destroy(t) {
+ fo(t);
+ },
+ };
+ function po(t, e, i, s) {
+ if (s) return;
+ let n = e[t], o = i[t];
+ return "angle" === t && (n = K(n), o = K(o)), { property: t, start: n, end: o };
+ }
+ function mo(t, e, i) {
+ for (; e > t; e--) {
+ const t = i[e];
+ if (!isNaN(t.x) && !isNaN(t.y)) break;
+ }
+ return e;
+ }
+ function bo(t, e, i, s) {
+ return t && e ? s(t[i], e[i]) : t ? t[i] : e ? e[i] : 0;
+ }
+ function xo(t, e) {
+ let i = [], n = !1;
+ return s(t) ? (n = !0, i = t) : i = function(t, e) {
+ const { x: i = null, y: s = null } = t || {}, n = e.points, o = [];
+ return e.segments.forEach(({ start: t, end: e }) => {
+ e = mo(t, e, n);
+ const a = n[t], r = n[e];
+ null !== s
+ ? (o.push({ x: a.x, y: s }), o.push({ x: r.x, y: s }))
+ : null !== i && (o.push({ x: i, y: a.y }), o.push({ x: i, y: r.y }));
+ }),
+ o;
+ }(t, e),
+ i.length ? new to({ points: i, options: { tension: 0 }, _loop: n, _fullLoop: n }) : null;
+ }
+ function _o(t) {
+ return t && !1 !== t.fill;
+ }
+ function yo(t, e, i) {
+ let s = t[e].fill;
+ const n = [e];
+ let a;
+ if (!i) return s;
+ for (; !1 !== s && -1 === n.indexOf(s);) {
+ if (!o(s)) return s;
+ if (a = t[s], !a) return !1;
+ if (a.visible) return s;
+ n.push(s), s = a.fill;
+ }
+ return !1;
+ }
+ function vo(t, e, i) {
+ const s = function(t) {
+ const e = t.options, i = e.fill;
+ let s = r(i && i.target, i);
+ void 0 === s && (s = !!e.backgroundColor);
+ if (!1 === s || null === s) return !1;
+ if (!0 === s) return "origin";
+ return s;
+ }(t);
+ if (n(s)) return !isNaN(s.value) && s;
+ let a = parseFloat(s);
+ return o(a) && Math.floor(a) === a
+ ? function(t, e, i, s) {
+ "-" !== t && "+" !== t || (i = e + i);
+ if (i === e || i < 0 || i >= s) return !1;
+ return i;
+ }(s[0], e, a, i)
+ : ["origin", "start", "end", "stack", "shape"].indexOf(s) >= 0 && s;
+ }
+ function wo(t, e, i) {
+ const s = [];
+ for (let n = 0; n < i.length; n++) {
+ const o = i[n], { first: a, last: r, point: l } = Mo(o, e, "x");
+ if (!(!l || a && r)) {
+ if (a) s.unshift(l);
+ else if (t.push(l), !r) break;
+ }
+ }
+ t.push(...s);
+ }
+ function Mo(t, e, i) {
+ const s = t.interpolate(e, i);
+ if (!s) return {};
+ const n = s[i], o = t.segments, a = t.points;
+ let r = !1, l = !1;
+ for (let t = 0; t < o.length; t++) {
+ const e = o[t], s = a[e.start][i], h = a[e.end][i];
+ if (Q(n, s, h)) {
+ r = n === s, l = n === h;
+ break;
+ }
+ }
+ return { first: r, last: l, point: s };
+ }
+ class ko {
+ constructor(t) {
+ this.x = t.x, this.y = t.y, this.radius = t.radius;
+ }
+ pathSegment(t, e, i) {
+ const { x: s, y: n, radius: o } = this;
+ return e = e || { start: 0, end: O }, t.arc(s, n, o, e.end, e.start, !0), !i.bounds;
+ }
+ interpolate(t) {
+ const { x: e, y: i, radius: s } = this, n = t.angle;
+ return { x: e + Math.cos(n) * s, y: i + Math.sin(n) * s, angle: n };
+ }
+ }
+ function So(t) {
+ const { chart: e, fill: i, line: s } = t;
+ if (o(i)) {
+ return function(t, e) {
+ const i = t.getDatasetMeta(e);
+ return i && t.isDatasetVisible(e) ? i.dataset : null;
+ }(e, i);
+ }
+ if ("stack" === i) {
+ return function(t) {
+ const { scale: e, index: i, line: s } = t,
+ n = [],
+ o = s.segments,
+ a = s.points,
+ r = function(t, e) {
+ const i = [], s = t.getMatchingVisibleMetas("line");
+ for (let t = 0; t < s.length; t++) {
+ const n = s[t];
+ if (n.index === e) break;
+ n.hidden || i.unshift(n.dataset);
+ }
+ return i;
+ }(e, i);
+ r.push(xo({ x: null, y: e.bottom }, s));
+ for (let t = 0; t < o.length; t++) {
+ const e = o[t];
+ for (let t = e.start; t <= e.end; t++) wo(n, a[t], r);
+ }
+ return new to({ points: n, options: {} });
+ }(t);
+ }
+ if ("shape" === i) return !0;
+ const a = function(t) {
+ if ((t.scale || {}).getPointPositionForValue) {
+ return function(t) {
+ const { scale: e, fill: i } = t,
+ s = e.options,
+ o = e.getLabels().length,
+ a = s.reverse ? e.max : e.min,
+ r = function(t, e, i) {
+ let s;
+ return s = "start" === t
+ ? i
+ : "end" === t
+ ? e.options.reverse ? e.min : e.max
+ : n(t)
+ ? t.value
+ : e.getBaseValue(),
+ s;
+ }(i, e, a),
+ l = [];
+ if (s.grid.circular) {
+ const t = e.getPointPositionForValue(0, a);
+ return new ko({ x: t.x, y: t.y, radius: e.getDistanceFromCenterForValue(r) });
+ }
+ for (let t = 0; t < o; ++t) l.push(e.getPointPositionForValue(t, r));
+ return l;
+ }(t);
+ }
+ return function(t) {
+ const { scale: e = {}, fill: i } = t,
+ s = function(t, e) {
+ let i = null;
+ return "start" === t
+ ? i = e.bottom
+ : "end" === t
+ ? i = e.top
+ : n(t)
+ ? i = e.getPixelForValue(t.value)
+ : e.getBasePixel && (i = e.getBasePixel()),
+ i;
+ }(i, e);
+ if (o(s)) {
+ const t = e.isHorizontal();
+ return { x: t ? s : null, y: t ? null : s };
+ }
+ return null;
+ }(t);
+ }(t);
+ return a instanceof ko ? a : xo(a, s);
+ }
+ function Po(t, e, i) {
+ const s = So(e),
+ { line: n, scale: o, axis: a } = e,
+ r = n.options,
+ l = r.fill,
+ h = r.backgroundColor,
+ { above: c = h, below: d = h } = l || {};
+ s && n.points.length && (Pe(t, i),
+ function(t, e) {
+ const { line: i, target: s, above: n, below: o, area: a, scale: r } = e, l = i._loop ? "angle" : e.axis;
+ t.save(),
+ "x" === l && o !== n
+ && (Do(t, s, a.top),
+ Oo(t, { line: i, target: s, color: n, scale: r, property: l }),
+ t.restore(),
+ t.save(),
+ Do(t, s, a.bottom));
+ Oo(t, { line: i, target: s, color: o, scale: r, property: l }), t.restore();
+ }(t, { line: n, target: s, above: c, below: d, area: i, scale: o, axis: a }),
+ De(t));
+ }
+ function Do(t, e, i) {
+ const { segments: s, points: n } = e;
+ let o = !0, a = !1;
+ t.beginPath();
+ for (const r of s) {
+ const { start: s, end: l } = r, h = n[s], c = n[mo(s, l, n)];
+ o ? (t.moveTo(h.x, h.y), o = !1) : (t.lineTo(h.x, i), t.lineTo(h.x, h.y)),
+ a = !!e.pathSegment(t, r, { move: a }),
+ a ? t.closePath() : t.lineTo(c.x, i);
+ }
+ t.lineTo(e.first().x, i), t.closePath(), t.clip();
+ }
+ function Oo(t, e) {
+ const { line: i, target: s, property: n, color: o, scale: a } = e,
+ r = function(t, e, i) {
+ const s = t.segments, n = t.points, o = e.points, a = [];
+ for (const t of s) {
+ let { start: s, end: r } = t;
+ r = mo(s, r, n);
+ const l = po(i, n[s], n[r], t.loop);
+ if (!e.segments) {
+ a.push({ source: t, target: l, start: n[s], end: n[r] });
+ continue;
+ }
+ const h = Pi(e, l);
+ for (const e of h) {
+ const s = po(i, o[e.start], o[e.end], e.loop), r = Si(t, n, s);
+ for (const t of r) {
+ a.push({
+ source: t,
+ target: e,
+ start: { [i]: bo(l, s, "start", Math.max) },
+ end: { [i]: bo(l, s, "end", Math.min) },
+ });
+ }
+ }
+ }
+ return a;
+ }(i, s, n);
+ for (const { source: e, target: l, start: h, end: c } of r) {
+ const { style: { backgroundColor: r = o } = {} } = e, d = !0 !== s;
+ t.save(), t.fillStyle = r, Co(t, a, d && po(n, h, c)), t.beginPath();
+ const u = !!i.pathSegment(t, e);
+ let f;
+ if (d) {
+ u ? t.closePath() : Ao(t, s, c, n);
+ const e = !!s.pathSegment(t, l, { move: u, reverse: !0 });
+ f = u && e, f || Ao(t, s, h, n);
+ }
+ t.closePath(), t.fill(f ? "evenodd" : "nonzero"), t.restore();
+ }
+ }
+ function Co(t, e, i) {
+ const { top: s, bottom: n } = e.chart.chartArea, { property: o, start: a, end: r } = i || {};
+ "x" === o && (t.beginPath(), t.rect(a, s, r - a, n - s), t.clip());
+ }
+ function Ao(t, e, i, s) {
+ const n = e.interpolate(i, s);
+ n && t.lineTo(n.x, n.y);
+ }
+ var To = {
+ id: "filler",
+ afterDatasetsUpdate(t, e, i) {
+ const s = (t.data.datasets || []).length, n = [];
+ let o, a, r, l;
+ for (a = 0; a < s; ++a) {
+ o = t.getDatasetMeta(a),
+ r = o.dataset,
+ l = null,
+ r && r.options && r instanceof to
+ && (l = {
+ visible: t.isDatasetVisible(a),
+ index: a,
+ fill: vo(r, a, s),
+ chart: t,
+ axis: o.controller.options.indexAxis,
+ scale: o.vScale,
+ line: r,
+ }),
+ o.$filler = l,
+ n.push(l);
+ }
+ for (a = 0; a < s; ++a) l = n[a], l && !1 !== l.fill && (l.fill = yo(n, a, i.propagate));
+ },
+ beforeDraw(t, e, i) {
+ const s = "beforeDraw" === i.drawTime, n = t.getSortedVisibleDatasetMetas(), o = t.chartArea;
+ for (let e = n.length - 1; e >= 0; --e) {
+ const i = n[e].$filler;
+ i && (i.line.updateControlPoints(o, i.axis), s && i.fill && Po(t.ctx, i, o));
+ }
+ },
+ beforeDatasetsDraw(t, e, i) {
+ if ("beforeDatasetsDraw" !== i.drawTime) return;
+ const s = t.getSortedVisibleDatasetMetas();
+ for (let e = s.length - 1; e >= 0; --e) {
+ const i = s[e].$filler;
+ _o(i) && Po(t.ctx, i, t.chartArea);
+ }
+ },
+ beforeDatasetDraw(t, e, i) {
+ const s = e.meta.$filler;
+ _o(s) && "beforeDatasetDraw" === i.drawTime && Po(t.ctx, s, t.chartArea);
+ },
+ defaults: { propagate: !0, drawTime: "beforeDatasetDraw" },
+ };
+ const Lo = (t, e) => {
+ let { boxHeight: i = e, boxWidth: s = e } = t;
+ return t.usePointStyle && (i = Math.min(i, e), s = t.pointStyleWidth || Math.min(s, e)),
+ { boxWidth: s, boxHeight: i, itemHeight: Math.max(e, i) };
+ };
+ class Eo extends Es {
+ constructor(t) {
+ super(),
+ this._added = !1,
+ this.legendHitBoxes = [],
+ this._hoveredItem = null,
+ this.doughnutMode = !1,
+ this.chart = t.chart,
+ this.options = t.options,
+ this.ctx = t.ctx,
+ this.legendItems = void 0,
+ this.columnSizes = void 0,
+ this.lineWidths = void 0,
+ this.maxHeight = void 0,
+ this.maxWidth = void 0,
+ this.top = void 0,
+ this.bottom = void 0,
+ this.left = void 0,
+ this.right = void 0,
+ this.height = void 0,
+ this.width = void 0,
+ this._margins = void 0,
+ this.position = void 0,
+ this.weight = void 0,
+ this.fullSize = void 0;
+ }
+ update(t, e, i) {
+ this.maxWidth = t, this.maxHeight = e, this._margins = i, this.setDimensions(), this.buildLabels(), this.fit();
+ }
+ setDimensions() {
+ this.isHorizontal()
+ ? (this.width = this.maxWidth, this.left = this._margins.left, this.right = this.width)
+ : (this.height = this.maxHeight, this.top = this._margins.top, this.bottom = this.height);
+ }
+ buildLabels() {
+ const t = this.options.labels || {};
+ let e = c(t.generateLabels, [this.chart], this) || [];
+ t.filter && (e = e.filter(e => t.filter(e, this.chart.data))),
+ t.sort && (e = e.sort((e, i) => t.sort(e, i, this.chart.data))),
+ this.options.reverse && e.reverse(),
+ this.legendItems = e;
+ }
+ fit() {
+ const { options: t, ctx: e } = this;
+ if (!t.display) return void (this.width = this.height = 0);
+ const i = t.labels,
+ s = mi(i.font),
+ n = s.size,
+ o = this._computeTitleHeight(),
+ { boxWidth: a, itemHeight: r } = Lo(i, n);
+ let l, h;
+ e.font = s.string,
+ this.isHorizontal()
+ ? (l = this.maxWidth, h = this._fitRows(o, n, a, r) + 10)
+ : (h = this.maxHeight, l = this._fitCols(o, n, a, r) + 10),
+ this.width = Math.min(l, t.maxWidth || this.maxWidth),
+ this.height = Math.min(h, t.maxHeight || this.maxHeight);
+ }
+ _fitRows(t, e, i, s) {
+ const { ctx: n, maxWidth: o, options: { labels: { padding: a } } } = this,
+ r = this.legendHitBoxes = [],
+ l = this.lineWidths = [0],
+ h = s + a;
+ let c = t;
+ n.textAlign = "left", n.textBaseline = "middle";
+ let d = -1, u = -h;
+ return this.legendItems.forEach((t, f) => {
+ const g = i + e / 2 + n.measureText(t.text).width;
+ (0 === f || l[l.length - 1] + g + 2 * a > o) && (c += h, l[l.length - (f > 0 ? 0 : 1)] = 0, u += h, d++),
+ r[f] = { left: 0, top: u, row: d, width: g, height: s },
+ l[l.length - 1] += g + a;
+ }),
+ c;
+ }
+ _fitCols(t, e, i, s) {
+ const { ctx: n, maxHeight: o, options: { labels: { padding: a } } } = this,
+ r = this.legendHitBoxes = [],
+ l = this.columnSizes = [],
+ h = o - t;
+ let c = a, d = 0, u = 0, f = 0, g = 0;
+ return this.legendItems.forEach((t, o) => {
+ const p = i + e / 2 + n.measureText(t.text).width;
+ o > 0 && u + s + 2 * a > h && (c += d + a, l.push({ width: d, height: u }), f += d + a, g++, d = u = 0),
+ r[o] = { left: f, top: u, col: g, width: p, height: s },
+ d = Math.max(d, p),
+ u += s + a;
+ }),
+ c += d,
+ l.push({ width: d, height: u }),
+ c;
+ }
+ adjustHitBoxes() {
+ if (!this.options.display) return;
+ const t = this._computeTitleHeight(),
+ { legendHitBoxes: e, options: { align: i, labels: { padding: s }, rtl: n } } = this,
+ o = yi(n, this.left, this.width);
+ if (this.isHorizontal()) {
+ let n = 0, a = ut(i, this.left + s, this.right - this.lineWidths[n]);
+ for (const r of e) {
+ n !== r.row && (n = r.row, a = ut(i, this.left + s, this.right - this.lineWidths[n])),
+ r.top += this.top + t + s,
+ r.left = o.leftForLtr(o.x(a), r.width),
+ a += r.width + s;
+ }
+ } else {
+ let n = 0, a = ut(i, this.top + t + s, this.bottom - this.columnSizes[n].height);
+ for (const r of e) {
+ r.col !== n && (n = r.col, a = ut(i, this.top + t + s, this.bottom - this.columnSizes[n].height)),
+ r.top = a,
+ r.left += this.left + s,
+ r.left = o.leftForLtr(o.x(r.left), r.width),
+ a += r.height + s;
+ }
+ }
+ }
+ isHorizontal() {
+ return "top" === this.options.position || "bottom" === this.options.position;
+ }
+ draw() {
+ if (this.options.display) {
+ const t = this.ctx;
+ Pe(t, this), this._draw(), De(t);
+ }
+ }
+ _draw() {
+ const { options: t, columnSizes: e, lineWidths: i, ctx: s } = this,
+ { align: n, labels: o } = t,
+ a = ne.color,
+ l = yi(t.rtl, this.left, this.width),
+ h = mi(o.font),
+ { color: c, padding: d } = o,
+ u = h.size,
+ f = u / 2;
+ let g;
+ this.drawTitle(),
+ s.textAlign = l.textAlign("left"),
+ s.textBaseline = "middle",
+ s.lineWidth = .5,
+ s.font = h.string;
+ const { boxWidth: p, boxHeight: m, itemHeight: b } = Lo(o, u),
+ x = this.isHorizontal(),
+ _ = this._computeTitleHeight();
+ g = x
+ ? { x: ut(n, this.left + d, this.right - i[0]), y: this.top + d + _, line: 0 }
+ : { x: this.left + d, y: ut(n, this.top + _ + d, this.bottom - e[0].height), line: 0 },
+ vi(this.ctx, t.textDirection);
+ const y = b + d;
+ this.legendItems.forEach((v, w) => {
+ s.strokeStyle = v.fontColor || c, s.fillStyle = v.fontColor || c;
+ const M = s.measureText(v.text).width,
+ k = l.textAlign(v.textAlign || (v.textAlign = o.textAlign)),
+ S = p + f + M;
+ let P = g.x, D = g.y;
+ l.setWidth(this.width),
+ x
+ ? w > 0 && P + S + d > this.right
+ && (D = g.y += y, g.line++, P = g.x = ut(n, this.left + d, this.right - i[g.line]))
+ : w > 0 && D + y > this.bottom
+ && (P = g.x = P + e[g.line].width + d,
+ g.line++,
+ D = g.y = ut(n, this.top + _ + d, this.bottom - e[g.line].height));
+ !function(t, e, i) {
+ if (isNaN(p) || p <= 0 || isNaN(m) || m < 0) return;
+ s.save();
+ const n = r(i.lineWidth, 1);
+ if (
+ s.fillStyle = r(i.fillStyle, a),
+ s.lineCap = r(i.lineCap, "butt"),
+ s.lineDashOffset = r(i.lineDashOffset, 0),
+ s.lineJoin = r(i.lineJoin, "miter"),
+ s.lineWidth = n,
+ s.strokeStyle = r(i.strokeStyle, a),
+ s.setLineDash(r(i.lineDash, [])),
+ o.usePointStyle
+ ) {
+ const a = { radius: m * Math.SQRT2 / 2, pointStyle: i.pointStyle, rotation: i.rotation, borderWidth: n },
+ r = l.xPlus(t, p / 2);
+ ke(s, a, r, e + f, o.pointStyleWidth && p);
+ } else {
+ const o = e + Math.max((u - m) / 2, 0), a = l.leftForLtr(t, p), r = gi(i.borderRadius);
+ s.beginPath(),
+ Object.values(r).some(t => 0 !== t) ? Le(s, { x: a, y: o, w: p, h: m, radius: r }) : s.rect(a, o, p, m),
+ s.fill(),
+ 0 !== n && s.stroke();
+ }
+ s.restore();
+ }(l.x(P), D, v),
+ P = ft(k, P + p + f, x ? P + S : this.right, t.rtl),
+ function(t, e, i) {
+ Ae(s, i.text, t, e + b / 2, h, { strikethrough: i.hidden, textAlign: l.textAlign(i.textAlign) });
+ }(l.x(P), D, v),
+ x ? g.x += S + d : g.y += y;
+ }), wi(this.ctx, t.textDirection);
+ }
+ drawTitle() {
+ const t = this.options, e = t.title, i = mi(e.font), s = pi(e.padding);
+ if (!e.display) return;
+ const n = yi(t.rtl, this.left, this.width), o = this.ctx, a = e.position, r = i.size / 2, l = s.top + r;
+ let h, c = this.left, d = this.width;
+ if (this.isHorizontal()) d = Math.max(...this.lineWidths), h = this.top + l, c = ut(t.align, c, this.right - d);
+ else {
+ const e = this.columnSizes.reduce((t, e) => Math.max(t, e.height), 0);
+ h = l + ut(t.align, this.top, this.bottom - e - t.labels.padding - this._computeTitleHeight());
+ }
+ const u = ut(a, c, c + d);
+ o.textAlign = n.textAlign(dt(a)),
+ o.textBaseline = "middle",
+ o.strokeStyle = e.color,
+ o.fillStyle = e.color,
+ o.font = i.string,
+ Ae(o, e.text, u, h, i);
+ }
+ _computeTitleHeight() {
+ const t = this.options.title, e = mi(t.font), i = pi(t.padding);
+ return t.display ? e.lineHeight + i.height : 0;
+ }
+ _getLegendItemAt(t, e) {
+ let i, s, n;
+ if (Q(t, this.left, this.right) && Q(e, this.top, this.bottom)) {
+ for (n = this.legendHitBoxes, i = 0; i < n.length; ++i) {
+ if (s = n[i], Q(t, s.left, s.left + s.width) && Q(e, s.top, s.top + s.height)) return this.legendItems[i];
+ }
+ }
+ return null;
+ }
+ handleEvent(t) {
+ const e = this.options;
+ if (
+ !function(t, e) {
+ if (("mousemove" === t || "mouseout" === t) && (e.onHover || e.onLeave)) return !0;
+ if (e.onClick && ("click" === t || "mouseup" === t)) return !0;
+ return !1;
+ }(t.type, e)
+ ) return;
+ const i = this._getLegendItemAt(t.x, t.y);
+ if ("mousemove" === t.type || "mouseout" === t.type) {
+ const o = this._hoveredItem,
+ a = (n = i, null !== (s = o) && null !== n && s.datasetIndex === n.datasetIndex && s.index === n.index);
+ o && !a && c(e.onLeave, [t, o, this], this), this._hoveredItem = i, i && !a && c(e.onHover, [t, i, this], this);
+ } else i && c(e.onClick, [t, i, this], this);
+ var s, n;
+ }
+ }
+ var Ro = {
+ id: "legend",
+ _element: Eo,
+ start(t, e, i) {
+ const s = t.legend = new Eo({ ctx: t.ctx, options: i, chart: t });
+ Zi.configure(t, s, i), Zi.addBox(t, s);
+ },
+ stop(t) {
+ Zi.removeBox(t, t.legend), delete t.legend;
+ },
+ beforeUpdate(t, e, i) {
+ const s = t.legend;
+ Zi.configure(t, s, i), s.options = i;
+ },
+ afterUpdate(t) {
+ const e = t.legend;
+ e.buildLabels(), e.adjustHitBoxes();
+ },
+ afterEvent(t, e) {
+ e.replay || t.legend.handleEvent(e.event);
+ },
+ defaults: {
+ display: !0,
+ position: "top",
+ align: "center",
+ fullSize: !0,
+ reverse: !1,
+ weight: 1e3,
+ onClick(t, e, i) {
+ const s = e.datasetIndex, n = i.chart;
+ n.isDatasetVisible(s) ? (n.hide(s), e.hidden = !0) : (n.show(s), e.hidden = !1);
+ },
+ onHover: null,
+ onLeave: null,
+ labels: {
+ color: t => t.chart.options.color,
+ boxWidth: 40,
+ padding: 10,
+ generateLabels(t) {
+ const e = t.data.datasets,
+ { labels: { usePointStyle: i, pointStyle: s, textAlign: n, color: o } } = t.legend.options;
+ return t._getSortedDatasetMetas().map(t => {
+ const a = t.controller.getStyle(i ? 0 : void 0), r = pi(a.borderWidth);
+ return {
+ text: e[t.index].label,
+ fillStyle: a.backgroundColor,
+ fontColor: o,
+ hidden: !t.visible,
+ lineCap: a.borderCapStyle,
+ lineDash: a.borderDash,
+ lineDashOffset: a.borderDashOffset,
+ lineJoin: a.borderJoinStyle,
+ lineWidth: (r.width + r.height) / 4,
+ strokeStyle: a.borderColor,
+ pointStyle: s || a.pointStyle,
+ rotation: a.rotation,
+ textAlign: n || a.textAlign,
+ borderRadius: 0,
+ datasetIndex: t.index,
+ };
+ }, this);
+ },
+ },
+ title: { color: t => t.chart.options.color, display: !1, position: "center", text: "" },
+ },
+ descriptors: {
+ _scriptable: t => !t.startsWith("on"),
+ labels: { _scriptable: t => !["generateLabels", "filter", "sort"].includes(t) },
+ },
+ };
+ class Io extends Es {
+ constructor(t) {
+ super(),
+ this.chart = t.chart,
+ this.options = t.options,
+ this.ctx = t.ctx,
+ this._padding = void 0,
+ this.top = void 0,
+ this.bottom = void 0,
+ this.left = void 0,
+ this.right = void 0,
+ this.width = void 0,
+ this.height = void 0,
+ this.position = void 0,
+ this.weight = void 0,
+ this.fullSize = void 0;
+ }
+ update(t, e) {
+ const i = this.options;
+ if (this.left = 0, this.top = 0, !i.display) {
+ return void (this.width =
+ this.height =
+ this.right =
+ this.bottom =
+ 0);
+ }
+ this.width = this.right = t, this.height = this.bottom = e;
+ const n = s(i.text) ? i.text.length : 1;
+ this._padding = pi(i.padding);
+ const o = n * mi(i.font).lineHeight + this._padding.height;
+ this.isHorizontal() ? this.height = o : this.width = o;
+ }
+ isHorizontal() {
+ const t = this.options.position;
+ return "top" === t || "bottom" === t;
+ }
+ _drawArgs(t) {
+ const { top: e, left: i, bottom: s, right: n, options: o } = this, a = o.align;
+ let r, l, h, c = 0;
+ return this.isHorizontal()
+ ? (l = ut(a, i, n), h = e + t, r = n - i)
+ : ("left" === o.position ? (l = i + t, h = ut(a, s, e), c = -.5 * D) : (l = n - t, h = ut(a, e, s), c = .5 * D),
+ r = s - e),
+ { titleX: l, titleY: h, maxWidth: r, rotation: c };
+ }
+ draw() {
+ const t = this.ctx, e = this.options;
+ if (!e.display) return;
+ const i = mi(e.font),
+ s = i.lineHeight / 2 + this._padding.top,
+ { titleX: n, titleY: o, maxWidth: a, rotation: r } = this._drawArgs(s);
+ Ae(t, e.text, 0, 0, i, {
+ color: e.color,
+ maxWidth: a,
+ rotation: r,
+ textAlign: dt(e.align),
+ textBaseline: "middle",
+ translation: [n, o],
+ });
+ }
+ }
+ var zo = {
+ id: "title",
+ _element: Io,
+ start(t, e, i) {
+ !function(t, e) {
+ const i = new Io({ ctx: t.ctx, options: e, chart: t });
+ Zi.configure(t, i, e), Zi.addBox(t, i), t.titleBlock = i;
+ }(t, i);
+ },
+ stop(t) {
+ const e = t.titleBlock;
+ Zi.removeBox(t, e), delete t.titleBlock;
+ },
+ beforeUpdate(t, e, i) {
+ const s = t.titleBlock;
+ Zi.configure(t, s, i), s.options = i;
+ },
+ defaults: {
+ align: "center",
+ display: !1,
+ font: { weight: "bold" },
+ fullSize: !0,
+ padding: 10,
+ position: "top",
+ text: "",
+ weight: 2e3,
+ },
+ defaultRoutes: { color: "color" },
+ descriptors: { _scriptable: !0, _indexable: !1 },
+ };
+ const Fo = new WeakMap();
+ var Vo = {
+ id: "subtitle",
+ start(t, e, i) {
+ const s = new Io({ ctx: t.ctx, options: i, chart: t });
+ Zi.configure(t, s, i), Zi.addBox(t, s), Fo.set(t, s);
+ },
+ stop(t) {
+ Zi.removeBox(t, Fo.get(t)), Fo.delete(t);
+ },
+ beforeUpdate(t, e, i) {
+ const s = Fo.get(t);
+ Zi.configure(t, s, i), s.options = i;
+ },
+ defaults: {
+ align: "center",
+ display: !1,
+ font: { weight: "normal" },
+ fullSize: !0,
+ padding: 0,
+ position: "top",
+ text: "",
+ weight: 1500,
+ },
+ defaultRoutes: { color: "color" },
+ descriptors: { _scriptable: !0, _indexable: !1 },
+ };
+ const Bo = {
+ average(t) {
+ if (!t.length) return !1;
+ let e, i, s = 0, n = 0, o = 0;
+ for (e = 0, i = t.length; e < i; ++e) {
+ const i = t[e].element;
+ if (i && i.hasValue()) {
+ const t = i.tooltipPosition();
+ s += t.x, n += t.y, ++o;
+ }
+ }
+ return { x: s / o, y: n / o };
+ },
+ nearest(t, e) {
+ if (!t.length) return !1;
+ let i, s, n, o = e.x, a = e.y, r = Number.POSITIVE_INFINITY;
+ for (i = 0, s = t.length; i < s; ++i) {
+ const s = t[i].element;
+ if (s && s.hasValue()) {
+ const t = X(e, s.getCenterPoint());
+ t < r && (r = t, n = s);
+ }
+ }
+ if (n) {
+ const t = n.tooltipPosition();
+ o = t.x, a = t.y;
+ }
+ return { x: o, y: a };
+ },
+ };
+ function No(t, e) {
+ return e && (s(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t;
+ }
+ function Wo(t) {
+ return ("string" == typeof t || t instanceof String) && t.indexOf("\n") > -1 ? t.split("\n") : t;
+ }
+ function jo(t, e) {
+ const { element: i, datasetIndex: s, index: n } = e,
+ o = t.getDatasetMeta(s).controller,
+ { label: a, value: r } = o.getLabelAndValue(n);
+ return {
+ chart: t,
+ label: a,
+ parsed: o.getParsed(n),
+ raw: t.data.datasets[s].data[n],
+ formattedValue: r,
+ dataset: o.getDataset(),
+ dataIndex: n,
+ datasetIndex: s,
+ element: i,
+ };
+ }
+ function Ho(t, e) {
+ const i = t.chart.ctx,
+ { body: s, footer: n, title: o } = t,
+ { boxWidth: a, boxHeight: r } = e,
+ l = mi(e.bodyFont),
+ h = mi(e.titleFont),
+ c = mi(e.footerFont),
+ u = o.length,
+ f = n.length,
+ g = s.length,
+ p = pi(e.padding);
+ let m = p.height, b = 0, x = s.reduce((t, e) => t + e.before.length + e.lines.length + e.after.length, 0);
+ if (
+ x += t.beforeBody.length + t.afterBody.length,
+ u && (m += u * h.lineHeight + (u - 1) * e.titleSpacing + e.titleMarginBottom),
+ x
+ ) {
+ m += g * (e.displayColors ? Math.max(r, l.lineHeight) : l.lineHeight) + (x - g) * l.lineHeight
+ + (x - 1) * e.bodySpacing;
+ }
+ f && (m += e.footerMarginTop + f * c.lineHeight + (f - 1) * e.footerSpacing);
+ let _ = 0;
+ const y = function(t) {
+ b = Math.max(b, i.measureText(t).width + _);
+ };
+ return i.save(),
+ i.font = h.string,
+ d(t.title, y),
+ i.font = l.string,
+ d(t.beforeBody.concat(t.afterBody), y),
+ _ = e.displayColors ? a + 2 + e.boxPadding : 0,
+ d(s, t => {
+ d(t.before, y), d(t.lines, y), d(t.after, y);
+ }),
+ _ = 0,
+ i.font = c.string,
+ d(t.footer, y),
+ i.restore(),
+ b += p.width,
+ { width: b, height: m };
+ }
+ function $o(t, e, i, s) {
+ const { x: n, width: o } = i, { width: a, chartArea: { left: r, right: l } } = t;
+ let h = "center";
+ return "center" === s
+ ? h = n <= (r + l) / 2 ? "left" : "right"
+ : n <= o / 2
+ ? h = "left"
+ : n >= a - o / 2 && (h = "right"),
+ function(t, e, i, s) {
+ const { x: n, width: o } = s, a = i.caretSize + i.caretPadding;
+ return "left" === t && n + o + a > e.width || "right" === t && n - o - a < 0 || void 0;
+ }(h, t, e, i) && (h = "center"),
+ h;
+ }
+ function Yo(t, e, i) {
+ const s = i.yAlign || e.yAlign || function(t, e) {
+ const { y: i, height: s } = e;
+ return i < s / 2 ? "top" : i > t.height - s / 2 ? "bottom" : "center";
+ }(t, i);
+ return { xAlign: i.xAlign || e.xAlign || $o(t, e, i, s), yAlign: s };
+ }
+ function Uo(t, e, i, s) {
+ const { caretSize: n, caretPadding: o, cornerRadius: a } = t,
+ { xAlign: r, yAlign: l } = i,
+ h = n + o,
+ { topLeft: c, topRight: d, bottomLeft: u, bottomRight: f } = gi(a);
+ let g = function(t, e) {
+ let { x: i, width: s } = t;
+ return "right" === e ? i -= s : "center" === e && (i -= s / 2), i;
+ }(e, r);
+ const p = function(t, e, i) {
+ let { y: s, height: n } = t;
+ return "top" === e ? s += i : s -= "bottom" === e ? n + i : n / 2, s;
+ }(e, l, h);
+ return "center" === l
+ ? "left" === r ? g += h : "right" === r && (g -= h)
+ : "left" === r
+ ? g -= Math.max(c, u) + n
+ : "right" === r && (g += Math.max(d, f) + n),
+ { x: Z(g, 0, s.width - e.width), y: Z(p, 0, s.height - e.height) };
+ }
+ function Xo(t, e, i) {
+ const s = pi(i.padding);
+ return "center" === e ? t.x + t.width / 2 : "right" === e ? t.x + t.width - s.right : t.x + s.left;
+ }
+ function qo(t) {
+ return No([], Wo(t));
+ }
+ function Ko(t, e) {
+ const i = e && e.dataset && e.dataset.tooltip && e.dataset.tooltip.callbacks;
+ return i ? t.override(i) : t;
+ }
+ class Go extends Es {
+ constructor(t) {
+ super(),
+ this.opacity = 0,
+ this._active = [],
+ this._eventPosition = void 0,
+ this._size = void 0,
+ this._cachedAnimations = void 0,
+ this._tooltipItems = [],
+ this.$animations = void 0,
+ this.$context = void 0,
+ this.chart = t.chart || t._chart,
+ this._chart = this.chart,
+ this.options = t.options,
+ this.dataPoints = void 0,
+ this.title = void 0,
+ this.beforeBody = void 0,
+ this.body = void 0,
+ this.afterBody = void 0,
+ this.footer = void 0,
+ this.xAlign = void 0,
+ this.yAlign = void 0,
+ this.x = void 0,
+ this.y = void 0,
+ this.height = void 0,
+ this.width = void 0,
+ this.caretX = void 0,
+ this.caretY = void 0,
+ this.labelColors = void 0,
+ this.labelPointStyles = void 0,
+ this.labelTextColors = void 0;
+ }
+ initialize(t) {
+ this.options = t, this._cachedAnimations = void 0, this.$context = void 0;
+ }
+ _resolveAnimations() {
+ const t = this._cachedAnimations;
+ if (t) return t;
+ const e = this.chart,
+ i = this.options.setContext(this.getContext()),
+ s = i.enabled && e.options.animation && i.animations,
+ n = new ys(this.chart, s);
+ return s._cacheable && (this._cachedAnimations = Object.freeze(n)), n;
+ }
+ getContext() {
+ return this.$context
+ || (this.$context =
+ (t = this.chart.getContext(),
+ e = this,
+ i = this._tooltipItems,
+ _i(t, { tooltip: e, tooltipItems: i, type: "tooltip" })));
+ var t, e, i;
+ }
+ getTitle(t, e) {
+ const { callbacks: i } = e,
+ s = i.beforeTitle.apply(this, [t]),
+ n = i.title.apply(this, [t]),
+ o = i.afterTitle.apply(this, [t]);
+ let a = [];
+ return a = No(a, Wo(s)), a = No(a, Wo(n)), a = No(a, Wo(o)), a;
+ }
+ getBeforeBody(t, e) {
+ return qo(e.callbacks.beforeBody.apply(this, [t]));
+ }
+ getBody(t, e) {
+ const { callbacks: i } = e, s = [];
+ return d(t, t => {
+ const e = { before: [], lines: [], after: [] }, n = Ko(i, t);
+ No(e.before, Wo(n.beforeLabel.call(this, t))),
+ No(e.lines, n.label.call(this, t)),
+ No(e.after, Wo(n.afterLabel.call(this, t))),
+ s.push(e);
+ }),
+ s;
+ }
+ getAfterBody(t, e) {
+ return qo(e.callbacks.afterBody.apply(this, [t]));
+ }
+ getFooter(t, e) {
+ const { callbacks: i } = e,
+ s = i.beforeFooter.apply(this, [t]),
+ n = i.footer.apply(this, [t]),
+ o = i.afterFooter.apply(this, [t]);
+ let a = [];
+ return a = No(a, Wo(s)), a = No(a, Wo(n)), a = No(a, Wo(o)), a;
+ }
+ _createItems(t) {
+ const e = this._active, i = this.chart.data, s = [], n = [], o = [];
+ let a, r, l = [];
+ for (a = 0, r = e.length; a < r; ++a) l.push(jo(this.chart, e[a]));
+ return t.filter && (l = l.filter((e, s, n) => t.filter(e, s, n, i))),
+ t.itemSort && (l = l.sort((e, s) => t.itemSort(e, s, i))),
+ d(l, e => {
+ const i = Ko(t.callbacks, e);
+ s.push(i.labelColor.call(this, e)),
+ n.push(i.labelPointStyle.call(this, e)),
+ o.push(i.labelTextColor.call(this, e));
+ }),
+ this.labelColors = s,
+ this.labelPointStyles = n,
+ this.labelTextColors = o,
+ this.dataPoints = l,
+ l;
+ }
+ update(t, e) {
+ const i = this.options.setContext(this.getContext()), s = this._active;
+ let n, o = [];
+ if (s.length) {
+ const t = Bo[i.position].call(this, s, this._eventPosition);
+ o = this._createItems(i),
+ this.title = this.getTitle(o, i),
+ this.beforeBody = this.getBeforeBody(o, i),
+ this.body = this.getBody(o, i),
+ this.afterBody = this.getAfterBody(o, i),
+ this.footer = this.getFooter(o, i);
+ const e = this._size = Ho(this, i),
+ a = Object.assign({}, t, e),
+ r = Yo(this.chart, i, a),
+ l = Uo(i, a, r, this.chart);
+ this.xAlign = r.xAlign,
+ this.yAlign = r.yAlign,
+ n = { opacity: 1, x: l.x, y: l.y, width: e.width, height: e.height, caretX: t.x, caretY: t.y };
+ } else 0 !== this.opacity && (n = { opacity: 0 });
+ this._tooltipItems = o,
+ this.$context = void 0,
+ n && this._resolveAnimations().update(this, n),
+ t && i.external && i.external.call(this, { chart: this.chart, tooltip: this, replay: e });
+ }
+ drawCaret(t, e, i, s) {
+ const n = this.getCaretPosition(t, i, s);
+ e.lineTo(n.x1, n.y1), e.lineTo(n.x2, n.y2), e.lineTo(n.x3, n.y3);
+ }
+ getCaretPosition(t, e, i) {
+ const { xAlign: s, yAlign: n } = this,
+ { caretSize: o, cornerRadius: a } = i,
+ { topLeft: r, topRight: l, bottomLeft: h, bottomRight: c } = gi(a),
+ { x: d, y: u } = t,
+ { width: f, height: g } = e;
+ let p, m, b, x, _, y;
+ return "center" === n
+ ? (_ = u + g / 2,
+ "left" === s ? (p = d, m = p - o, x = _ + o, y = _ - o) : (p = d + f, m = p + o, x = _ - o, y = _ + o),
+ b = p)
+ : (m = "left" === s ? d + Math.max(r, h) + o : "right" === s ? d + f - Math.max(l, c) - o : this.caretX,
+ "top" === n ? (x = u, _ = x - o, p = m - o, b = m + o) : (x = u + g, _ = x + o, p = m + o, b = m - o),
+ y = x),
+ { x1: p, x2: m, x3: b, y1: x, y2: _, y3: y };
+ }
+ drawTitle(t, e, i) {
+ const s = this.title, n = s.length;
+ let o, a, r;
+ if (n) {
+ const l = yi(i.rtl, this.x, this.width);
+ for (
+ t.x = Xo(this, i.titleAlign, i),
+ e.textAlign = l.textAlign(i.titleAlign),
+ e.textBaseline = "middle",
+ o = mi(i.titleFont),
+ a = i.titleSpacing,
+ e.fillStyle = i.titleColor,
+ e.font = o.string,
+ r = 0;
+ r < n;
+ ++r
+ ) {
+ e.fillText(s[r], l.x(t.x), t.y + o.lineHeight / 2),
+ t.y += o.lineHeight + a,
+ r + 1 === n && (t.y += i.titleMarginBottom - a);
+ }
+ }
+ }
+ _drawColorBox(t, e, i, s, o) {
+ const a = this.labelColors[i],
+ r = this.labelPointStyles[i],
+ { boxHeight: l, boxWidth: h, boxPadding: c } = o,
+ d = mi(o.bodyFont),
+ u = Xo(this, "left", o),
+ f = s.x(u),
+ g = l < d.lineHeight ? (d.lineHeight - l) / 2 : 0,
+ p = e.y + g;
+ if (o.usePointStyle) {
+ const e = { radius: Math.min(h, l) / 2, pointStyle: r.pointStyle, rotation: r.rotation, borderWidth: 1 },
+ i = s.leftForLtr(f, h) + h / 2,
+ n = p + l / 2;
+ t.strokeStyle = o.multiKeyBackground,
+ t.fillStyle = o.multiKeyBackground,
+ Me(t, e, i, n),
+ t.strokeStyle = a.borderColor,
+ t.fillStyle = a.backgroundColor,
+ Me(t, e, i, n);
+ } else {
+ t.lineWidth = n(a.borderWidth) ? Math.max(...Object.values(a.borderWidth)) : a.borderWidth || 1,
+ t.strokeStyle = a.borderColor,
+ t.setLineDash(a.borderDash || []),
+ t.lineDashOffset = a.borderDashOffset || 0;
+ const e = s.leftForLtr(f, h - c), i = s.leftForLtr(s.xPlus(f, 1), h - c - 2), r = gi(a.borderRadius);
+ Object.values(r).some(t => 0 !== t)
+ ? (t.beginPath(),
+ t.fillStyle = o.multiKeyBackground,
+ Le(t, { x: e, y: p, w: h, h: l, radius: r }),
+ t.fill(),
+ t.stroke(),
+ t.fillStyle = a.backgroundColor,
+ t.beginPath(),
+ Le(t, { x: i, y: p + 1, w: h - 2, h: l - 2, radius: r }),
+ t.fill())
+ : (t.fillStyle = o.multiKeyBackground,
+ t.fillRect(e, p, h, l),
+ t.strokeRect(e, p, h, l),
+ t.fillStyle = a.backgroundColor,
+ t.fillRect(i, p + 1, h - 2, l - 2));
+ }
+ t.fillStyle = this.labelTextColors[i];
+ }
+ drawBody(t, e, i) {
+ const { body: s } = this,
+ { bodySpacing: n, bodyAlign: o, displayColors: a, boxHeight: r, boxWidth: l, boxPadding: h } = i,
+ c = mi(i.bodyFont);
+ let u = c.lineHeight, f = 0;
+ const g = yi(i.rtl, this.x, this.width),
+ p = function(i) {
+ e.fillText(i, g.x(t.x + f), t.y + u / 2), t.y += u + n;
+ },
+ m = g.textAlign(o);
+ let b, x, _, y, v, w, M;
+ for (
+ e.textAlign = o,
+ e.textBaseline = "middle",
+ e.font = c.string,
+ t.x = Xo(this, m, i),
+ e.fillStyle = i.bodyColor,
+ d(this.beforeBody, p),
+ f = a && "right" !== m ? "center" === o ? l / 2 + h : l + 2 + h : 0,
+ y = 0,
+ w = s.length;
+ y < w;
+ ++y
+ ) {
+ for (
+ b = s[y],
+ x = this.labelTextColors[y],
+ e.fillStyle = x,
+ d(b.before, p),
+ _ = b.lines,
+ a && _.length && (this._drawColorBox(e, t, y, g, i), u = Math.max(c.lineHeight, r)),
+ v = 0,
+ M = _.length;
+ v < M;
+ ++v
+ ) p(_[v]), u = c.lineHeight;
+ d(b.after, p);
+ }
+ f = 0, u = c.lineHeight, d(this.afterBody, p), t.y -= n;
+ }
+ drawFooter(t, e, i) {
+ const s = this.footer, n = s.length;
+ let o, a;
+ if (n) {
+ const r = yi(i.rtl, this.x, this.width);
+ for (
+ t.x = Xo(this, i.footerAlign, i),
+ t.y += i.footerMarginTop,
+ e.textAlign = r.textAlign(i.footerAlign),
+ e.textBaseline = "middle",
+ o = mi(i.footerFont),
+ e.fillStyle = i.footerColor,
+ e.font = o.string,
+ a = 0;
+ a < n;
+ ++a
+ ) e.fillText(s[a], r.x(t.x), t.y + o.lineHeight / 2), t.y += o.lineHeight + i.footerSpacing;
+ }
+ }
+ drawBackground(t, e, i, s) {
+ const { xAlign: n, yAlign: o } = this,
+ { x: a, y: r } = t,
+ { width: l, height: h } = i,
+ { topLeft: c, topRight: d, bottomLeft: u, bottomRight: f } = gi(s.cornerRadius);
+ e.fillStyle = s.backgroundColor,
+ e.strokeStyle = s.borderColor,
+ e.lineWidth = s.borderWidth,
+ e.beginPath(),
+ e.moveTo(a + c, r),
+ "top" === o && this.drawCaret(t, e, i, s),
+ e.lineTo(a + l - d, r),
+ e.quadraticCurveTo(a + l, r, a + l, r + d),
+ "center" === o && "right" === n && this.drawCaret(t, e, i, s),
+ e.lineTo(a + l, r + h - f),
+ e.quadraticCurveTo(a + l, r + h, a + l - f, r + h),
+ "bottom" === o && this.drawCaret(t, e, i, s),
+ e.lineTo(a + u, r + h),
+ e.quadraticCurveTo(a, r + h, a, r + h - u),
+ "center" === o && "left" === n && this.drawCaret(t, e, i, s),
+ e.lineTo(a, r + c),
+ e.quadraticCurveTo(a, r, a + c, r),
+ e.closePath(),
+ e.fill(),
+ s.borderWidth > 0 && e.stroke();
+ }
+ _updateAnimationTarget(t) {
+ const e = this.chart, i = this.$animations, s = i && i.x, n = i && i.y;
+ if (s || n) {
+ const i = Bo[t.position].call(this, this._active, this._eventPosition);
+ if (!i) return;
+ const o = this._size = Ho(this, t), a = Object.assign({}, i, this._size), r = Yo(e, t, a), l = Uo(t, a, r, e);
+ s._to === l.x && n._to === l.y
+ || (this.xAlign = r.xAlign,
+ this.yAlign = r.yAlign,
+ this.width = o.width,
+ this.height = o.height,
+ this.caretX = i.x,
+ this.caretY = i.y,
+ this._resolveAnimations().update(this, l));
+ }
+ }
+ _willRender() {
+ return !!this.opacity;
+ }
+ draw(t) {
+ const e = this.options.setContext(this.getContext());
+ let i = this.opacity;
+ if (!i) return;
+ this._updateAnimationTarget(e);
+ const s = { width: this.width, height: this.height }, n = { x: this.x, y: this.y };
+ i = Math.abs(i) < .001 ? 0 : i;
+ const o = pi(e.padding),
+ a = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length
+ || this.footer.length;
+ e.enabled && a
+ && (t.save(),
+ t.globalAlpha = i,
+ this.drawBackground(n, t, s, e),
+ vi(t, e.textDirection),
+ n.y += o.top,
+ this.drawTitle(n, t, e),
+ this.drawBody(n, t, e),
+ this.drawFooter(n, t, e),
+ wi(t, e.textDirection),
+ t.restore());
+ }
+ getActiveElements() {
+ return this._active || [];
+ }
+ setActiveElements(t, e) {
+ const i = this._active,
+ s = t.map(({ datasetIndex: t, index: e }) => {
+ const i = this.chart.getDatasetMeta(t);
+ if (!i) throw new Error("Cannot find a dataset at index " + t);
+ return { datasetIndex: t, element: i.data[e], index: e };
+ }),
+ n = !u(i, s),
+ o = this._positionChanged(s, e);
+ (n || o) && (this._active = s, this._eventPosition = e, this._ignoreReplayEvents = !0, this.update(!0));
+ }
+ handleEvent(t, e, i = !0) {
+ if (e && this._ignoreReplayEvents) return !1;
+ this._ignoreReplayEvents = !1;
+ const s = this.options,
+ n = this._active || [],
+ o = this._getActiveElements(t, n, e, i),
+ a = this._positionChanged(o, t),
+ r = e || !u(o, n) || a;
+ return r
+ && (this._active = o,
+ (s.enabled || s.external) && (this._eventPosition = { x: t.x, y: t.y }, this.update(!0, e))),
+ r;
+ }
+ _getActiveElements(t, e, i, s) {
+ const n = this.options;
+ if ("mouseout" === t.type) return [];
+ if (!s) return e;
+ const o = this.chart.getElementsAtEventForMode(t, n.mode, n, i);
+ return n.reverse && o.reverse(), o;
+ }
+ _positionChanged(t, e) {
+ const { caretX: i, caretY: s, options: n } = this, o = Bo[n.position].call(this, t, e);
+ return !1 !== o && (i !== o.x || s !== o.y);
+ }
+ }
+ Go.positioners = Bo;
+ var Zo = {
+ id: "tooltip",
+ _element: Go,
+ positioners: Bo,
+ afterInit(t, e, i) {
+ i && (t.tooltip = new Go({ chart: t, options: i }));
+ },
+ beforeUpdate(t, e, i) {
+ t.tooltip && t.tooltip.initialize(i);
+ },
+ reset(t, e, i) {
+ t.tooltip && t.tooltip.initialize(i);
+ },
+ afterDraw(t) {
+ const e = t.tooltip;
+ if (e && e._willRender()) {
+ const i = { tooltip: e };
+ if (!1 === t.notifyPlugins("beforeTooltipDraw", i)) return;
+ e.draw(t.ctx), t.notifyPlugins("afterTooltipDraw", i);
+ }
+ },
+ afterEvent(t, e) {
+ if (t.tooltip) {
+ const i = e.replay;
+ t.tooltip.handleEvent(e.event, i, e.inChartArea) && (e.changed = !0);
+ }
+ },
+ defaults: {
+ enabled: !0,
+ external: null,
+ position: "average",
+ backgroundColor: "rgba(0,0,0,0.8)",
+ titleColor: "#fff",
+ titleFont: { weight: "bold" },
+ titleSpacing: 2,
+ titleMarginBottom: 6,
+ titleAlign: "left",
+ bodyColor: "#fff",
+ bodySpacing: 2,
+ bodyFont: {},
+ bodyAlign: "left",
+ footerColor: "#fff",
+ footerSpacing: 2,
+ footerMarginTop: 6,
+ footerFont: { weight: "bold" },
+ footerAlign: "left",
+ padding: 6,
+ caretPadding: 2,
+ caretSize: 5,
+ cornerRadius: 6,
+ boxHeight: (t, e) => e.bodyFont.size,
+ boxWidth: (t, e) => e.bodyFont.size,
+ multiKeyBackground: "#fff",
+ displayColors: !0,
+ boxPadding: 0,
+ borderColor: "rgba(0,0,0,0)",
+ borderWidth: 0,
+ animation: { duration: 400, easing: "easeOutQuart" },
+ animations: {
+ numbers: { type: "number", properties: ["x", "y", "width", "height", "caretX", "caretY"] },
+ opacity: { easing: "linear", duration: 200 },
+ },
+ callbacks: {
+ beforeTitle: t,
+ title(t) {
+ if (t.length > 0) {
+ const e = t[0], i = e.chart.data.labels, s = i ? i.length : 0;
+ if (this && this.options && "dataset" === this.options.mode) return e.dataset.label || "";
+ if (e.label) return e.label;
+ if (s > 0 && e.dataIndex < s) return i[e.dataIndex];
+ }
+ return "";
+ },
+ afterTitle: t,
+ beforeBody: t,
+ beforeLabel: t,
+ label(t) {
+ if (this && this.options && "dataset" === this.options.mode) {
+ return t.label + ": " + t.formattedValue || t.formattedValue;
+ }
+ let e = t.dataset.label || "";
+ e && (e += ": ");
+ const s = t.formattedValue;
+ return i(s) || (e += s), e;
+ },
+ labelColor(t) {
+ const e = t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);
+ return {
+ borderColor: e.borderColor,
+ backgroundColor: e.backgroundColor,
+ borderWidth: e.borderWidth,
+ borderDash: e.borderDash,
+ borderDashOffset: e.borderDashOffset,
+ borderRadius: 0,
+ };
+ },
+ labelTextColor() {
+ return this.options.bodyColor;
+ },
+ labelPointStyle(t) {
+ const e = t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);
+ return { pointStyle: e.pointStyle, rotation: e.rotation };
+ },
+ afterLabel: t,
+ afterBody: t,
+ beforeFooter: t,
+ footer: t,
+ afterFooter: t,
+ },
+ },
+ defaultRoutes: { bodyFont: "font", footerFont: "font", titleFont: "font" },
+ descriptors: {
+ _scriptable: t => "filter" !== t && "itemSort" !== t && "external" !== t,
+ _indexable: !1,
+ callbacks: { _scriptable: !1, _indexable: !1 },
+ animation: { _fallback: !1 },
+ animations: { _fallback: "animation" },
+ },
+ additionalOptionScopes: ["interaction"],
+ },
+ Jo = Object.freeze({
+ __proto__: null,
+ Decimation: go,
+ Filler: To,
+ Legend: Ro,
+ SubTitle: Vo,
+ Title: zo,
+ Tooltip: Zo,
+ });
+ function Qo(t, e, i, s) {
+ const n = t.indexOf(e);
+ if (-1 === n) {
+ return ((
+ t,
+ e,
+ i,
+ s,
+ ) => ("string" == typeof e ? (i = t.push(e) - 1, s.unshift({ index: i, label: e })) : isNaN(e) && (i = null), i))(
+ t,
+ e,
+ i,
+ s,
+ );
+ }
+ return n !== t.lastIndexOf(e) ? i : n;
+ }
+ class ta extends $s {
+ constructor(t) {
+ super(t), this._startValue = void 0, this._valueRange = 0, this._addedLabels = [];
+ }
+ init(t) {
+ const e = this._addedLabels;
+ if (e.length) {
+ const t = this.getLabels();
+ for (const { index: i, label: s } of e) t[i] === s && t.splice(i, 1);
+ this._addedLabels = [];
+ }
+ super.init(t);
+ }
+ parse(t, e) {
+ if (i(t)) return null;
+ const s = this.getLabels();
+ return ((t, e) => null === t ? null : Z(Math.round(t), 0, e))(
+ e = isFinite(e) && s[e] === t ? e : Qo(s, t, r(e, t), this._addedLabels),
+ s.length - 1,
+ );
+ }
+ determineDataLimits() {
+ const { minDefined: t, maxDefined: e } = this.getUserBounds();
+ let { min: i, max: s } = this.getMinMax(!0);
+ "ticks" === this.options.bounds && (t || (i = 0), e || (s = this.getLabels().length - 1)),
+ this.min = i,
+ this.max = s;
+ }
+ buildTicks() {
+ const t = this.min, e = this.max, i = this.options.offset, s = [];
+ let n = this.getLabels();
+ n = 0 === t && e === n.length - 1 ? n : n.slice(t, e + 1),
+ this._valueRange = Math.max(n.length - (i ? 0 : 1), 1),
+ this._startValue = this.min - (i ? .5 : 0);
+ for (let i = t; i <= e; i++) s.push({ value: i });
+ return s;
+ }
+ getLabelForValue(t) {
+ const e = this.getLabels();
+ return t >= 0 && t < e.length ? e[t] : t;
+ }
+ configure() {
+ super.configure(), this.isHorizontal() || (this._reversePixels = !this._reversePixels);
+ }
+ getPixelForValue(t) {
+ return "number" != typeof t && (t = this.parse(t)),
+ null === t ? NaN : this.getPixelForDecimal((t - this._startValue) / this._valueRange);
+ }
+ getPixelForTick(t) {
+ const e = this.ticks;
+ return t < 0 || t > e.length - 1 ? null : this.getPixelForValue(e[t].value);
+ }
+ getValueForPixel(t) {
+ return Math.round(this._startValue + this.getDecimalForPixel(t) * this._valueRange);
+ }
+ getBasePixel() {
+ return this.bottom;
+ }
+ }
+ function ea(t, e, { horizontal: i, minRotation: s }) {
+ const n = H(s), o = (i ? Math.sin(n) : Math.cos(n)) || .001, a = .75 * e * ("" + t).length;
+ return Math.min(e / o, a);
+ }
+ ta.id = "category", ta.defaults = { ticks: { callback: ta.prototype.getLabelForValue } };
+ class ia extends $s {
+ constructor(t) {
+ super(t),
+ this.start = void 0,
+ this.end = void 0,
+ this._startValue = void 0,
+ this._endValue = void 0,
+ this._valueRange = 0;
+ }
+ parse(t, e) {
+ return i(t) || ("number" == typeof t || t instanceof Number) && !isFinite(+t) ? null : +t;
+ }
+ handleTickRangeOptions() {
+ const { beginAtZero: t } = this.options, { minDefined: e, maxDefined: i } = this.getUserBounds();
+ let { min: s, max: n } = this;
+ const o = t => s = e ? s : t, a = t => n = i ? n : t;
+ if (t) {
+ const t = z(s), e = z(n);
+ t < 0 && e < 0 ? a(0) : t > 0 && e > 0 && o(0);
+ }
+ if (s === n) {
+ let e = 1;
+ (n >= Number.MAX_SAFE_INTEGER || s <= Number.MIN_SAFE_INTEGER) && (e = Math.abs(.05 * n)),
+ a(n + e),
+ t || o(s - e);
+ }
+ this.min = s, this.max = n;
+ }
+ getTickLimit() {
+ const t = this.options.ticks;
+ let e, { maxTicksLimit: i, stepSize: s } = t;
+ return s
+ ? (e = Math.ceil(this.max / s) - Math.floor(this.min / s) + 1,
+ e > 1e3
+ && (console.warn(
+ `scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`,
+ ),
+ e = 1e3))
+ : (e = this.computeTickLimit(), i = i || 11),
+ i && (e = Math.min(i, e)),
+ e;
+ }
+ computeTickLimit() {
+ return Number.POSITIVE_INFINITY;
+ }
+ buildTicks() {
+ const t = this.options, e = t.ticks;
+ let s = this.getTickLimit();
+ s = Math.max(2, s);
+ const n = function(t, e) {
+ const s = [],
+ { bounds: n, step: o, min: a, max: r, precision: l, count: h, maxTicks: c, maxDigits: d, includeBounds: u } =
+ t,
+ f = o || 1,
+ g = c - 1,
+ { min: p, max: m } = e,
+ b = !i(a),
+ x = !i(r),
+ _ = !i(h),
+ y = (m - p) / (d + 1);
+ let v, w, M, k, S = F((m - p) / g / f) * f;
+ if (S < 1e-14 && !b && !x) return [{ value: p }, { value: m }];
+ k = Math.ceil(m / S) - Math.floor(p / S),
+ k > g && (S = F(k * S / g / f) * f),
+ i(l) || (v = Math.pow(10, l), S = Math.ceil(S * v) / v),
+ "ticks" === n ? (w = Math.floor(p / S) * S, M = Math.ceil(m / S) * S) : (w = p, M = m),
+ b && x && o && W((r - a) / o, S / 1e3)
+ ? (k = Math.round(Math.min((r - a) / S, c)), S = (r - a) / k, w = a, M = r)
+ : _
+ ? (w = b ? a : w, M = x ? r : M, k = h - 1, S = (M - w) / k)
+ : (k = (M - w) / S, k = N(k, Math.round(k), S / 1e3) ? Math.round(k) : Math.ceil(k));
+ const P = Math.max(Y(S), Y(w));
+ v = Math.pow(10, i(l) ? P : l), w = Math.round(w * v) / v, M = Math.round(M * v) / v;
+ let D = 0;
+ for (
+ b && (u && w !== a
+ ? (s.push({ value: a }), w < a && D++, N(Math.round((w + D * S) * v) / v, a, ea(a, y, t)) && D++)
+ : w < a && D++);
+ D < k;
+ ++D
+ ) s.push({ value: Math.round((w + D * S) * v) / v });
+ return x && u && M !== r
+ ? s.length && N(s[s.length - 1].value, r, ea(r, y, t)) ? s[s.length - 1].value = r : s.push({ value: r })
+ : x && M !== r || s.push({ value: M }),
+ s;
+ }({
+ maxTicks: s,
+ bounds: t.bounds,
+ min: t.min,
+ max: t.max,
+ precision: e.precision,
+ step: e.stepSize,
+ count: e.count,
+ maxDigits: this._maxDigits(),
+ horizontal: this.isHorizontal(),
+ minRotation: e.minRotation || 0,
+ includeBounds: !1 !== e.includeBounds,
+ }, this._range || this);
+ return "ticks" === t.bounds && j(n, this, "value"),
+ t.reverse
+ ? (n.reverse(), this.start = this.max, this.end = this.min)
+ : (this.start = this.min, this.end = this.max),
+ n;
+ }
+ configure() {
+ const t = this.ticks;
+ let e = this.min, i = this.max;
+ if (super.configure(), this.options.offset && t.length) {
+ const s = (i - e) / Math.max(t.length - 1, 1) / 2;
+ e -= s, i += s;
+ }
+ this._startValue = e, this._endValue = i, this._valueRange = i - e;
+ }
+ getLabelForValue(t) {
+ return li(t, this.chart.options.locale, this.options.ticks.format);
+ }
+ }
+ class sa extends ia {
+ determineDataLimits() {
+ const { min: t, max: e } = this.getMinMax(!0);
+ this.min = o(t) ? t : 0, this.max = o(e) ? e : 1, this.handleTickRangeOptions();
+ }
+ computeTickLimit() {
+ const t = this.isHorizontal(),
+ e = t ? this.width : this.height,
+ i = H(this.options.ticks.minRotation),
+ s = (t ? Math.sin(i) : Math.cos(i)) || .001,
+ n = this._resolveTickFontOptions(0);
+ return Math.ceil(e / Math.min(40, n.lineHeight / s));
+ }
+ getPixelForValue(t) {
+ return null === t ? NaN : this.getPixelForDecimal((t - this._startValue) / this._valueRange);
+ }
+ getValueForPixel(t) {
+ return this._startValue + this.getDecimalForPixel(t) * this._valueRange;
+ }
+ }
+ function na(t) {
+ return 1 === t / Math.pow(10, Math.floor(I(t)));
+ }
+ sa.id = "linear", sa.defaults = { ticks: { callback: Is.formatters.numeric } };
+ class oa extends $s {
+ constructor(t) {
+ super(t), this.start = void 0, this.end = void 0, this._startValue = void 0, this._valueRange = 0;
+ }
+ parse(t, e) {
+ const i = ia.prototype.parse.apply(this, [t, e]);
+ if (0 !== i) return o(i) && i > 0 ? i : null;
+ this._zero = !0;
+ }
+ determineDataLimits() {
+ const { min: t, max: e } = this.getMinMax(!0);
+ this.min = o(t) ? Math.max(0, t) : null,
+ this.max = o(e) ? Math.max(0, e) : null,
+ this.options.beginAtZero && (this._zero = !0),
+ this.handleTickRangeOptions();
+ }
+ handleTickRangeOptions() {
+ const { minDefined: t, maxDefined: e } = this.getUserBounds();
+ let i = this.min, s = this.max;
+ const n = e => i = t ? i : e, o = t => s = e ? s : t, a = (t, e) => Math.pow(10, Math.floor(I(t)) + e);
+ i === s && (i <= 0 ? (n(1), o(10)) : (n(a(i, -1)), o(a(s, 1)))),
+ i <= 0 && n(a(s, -1)),
+ s <= 0 && o(a(i, 1)),
+ this._zero && this.min !== this._suggestedMin && i === a(this.min, 0) && n(a(i, -1)),
+ this.min = i,
+ this.max = s;
+ }
+ buildTicks() {
+ const t = this.options,
+ e = function(t, e) {
+ const i = Math.floor(I(e.max)), s = Math.ceil(e.max / Math.pow(10, i)), n = [];
+ let o = a(t.min, Math.pow(10, Math.floor(I(e.min)))),
+ r = Math.floor(I(o)),
+ l = Math.floor(o / Math.pow(10, r)),
+ h = r < 0 ? Math.pow(10, Math.abs(r)) : 1;
+ do {
+ n.push({ value: o, major: na(o) }),
+ ++l,
+ 10 === l && (l = 1, ++r, h = r >= 0 ? 1 : h),
+ o = Math.round(l * Math.pow(10, r) * h) / h;
+ } while (r < i || r === i && l < s);
+ const c = a(t.max, o);
+ return n.push({ value: c, major: na(o) }), n;
+ }({ min: this._userMin, max: this._userMax }, this);
+ return "ticks" === t.bounds && j(e, this, "value"),
+ t.reverse
+ ? (e.reverse(), this.start = this.max, this.end = this.min)
+ : (this.start = this.min, this.end = this.max),
+ e;
+ }
+ getLabelForValue(t) {
+ return void 0 === t ? "0" : li(t, this.chart.options.locale, this.options.ticks.format);
+ }
+ configure() {
+ const t = this.min;
+ super.configure(), this._startValue = I(t), this._valueRange = I(this.max) - I(t);
+ }
+ getPixelForValue(t) {
+ return void 0 !== t && 0 !== t || (t = this.min),
+ null === t || isNaN(t)
+ ? NaN
+ : this.getPixelForDecimal(t === this.min ? 0 : (I(t) - this._startValue) / this._valueRange);
+ }
+ getValueForPixel(t) {
+ const e = this.getDecimalForPixel(t);
+ return Math.pow(10, this._startValue + e * this._valueRange);
+ }
+ }
+ function aa(t) {
+ const e = t.ticks;
+ if (e.display && t.display) {
+ const t = pi(e.backdropPadding);
+ return r(e.font && e.font.size, ne.font.size) + t.height;
+ }
+ return 0;
+ }
+ function ra(t, e, i, s, n) {
+ return t === s || t === n
+ ? { start: e - i / 2, end: e + i / 2 }
+ : t < s || t > n
+ ? { start: e - i, end: e }
+ : { start: e, end: e + i };
+ }
+ function la(t) {
+ const e = {
+ l: t.left + t._padding.left,
+ r: t.right - t._padding.right,
+ t: t.top + t._padding.top,
+ b: t.bottom - t._padding.bottom,
+ },
+ i = Object.assign({}, e),
+ n = [],
+ o = [],
+ a = t._pointLabels.length,
+ r = t.options.pointLabels,
+ l = r.centerPointLabels ? D / a : 0;
+ for (let u = 0; u < a; u++) {
+ const a = r.setContext(t.getPointLabelContext(u));
+ o[u] = a.padding;
+ const f = t.getPointPosition(u, t.drawingArea + o[u], l),
+ g = mi(a.font),
+ p =
+ (h = t.ctx,
+ c = g,
+ d = s(d = t._pointLabels[u]) ? d : [d],
+ { w: ye(h, c.string, d), h: d.length * c.lineHeight });
+ n[u] = p;
+ const m = K(t.getIndexAngle(u) + l), b = Math.round($(m));
+ ha(i, e, m, ra(b, f.x, p.w, 0, 180), ra(b, f.y, p.h, 90, 270));
+ }
+ var h, c, d;
+ t.setCenterPoint(e.l - i.l, i.r - e.r, e.t - i.t, i.b - e.b),
+ t._pointLabelItems = function(t, e, i) {
+ const s = [],
+ n = t._pointLabels.length,
+ o = t.options,
+ a = aa(o) / 2,
+ r = t.drawingArea,
+ l = o.pointLabels.centerPointLabels ? D / n : 0;
+ for (let o = 0; o < n; o++) {
+ const n = t.getPointPosition(o, r + a + i[o], l),
+ h = Math.round($(K(n.angle + L))),
+ c = e[o],
+ d = ua(n.y, c.h, h),
+ u = ca(h),
+ f = da(n.x, c.w, u);
+ s.push({ x: n.x, y: d, textAlign: u, left: f, top: d, right: f + c.w, bottom: d + c.h });
+ }
+ return s;
+ }(t, n, o);
+ }
+ function ha(t, e, i, s, n) {
+ const o = Math.abs(Math.sin(i)), a = Math.abs(Math.cos(i));
+ let r = 0, l = 0;
+ s.start < e.l
+ ? (r = (e.l - s.start) / o, t.l = Math.min(t.l, e.l - r))
+ : s.end > e.r && (r = (s.end - e.r) / o, t.r = Math.max(t.r, e.r + r)),
+ n.start < e.t
+ ? (l = (e.t - n.start) / a, t.t = Math.min(t.t, e.t - l))
+ : n.end > e.b && (l = (n.end - e.b) / a, t.b = Math.max(t.b, e.b + l));
+ }
+ function ca(t) {
+ return 0 === t || 180 === t ? "center" : t < 180 ? "left" : "right";
+ }
+ function da(t, e, i) {
+ return "right" === i ? t -= e : "center" === i && (t -= e / 2), t;
+ }
+ function ua(t, e, i) {
+ return 90 === i || 270 === i ? t -= e / 2 : (i > 270 || i < 90) && (t -= e), t;
+ }
+ function fa(t, e, i, s) {
+ const { ctx: n } = t;
+ if (i) n.arc(t.xCenter, t.yCenter, e, 0, O);
+ else {
+ let i = t.getPointPosition(0, e);
+ n.moveTo(i.x, i.y);
+ for (let o = 1; o < s; o++) i = t.getPointPosition(o, e), n.lineTo(i.x, i.y);
+ }
+ }
+ oa.id = "logarithmic", oa.defaults = { ticks: { callback: Is.formatters.logarithmic, major: { enabled: !0 } } };
+ class ga extends ia {
+ constructor(t) {
+ super(t),
+ this.xCenter = void 0,
+ this.yCenter = void 0,
+ this.drawingArea = void 0,
+ this._pointLabels = [],
+ this._pointLabelItems = [];
+ }
+ setDimensions() {
+ const t = this._padding = pi(aa(this.options) / 2),
+ e = this.width = this.maxWidth - t.width,
+ i = this.height = this.maxHeight - t.height;
+ this.xCenter = Math.floor(this.left + e / 2 + t.left),
+ this.yCenter = Math.floor(this.top + i / 2 + t.top),
+ this.drawingArea = Math.floor(Math.min(e, i) / 2);
+ }
+ determineDataLimits() {
+ const { min: t, max: e } = this.getMinMax(!1);
+ this.min = o(t) && !isNaN(t) ? t : 0, this.max = o(e) && !isNaN(e) ? e : 0, this.handleTickRangeOptions();
+ }
+ computeTickLimit() {
+ return Math.ceil(this.drawingArea / aa(this.options));
+ }
+ generateTickLabels(t) {
+ ia.prototype.generateTickLabels.call(this, t),
+ this._pointLabels = this.getLabels().map((t, e) => {
+ const i = c(this.options.pointLabels.callback, [t, e], this);
+ return i || 0 === i ? i : "";
+ }).filter((t, e) => this.chart.getDataVisibility(e));
+ }
+ fit() {
+ const t = this.options;
+ t.display && t.pointLabels.display ? la(this) : this.setCenterPoint(0, 0, 0, 0);
+ }
+ setCenterPoint(t, e, i, s) {
+ this.xCenter += Math.floor((t - e) / 2),
+ this.yCenter += Math.floor((i - s) / 2),
+ this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(t, e, i, s));
+ }
+ getIndexAngle(t) {
+ return K(t * (O / (this._pointLabels.length || 1)) + H(this.options.startAngle || 0));
+ }
+ getDistanceFromCenterForValue(t) {
+ if (i(t)) return NaN;
+ const e = this.drawingArea / (this.max - this.min);
+ return this.options.reverse ? (this.max - t) * e : (t - this.min) * e;
+ }
+ getValueForDistanceFromCenter(t) {
+ if (i(t)) return NaN;
+ const e = t / (this.drawingArea / (this.max - this.min));
+ return this.options.reverse ? this.max - e : this.min + e;
+ }
+ getPointLabelContext(t) {
+ const e = this._pointLabels || [];
+ if (t >= 0 && t < e.length) {
+ const i = e[t];
+ return function(t, e, i) {
+ return _i(t, { label: i, index: e, type: "pointLabel" });
+ }(this.getContext(), t, i);
+ }
+ }
+ getPointPosition(t, e, i = 0) {
+ const s = this.getIndexAngle(t) - L + i;
+ return { x: Math.cos(s) * e + this.xCenter, y: Math.sin(s) * e + this.yCenter, angle: s };
+ }
+ getPointPositionForValue(t, e) {
+ return this.getPointPosition(t, this.getDistanceFromCenterForValue(e));
+ }
+ getBasePosition(t) {
+ return this.getPointPositionForValue(t || 0, this.getBaseValue());
+ }
+ getPointLabelPosition(t) {
+ const { left: e, top: i, right: s, bottom: n } = this._pointLabelItems[t];
+ return { left: e, top: i, right: s, bottom: n };
+ }
+ drawBackground() {
+ const { backgroundColor: t, grid: { circular: e } } = this.options;
+ if (t) {
+ const i = this.ctx;
+ i.save(),
+ i.beginPath(),
+ fa(this, this.getDistanceFromCenterForValue(this._endValue), e, this._pointLabels.length),
+ i.closePath(),
+ i.fillStyle = t,
+ i.fill(),
+ i.restore();
+ }
+ }
+ drawGrid() {
+ const t = this.ctx, e = this.options, { angleLines: s, grid: n } = e, o = this._pointLabels.length;
+ let a, r, l;
+ if (
+ e.pointLabels.display && function(t, e) {
+ const { ctx: s, options: { pointLabels: n } } = t;
+ for (let o = e - 1; o >= 0; o--) {
+ const e = n.setContext(t.getPointLabelContext(o)),
+ a = mi(e.font),
+ { x: r, y: l, textAlign: h, left: c, top: d, right: u, bottom: f } = t._pointLabelItems[o],
+ { backdropColor: g } = e;
+ if (!i(g)) {
+ const t = gi(e.borderRadius), i = pi(e.backdropPadding);
+ s.fillStyle = g;
+ const n = c - i.left, o = d - i.top, a = u - c + i.width, r = f - d + i.height;
+ Object.values(t).some(t => 0 !== t)
+ ? (s.beginPath(), Le(s, { x: n, y: o, w: a, h: r, radius: t }), s.fill())
+ : s.fillRect(n, o, a, r);
+ }
+ Ae(s, t._pointLabels[o], r, l + a.lineHeight / 2, a, {
+ color: e.color,
+ textAlign: h,
+ textBaseline: "middle",
+ });
+ }
+ }(this, o),
+ n.display && this.ticks.forEach((t, e) => {
+ if (0 !== e) {
+ r = this.getDistanceFromCenterForValue(t.value);
+ !function(t, e, i, s) {
+ const n = t.ctx, o = e.circular, { color: a, lineWidth: r } = e;
+ !o && !s || !a || !r || i < 0
+ || (n.save(),
+ n.strokeStyle = a,
+ n.lineWidth = r,
+ n.setLineDash(e.borderDash),
+ n.lineDashOffset = e.borderDashOffset,
+ n.beginPath(),
+ fa(t, i, o, s),
+ n.closePath(),
+ n.stroke(),
+ n.restore());
+ }(this, n.setContext(this.getContext(e - 1)), r, o);
+ }
+ }),
+ s.display
+ ) {
+ for (t.save(), a = o - 1; a >= 0; a--) {
+ const i = s.setContext(this.getPointLabelContext(a)), { color: n, lineWidth: o } = i;
+ o && n
+ && (t.lineWidth = o,
+ t.strokeStyle = n,
+ t.setLineDash(i.borderDash),
+ t.lineDashOffset = i.borderDashOffset,
+ r = this.getDistanceFromCenterForValue(e.ticks.reverse ? this.min : this.max),
+ l = this.getPointPosition(a, r),
+ t.beginPath(),
+ t.moveTo(this.xCenter, this.yCenter),
+ t.lineTo(l.x, l.y),
+ t.stroke());
+ }
+ t.restore();
+ }
+ }
+ drawBorder() {}
+ drawLabels() {
+ const t = this.ctx, e = this.options, i = e.ticks;
+ if (!i.display) return;
+ const s = this.getIndexAngle(0);
+ let n, o;
+ t.save(),
+ t.translate(this.xCenter, this.yCenter),
+ t.rotate(s),
+ t.textAlign = "center",
+ t.textBaseline = "middle",
+ this.ticks.forEach((s, a) => {
+ if (0 === a && !e.reverse) return;
+ const r = i.setContext(this.getContext(a)), l = mi(r.font);
+ if (n = this.getDistanceFromCenterForValue(this.ticks[a].value), r.showLabelBackdrop) {
+ t.font = l.string, o = t.measureText(s.label).width, t.fillStyle = r.backdropColor;
+ const e = pi(r.backdropPadding);
+ t.fillRect(-o / 2 - e.left, -n - l.size / 2 - e.top, o + e.width, l.size + e.height);
+ }
+ Ae(t, s.label, 0, -n, l, { color: r.color });
+ }),
+ t.restore();
+ }
+ drawTitle() {}
+ }
+ ga.id = "radialLinear",
+ ga.defaults = {
+ display: !0,
+ animate: !0,
+ position: "chartArea",
+ angleLines: { display: !0, lineWidth: 1, borderDash: [], borderDashOffset: 0 },
+ grid: { circular: !1 },
+ startAngle: 0,
+ ticks: { showLabelBackdrop: !0, callback: Is.formatters.numeric },
+ pointLabels: {
+ backdropColor: void 0,
+ backdropPadding: 2,
+ display: !0,
+ font: { size: 10 },
+ callback: t => t,
+ padding: 5,
+ centerPointLabels: !1,
+ },
+ },
+ ga.defaultRoutes = { "angleLines.color": "borderColor", "pointLabels.color": "color", "ticks.color": "color" },
+ ga.descriptors = { angleLines: { _fallback: "grid" } };
+ const pa = {
+ millisecond: { common: !0, size: 1, steps: 1e3 },
+ second: { common: !0, size: 1e3, steps: 60 },
+ minute: { common: !0, size: 6e4, steps: 60 },
+ hour: { common: !0, size: 36e5, steps: 24 },
+ day: { common: !0, size: 864e5, steps: 30 },
+ week: { common: !1, size: 6048e5, steps: 4 },
+ month: { common: !0, size: 2628e6, steps: 12 },
+ quarter: { common: !1, size: 7884e6, steps: 4 },
+ year: { common: !0, size: 3154e7 },
+ },
+ ma = Object.keys(pa);
+ function ba(t, e) {
+ return t - e;
+ }
+ function xa(t, e) {
+ if (i(e)) return null;
+ const s = t._adapter, { parser: n, round: a, isoWeekday: r } = t._parseOpts;
+ let l = e;
+ return "function" == typeof n && (l = n(l)),
+ o(l) || (l = "string" == typeof n ? s.parse(l, n) : s.parse(l)),
+ null === l
+ ? null
+ : (a && (l = "week" !== a || !B(r) && !0 !== r ? s.startOf(l, a) : s.startOf(l, "isoWeek", r)), +l);
+ }
+ function _a(t, e, i, s) {
+ const n = ma.length;
+ for (let o = ma.indexOf(t); o < n - 1; ++o) {
+ const t = pa[ma[o]], n = t.steps ? t.steps : Number.MAX_SAFE_INTEGER;
+ if (t.common && Math.ceil((i - e) / (n * t.size)) <= s) return ma[o];
+ }
+ return ma[n - 1];
+ }
+ function ya(t, e, i) {
+ if (i) {
+ if (i.length) {
+ const { lo: s, hi: n } = tt(i, e);
+ t[i[s] >= e ? i[s] : i[n]] = !0;
+ }
+ } else t[e] = !0;
+ }
+ function va(t, e, i) {
+ const s = [], n = {}, o = e.length;
+ let a, r;
+ for (a = 0; a < o; ++a) r = e[a], n[r] = a, s.push({ value: r, major: !1 });
+ return 0 !== o && i
+ ? function(t, e, i, s) {
+ const n = t._adapter, o = +n.startOf(e[0].value, s), a = e[e.length - 1].value;
+ let r, l;
+ for (r = o; r <= a; r = +n.add(r, 1, s)) l = i[r], l >= 0 && (e[l].major = !0);
+ return e;
+ }(t, s, n, i)
+ : s;
+ }
+ class wa extends $s {
+ constructor(t) {
+ super(t),
+ this._cache = { data: [], labels: [], all: [] },
+ this._unit = "day",
+ this._majorUnit = void 0,
+ this._offsets = {},
+ this._normalized = !1,
+ this._parseOpts = void 0;
+ }
+ init(t, e) {
+ const i = t.time || (t.time = {}), s = this._adapter = new wn._date(t.adapters.date);
+ s.init(e),
+ b(i.displayFormats, s.formats()),
+ this._parseOpts = { parser: i.parser, round: i.round, isoWeekday: i.isoWeekday },
+ super.init(t),
+ this._normalized = e.normalized;
+ }
+ parse(t, e) {
+ return void 0 === t ? null : xa(this, t);
+ }
+ beforeLayout() {
+ super.beforeLayout(), this._cache = { data: [], labels: [], all: [] };
+ }
+ determineDataLimits() {
+ const t = this.options, e = this._adapter, i = t.time.unit || "day";
+ let { min: s, max: n, minDefined: a, maxDefined: r } = this.getUserBounds();
+ function l(t) {
+ a || isNaN(t.min) || (s = Math.min(s, t.min)), r || isNaN(t.max) || (n = Math.max(n, t.max));
+ }
+ a && r
+ || (l(this._getLabelBounds()), "ticks" === t.bounds && "labels" === t.ticks.source || l(this.getMinMax(!1))),
+ s = o(s) && !isNaN(s) ? s : +e.startOf(Date.now(), i),
+ n = o(n) && !isNaN(n) ? n : +e.endOf(Date.now(), i) + 1,
+ this.min = Math.min(s, n - 1),
+ this.max = Math.max(s + 1, n);
+ }
+ _getLabelBounds() {
+ const t = this.getLabelTimestamps();
+ let e = Number.POSITIVE_INFINITY, i = Number.NEGATIVE_INFINITY;
+ return t.length && (e = t[0], i = t[t.length - 1]), { min: e, max: i };
+ }
+ buildTicks() {
+ const t = this.options,
+ e = t.time,
+ i = t.ticks,
+ s = "labels" === i.source ? this.getLabelTimestamps() : this._generate();
+ "ticks" === t.bounds && s.length
+ && (this.min = this._userMin || s[0], this.max = this._userMax || s[s.length - 1]);
+ const n = this.min, o = st(s, n, this.max);
+ return this._unit = e.unit
+ || (i.autoSkip ? _a(e.minUnit, this.min, this.max, this._getLabelCapacity(n)) : function(t, e, i, s, n) {
+ for (let o = ma.length - 1; o >= ma.indexOf(i); o--) {
+ const i = ma[o];
+ if (pa[i].common && t._adapter.diff(n, s, i) >= e - 1) return i;
+ }
+ return ma[i ? ma.indexOf(i) : 0];
+ }(this, o.length, e.minUnit, this.min, this.max)),
+ this._majorUnit = i.major.enabled && "year" !== this._unit
+ ? function(t) {
+ for (let e = ma.indexOf(t) + 1, i = ma.length; e < i; ++e) if (pa[ma[e]].common) return ma[e];
+ }(this._unit)
+ : void 0,
+ this.initOffsets(s),
+ t.reverse && o.reverse(),
+ va(this, o, this._majorUnit);
+ }
+ afterAutoSkip() {
+ this.options.offsetAfterAutoskip && this.initOffsets(this.ticks.map(t => +t.value));
+ }
+ initOffsets(t) {
+ let e, i, s = 0, n = 0;
+ this.options.offset && t.length
+ && (e = this.getDecimalForValue(t[0]),
+ s = 1 === t.length ? 1 - e : (this.getDecimalForValue(t[1]) - e) / 2,
+ i = this.getDecimalForValue(t[t.length - 1]),
+ n = 1 === t.length ? i : (i - this.getDecimalForValue(t[t.length - 2])) / 2);
+ const o = t.length < 3 ? .5 : .25;
+ s = Z(s, 0, o), n = Z(n, 0, o), this._offsets = { start: s, end: n, factor: 1 / (s + 1 + n) };
+ }
+ _generate() {
+ const t = this._adapter,
+ e = this.min,
+ i = this.max,
+ s = this.options,
+ n = s.time,
+ o = n.unit || _a(n.minUnit, e, i, this._getLabelCapacity(e)),
+ a = r(n.stepSize, 1),
+ l = "week" === o && n.isoWeekday,
+ h = B(l) || !0 === l,
+ c = {};
+ let d, u, f = e;
+ if (h && (f = +t.startOf(f, "isoWeek", l)), f = +t.startOf(f, h ? "day" : o), t.diff(i, e, o) > 1e5 * a) {
+ throw new Error(e + " and " + i + " are too far apart with stepSize of " + a + " " + o);
+ }
+ const g = "data" === s.ticks.source && this.getDataTimestamps();
+ for (d = f, u = 0; d < i; d = +t.add(d, a, o), u++) ya(c, d, g);
+ return d !== i && "ticks" !== s.bounds && 1 !== u || ya(c, d, g),
+ Object.keys(c).sort((t, e) => t - e).map(t => +t);
+ }
+ getLabelForValue(t) {
+ const e = this._adapter, i = this.options.time;
+ return i.tooltipFormat ? e.format(t, i.tooltipFormat) : e.format(t, i.displayFormats.datetime);
+ }
+ _tickFormatFunction(t, e, i, s) {
+ const n = this.options,
+ o = n.time.displayFormats,
+ a = this._unit,
+ r = this._majorUnit,
+ l = a && o[a],
+ h = r && o[r],
+ d = i[e],
+ u = r && h && d && d.major,
+ f = this._adapter.format(t, s || (u ? h : l)),
+ g = n.ticks.callback;
+ return g ? c(g, [f, e, i], this) : f;
+ }
+ generateTickLabels(t) {
+ let e, i, s;
+ for (e = 0, i = t.length; e < i; ++e) s = t[e], s.label = this._tickFormatFunction(s.value, e, t);
+ }
+ getDecimalForValue(t) {
+ return null === t ? NaN : (t - this.min) / (this.max - this.min);
+ }
+ getPixelForValue(t) {
+ const e = this._offsets, i = this.getDecimalForValue(t);
+ return this.getPixelForDecimal((e.start + i) * e.factor);
+ }
+ getValueForPixel(t) {
+ const e = this._offsets, i = this.getDecimalForPixel(t) / e.factor - e.end;
+ return this.min + i * (this.max - this.min);
+ }
+ _getLabelSize(t) {
+ const e = this.options.ticks,
+ i = this.ctx.measureText(t).width,
+ s = H(this.isHorizontal() ? e.maxRotation : e.minRotation),
+ n = Math.cos(s),
+ o = Math.sin(s),
+ a = this._resolveTickFontOptions(0).size;
+ return { w: i * n + a * o, h: i * o + a * n };
+ }
+ _getLabelCapacity(t) {
+ const e = this.options.time,
+ i = e.displayFormats,
+ s = i[e.unit] || i.millisecond,
+ n = this._tickFormatFunction(t, 0, va(this, [t], this._majorUnit), s),
+ o = this._getLabelSize(n),
+ a = Math.floor(this.isHorizontal() ? this.width / o.w : this.height / o.h) - 1;
+ return a > 0 ? a : 1;
+ }
+ getDataTimestamps() {
+ let t, e, i = this._cache.data || [];
+ if (i.length) return i;
+ const s = this.getMatchingVisibleMetas();
+ if (this._normalized && s.length) return this._cache.data = s[0].controller.getAllParsedValues(this);
+ for (t = 0, e = s.length; t < e; ++t) i = i.concat(s[t].controller.getAllParsedValues(this));
+ return this._cache.data = this.normalize(i);
+ }
+ getLabelTimestamps() {
+ const t = this._cache.labels || [];
+ let e, i;
+ if (t.length) return t;
+ const s = this.getLabels();
+ for (e = 0, i = s.length; e < i; ++e) t.push(xa(this, s[e]));
+ return this._cache.labels = this._normalized ? t : this.normalize(t);
+ }
+ normalize(t) {
+ return rt(t.sort(ba));
+ }
+ }
+ function Ma(t, e, i) {
+ let s, n, o, a, r = 0, l = t.length - 1;
+ i
+ ? (e >= t[r].pos && e <= t[l].pos && ({ lo: r, hi: l } = et(t, "pos", e)),
+ ({ pos: s, time: o } = t[r]),
+ ({ pos: n, time: a } = t[l]))
+ : (e >= t[r].time && e <= t[l].time && ({ lo: r, hi: l } = et(t, "time", e)),
+ ({ time: s, pos: o } = t[r]),
+ ({ time: n, pos: a } = t[l]));
+ const h = n - s;
+ return h ? o + (a - o) * (e - s) / h : o;
+ }
+ wa.id = "time",
+ wa.defaults = {
+ bounds: "data",
+ adapters: {},
+ time: { parser: !1, unit: !1, round: !1, isoWeekday: !1, minUnit: "millisecond", displayFormats: {} },
+ ticks: { source: "auto", major: { enabled: !1 } },
+ };
+ class ka extends wa {
+ constructor(t) {
+ super(t), this._table = [], this._minPos = void 0, this._tableRange = void 0;
+ }
+ initOffsets() {
+ const t = this._getTimestampsForTable(), e = this._table = this.buildLookupTable(t);
+ this._minPos = Ma(e, this.min), this._tableRange = Ma(e, this.max) - this._minPos, super.initOffsets(t);
+ }
+ buildLookupTable(t) {
+ const { min: e, max: i } = this, s = [], n = [];
+ let o, a, r, l, h;
+ for (o = 0, a = t.length; o < a; ++o) l = t[o], l >= e && l <= i && s.push(l);
+ if (s.length < 2) return [{ time: e, pos: 0 }, { time: i, pos: 1 }];
+ for (o = 0, a = s.length; o < a; ++o) {
+ h = s[o + 1], r = s[o - 1], l = s[o], Math.round((h + r) / 2) !== l && n.push({ time: l, pos: o / (a - 1) });
+ }
+ return n;
+ }
+ _getTimestampsForTable() {
+ let t = this._cache.all || [];
+ if (t.length) return t;
+ const e = this.getDataTimestamps(), i = this.getLabelTimestamps();
+ return t = e.length && i.length ? this.normalize(e.concat(i)) : e.length ? e : i, t = this._cache.all = t, t;
+ }
+ getDecimalForValue(t) {
+ return (Ma(this._table, t) - this._minPos) / this._tableRange;
+ }
+ getValueForPixel(t) {
+ const e = this._offsets, i = this.getDecimalForPixel(t) / e.factor - e.end;
+ return Ma(this._table, i * this._tableRange + this._minPos, !0);
+ }
+ }
+ ka.id = "timeseries", ka.defaults = wa.defaults;
+ var Sa = Object.freeze({
+ __proto__: null,
+ CategoryScale: ta,
+ LinearScale: sa,
+ LogarithmicScale: oa,
+ RadialLinearScale: ga,
+ TimeScale: wa,
+ TimeSeriesScale: ka,
+ });
+ return bn.register(Bn, Sa, co, Jo),
+ bn.helpers = { ...Ti },
+ bn._adapters = wn,
+ bn.Animation = xs,
+ bn.Animations = ys,
+ bn.animator = mt,
+ bn.controllers = Us.controllers.items,
+ bn.DatasetController = Ls,
+ bn.Element = Es,
+ bn.elements = co,
+ bn.Interaction = Vi,
+ bn.layouts = Zi,
+ bn.platforms = ps,
+ bn.Scale = $s,
+ bn.Ticks = Is,
+ Object.assign(bn, Bn, Sa, co, Jo, ps),
+ bn.Chart = bn,
+ "undefined" != typeof window && (window.Chart = bn),
+ bn;
+});
diff --git a/assets/plugin/mermaid-theme.js b/assets/plugin/mermaid-theme.js
new file mode 100644
index 00000000..0513f2fa
--- /dev/null
+++ b/assets/plugin/mermaid-theme.js
@@ -0,0 +1,34 @@
+// Mermaid theme and functions
+const pink = "#E6007A";
+const purple = "#442299";
+const lightPurple = "#6D3AEE";
+const white = "#FFFFFF";
+
+Reveal.addEventListener("ready", event => asyncMermaidRender(event));
+
+async function asyncMermaidRender(event) {
+ var graphs = document.querySelectorAll(".mermaid");
+ graphs.forEach((item, index) => {
+ let graphCode = item.textContent.trim(); // trim() becase of gantt, class and git diagram
+ let mermaidDiv = document.createElement("div");
+ mermaidDiv.classList.add("mermaid");
+ mermaidDiv.setAttribute("data-processed", "true");
+
+ try {
+ // item.innerText ignores html elements added by revealjs highlight plugin.
+ mermaid.mermaidAPI.render("theGraph" + index, graphCode, function(svgCode) {
+ mermaidDiv.innerHTML = svgCode;
+ });
+
+ let parentDiv = document.createElement("div");
+ parentDiv.appendChild(mermaidDiv);
+ parentDiv.style.width = "100%";
+ parentDiv.style.height = "100%";
+ item.parentNode.parentNode.insertBefore(parentDiv, item.parentNode);
+ item.parentNode.remove();
+ } catch (err) {
+ console.log("Cannot render mermaid diagram " + index + "\n" + graphCode);
+ console.log(err.message);
+ }
+ });
+}
diff --git a/assets/plugin/mermaid.js b/assets/plugin/mermaid.js
new file mode 100644
index 00000000..bfa7f98a
--- /dev/null
+++ b/assets/plugin/mermaid.js
@@ -0,0 +1,40764 @@
+!function(t, e) {
+ "object" == typeof exports && "undefined" != typeof module
+ ? module.exports = e()
+ : "function" == typeof define && define.amd
+ ? define(e)
+ : (t = "undefined" != typeof globalThis ? globalThis : t || self).RevealMermaid = e();
+}(this, function() {
+ "use strict";
+ "undefined" != typeof globalThis
+ ? globalThis
+ : "undefined" != typeof window
+ ? window
+ : "undefined" != typeof global
+ ? global
+ : "undefined" != typeof self && self;
+ var t = { exports: {} };
+ !function(t, e) {
+ t.exports = function() {
+ var e;
+ function n() {
+ return e.apply(null, arguments);
+ }
+ function i(t) {
+ return t instanceof Array || "[object Array]" === Object.prototype.toString.call(t);
+ }
+ function r(t) {
+ return null != t && "[object Object]" === Object.prototype.toString.call(t);
+ }
+ function a(t, e) {
+ return Object.prototype.hasOwnProperty.call(t, e);
+ }
+ function s(t) {
+ if (Object.getOwnPropertyNames) return 0 === Object.getOwnPropertyNames(t).length;
+ for (var e in t) if (a(t, e)) return;
+ return 1;
+ }
+ function o(t) {
+ return void 0 === t;
+ }
+ function l(t) {
+ return "number" == typeof t || "[object Number]" === Object.prototype.toString.call(t);
+ }
+ function c(t) {
+ return t instanceof Date || "[object Date]" === Object.prototype.toString.call(t);
+ }
+ function h(t, e) {
+ for (var n = [], i = t.length, r = 0; r < i; ++r) n.push(e(t[r], r));
+ return n;
+ }
+ function u(t, e) {
+ for (var n in e) a(e, n) && (t[n] = e[n]);
+ return a(e, "toString") && (t.toString = e.toString), a(e, "valueOf") && (t.valueOf = e.valueOf), t;
+ }
+ function d(t, e, n, i) {
+ return De(t, e, n, i, !0).utc();
+ }
+ function p(t) {
+ return null == t._pf
+ && (t._pf = {
+ empty: !1,
+ unusedTokens: [],
+ unusedInput: [],
+ overflow: -2,
+ charsLeftOver: 0,
+ nullInput: !1,
+ invalidEra: null,
+ invalidMonth: null,
+ invalidFormat: !1,
+ userInvalidated: !1,
+ iso: !1,
+ parsedDateParts: [],
+ era: null,
+ meridiem: null,
+ rfc2822: !1,
+ weekdayMismatch: !1,
+ }),
+ t._pf;
+ }
+ function f(t) {
+ if (null == t._isValid) {
+ var e = p(t),
+ n = y.call(e.parsedDateParts, function(t) {
+ return null != t;
+ });
+ if (
+ n = !isNaN(t._d.getTime()) && e.overflow < 0 && !e.empty && !e.invalidEra && !e.invalidMonth
+ && !e.invalidWeekday && !e.weekdayMismatch && !e.nullInput && !e.invalidFormat && !e.userInvalidated
+ && (!e.meridiem || e.meridiem && n),
+ t._strict && (n = n && 0 === e.charsLeftOver && 0 === e.unusedTokens.length && void 0 === e.bigHour),
+ null != Object.isFrozen && Object.isFrozen(t)
+ ) return n;
+ t._isValid = n;
+ }
+ return t._isValid;
+ }
+ function g(t) {
+ var e = d(NaN);
+ return null != t ? u(p(e), t) : p(e).userInvalidated = !0, e;
+ }
+ var y = Array.prototype.some || function(t) {
+ for (var e = Object(this), n = e.length >>> 0, i = 0; i < n; i++) {
+ if (i in e && t.call(this, e[i], i, e)) return !0;
+ }
+ return !1;
+ },
+ m = n.momentProperties = [],
+ b = !1;
+ function _(t, e) {
+ var n, i, r, a = m.length;
+ if (
+ o(e._isAMomentObject) || (t._isAMomentObject = e._isAMomentObject),
+ o(e._i) || (t._i = e._i),
+ o(e._f) || (t._f = e._f),
+ o(e._l) || (t._l = e._l),
+ o(e._strict) || (t._strict = e._strict),
+ o(e._tzm) || (t._tzm = e._tzm),
+ o(e._isUTC) || (t._isUTC = e._isUTC),
+ o(e._offset) || (t._offset = e._offset),
+ o(e._pf) || (t._pf = p(e)),
+ o(e._locale) || (t._locale = e._locale),
+ 0 < a
+ ) for (n = 0; n < a; n++) o(r = e[i = m[n]]) || (t[i] = r);
+ return t;
+ }
+ function x(t) {
+ _(this, t),
+ this._d = new Date(null != t._d ? t._d.getTime() : NaN),
+ this.isValid() || (this._d = new Date(NaN)),
+ !1 === b && (b = !0, n.updateOffset(this), b = !1);
+ }
+ function v(t) {
+ return t instanceof x || null != t && null != t._isAMomentObject;
+ }
+ function k(t) {
+ !1 === n.suppressDeprecationWarnings && "undefined" != typeof console && console.warn
+ && console.warn("Deprecation warning: " + t);
+ }
+ function w(t, e) {
+ var i = !0;
+ return u(function() {
+ if (null != n.deprecationHandler && n.deprecationHandler(null, t), i) {
+ for (var r, s, o = [], l = arguments.length, c = 0; c < l; c++) {
+ if (r = "", "object" == typeof arguments[c]) {
+ for (s in r += "\n[" + c + "] ", arguments[0]) {
+ a(arguments[0], s) && (r += s + ": " + arguments[0][s] + ", ");
+ }
+ r = r.slice(0, -2);
+ } else r = arguments[c];
+ o.push(r);
+ }
+ k(t + "\nArguments: " + Array.prototype.slice.call(o).join("") + "\n" + (new Error()).stack), i = !1;
+ }
+ return e.apply(this, arguments);
+ }, e);
+ }
+ var T = {};
+ function C(t, e) {
+ null != n.deprecationHandler && n.deprecationHandler(t, e), T[t] || (k(e), T[t] = !0);
+ }
+ function E(t) {
+ return "undefined" != typeof Function && t instanceof Function
+ || "[object Function]" === Object.prototype.toString.call(t);
+ }
+ function S(t, e) {
+ var n, i = u({}, t);
+ for (n in e) {
+ a(e, n) && (r(t[n]) && r(e[n])
+ ? (i[n] = {}, u(i[n], t[n]), u(i[n], e[n]))
+ : null != e[n]
+ ? i[n] = e[n]
+ : delete i[n]);
+ }
+ for (n in t) a(t, n) && !a(e, n) && r(t[n]) && (i[n] = u({}, i[n]));
+ return i;
+ }
+ function A(t) {
+ null != t && this.set(t);
+ }
+ n.suppressDeprecationWarnings = !1, n.deprecationHandler = null;
+ var D = Object.keys || function(t) {
+ var e, n = [];
+ for (e in t) a(t, e) && n.push(e);
+ return n;
+ };
+ function L(t, e, n) {
+ var i = "" + Math.abs(t);
+ return (0 <= t ? n ? "+" : "" : "-") + Math.pow(10, Math.max(0, e - i.length)).toString().substr(1) + i;
+ }
+ var O =
+ /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
+ N = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
+ M = {},
+ B = {};
+ function I(t, e, n, i) {
+ var r = "string" == typeof i
+ ? function() {
+ return this[i]();
+ }
+ : i;
+ t && (B[t] = r),
+ e && (B[e[0]] = function() {
+ return L(r.apply(this, arguments), e[1], e[2]);
+ }),
+ n && (B[n] = function() {
+ return this.localeData().ordinal(r.apply(this, arguments), t);
+ });
+ }
+ function F(t, e) {
+ return t.isValid()
+ ? (e = R(e, t.localeData()),
+ M[e] = M[e] || function(t) {
+ for (var e, n = t.match(O), i = 0, r = n.length; i < r; i++) {
+ B[n[i]]
+ ? n[i] = B[n[i]]
+ : n[i] = (e = n[i]).match(/\[[\s\S]/) ? e.replace(/^\[|\]$/g, "") : e.replace(/\\/g, "");
+ }
+ return function(e) {
+ for (var i = "", a = 0; a < r; a++) i += E(n[a]) ? n[a].call(e, t) : n[a];
+ return i;
+ };
+ }(e),
+ M[e](t))
+ : t.localeData().invalidDate();
+ }
+ function R(t, e) {
+ var n = 5;
+ function i(t) {
+ return e.longDateFormat(t) || t;
+ }
+ for (N.lastIndex = 0; 0 <= n && N.test(t);) t = t.replace(N, i), N.lastIndex = 0, --n;
+ return t;
+ }
+ var $ = {};
+ function P(t, e) {
+ var n = t.toLowerCase();
+ $[n] = $[n + "s"] = $[e] = t;
+ }
+ function Y(t) {
+ return "string" == typeof t ? $[t] || $[t.toLowerCase()] : void 0;
+ }
+ function j(t) {
+ var e, n, i = {};
+ for (n in t) a(t, n) && (e = Y(n)) && (i[e] = t[n]);
+ return i;
+ }
+ var z = {};
+ function U(t, e) {
+ z[t] = e;
+ }
+ function W(t) {
+ return t % 4 == 0 && t % 100 != 0 || t % 400 == 0;
+ }
+ function H(t) {
+ return t < 0 ? Math.ceil(t) || 0 : Math.floor(t);
+ }
+ function q(t) {
+ var e = 0;
+ return 0 != (t = +t) && isFinite(t) ? H(t) : e;
+ }
+ function V(t, e) {
+ return function(i) {
+ return null != i ? (X(this, t, i), n.updateOffset(this, e), this) : G(this, t);
+ };
+ }
+ function G(t, e) {
+ return t.isValid() ? t._d["get" + (t._isUTC ? "UTC" : "") + e]() : NaN;
+ }
+ function X(t, e, n) {
+ t.isValid() && !isNaN(n)
+ && ("FullYear" === e && W(t.year()) && 1 === t.month() && 29 === t.date()
+ ? (n = q(n), t._d["set" + (t._isUTC ? "UTC" : "") + e](n, t.month(), Dt(n, t.month())))
+ : t._d["set" + (t._isUTC ? "UTC" : "") + e](n));
+ }
+ var Z = /\d/,
+ Q = /\d\d/,
+ K = /\d{3}/,
+ J = /\d{4}/,
+ tt = /[+-]?\d{6}/,
+ et = /\d\d?/,
+ nt = /\d\d\d\d?/,
+ it = /\d\d\d\d\d\d?/,
+ rt = /\d{1,3}/,
+ at = /\d{1,4}/,
+ st = /[+-]?\d{1,6}/,
+ ot = /\d+/,
+ lt = /[+-]?\d+/,
+ ct = /Z|[+-]\d\d:?\d\d/gi,
+ ht = /Z|[+-]\d\d(?::?\d\d)?/gi,
+ ut =
+ /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;
+ function dt(t, e, n) {
+ gt[t] = E(e) ? e : function(t, i) {
+ return t && n ? n : e;
+ };
+ }
+ function pt(t, e) {
+ return a(gt, t)
+ ? gt[t](e._strict, e._locale)
+ : new RegExp(ft(
+ t.replace("\\", "").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function(t, e, n, i, r) {
+ return e || n || i || r;
+ }),
+ ));
+ }
+ function ft(t) {
+ return t.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
+ }
+ var gt = {}, yt = {};
+ function mt(t, e) {
+ var n, i, r = e;
+ for (
+ "string" == typeof t && (t = [t]),
+ l(e) && (r = function(t, n) {
+ n[e] = q(t);
+ }),
+ i = t.length,
+ n = 0;
+ n < i;
+ n++
+ ) yt[t[n]] = r;
+ }
+ function bt(t, e) {
+ mt(t, function(t, n, i, r) {
+ i._w = i._w || {}, e(t, i._w, i, r);
+ });
+ }
+ var _t, xt = 0, vt = 1, kt = 2, wt = 3, Tt = 4, Ct = 5, Et = 6, St = 7, At = 8;
+ function Dt(t, e) {
+ if (isNaN(t) || isNaN(e)) return NaN;
+ var n = (e % (n = 12) + n) % n;
+ return t += (e - n) / 12, 1 == n ? W(t) ? 29 : 28 : 31 - n % 7 % 2;
+ }
+ _t = Array.prototype.indexOf || function(t) {
+ for (var e = 0; e < this.length; ++e) if (this[e] === t) return e;
+ return -1;
+ },
+ I("M", ["MM", 2], "Mo", function() {
+ return this.month() + 1;
+ }),
+ I("MMM", 0, 0, function(t) {
+ return this.localeData().monthsShort(this, t);
+ }),
+ I("MMMM", 0, 0, function(t) {
+ return this.localeData().months(this, t);
+ }),
+ P("month", "M"),
+ U("month", 8),
+ dt("M", et),
+ dt("MM", et, Q),
+ dt("MMM", function(t, e) {
+ return e.monthsShortRegex(t);
+ }),
+ dt("MMMM", function(t, e) {
+ return e.monthsRegex(t);
+ }),
+ mt(["M", "MM"], function(t, e) {
+ e[vt] = q(t) - 1;
+ }),
+ mt(["MMM", "MMMM"], function(t, e, n, i) {
+ null != (i = n._locale.monthsParse(t, i, n._strict)) ? e[vt] = i : p(n).invalidMonth = t;
+ });
+ var Lt = "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
+ Ot = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
+ Nt = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
+ Mt = ut,
+ Bt = ut;
+ function It(t, e) {
+ var n;
+ if (t.isValid()) {
+ if ("string" == typeof e) {
+ if (/^\d+$/.test(e)) e = q(e);
+ else if (!l(e = t.localeData().monthsParse(e))) return;
+ }
+ n = Math.min(t.date(), Dt(t.year(), e)), t._d["set" + (t._isUTC ? "UTC" : "") + "Month"](e, n);
+ }
+ }
+ function Ft(t) {
+ return null != t ? (It(this, t), n.updateOffset(this, !0), this) : G(this, "Month");
+ }
+ function Rt() {
+ function t(t, e) {
+ return e.length - t.length;
+ }
+ for (var e, n = [], i = [], r = [], a = 0; a < 12; a++) {
+ e = d([2e3, a]),
+ n.push(this.monthsShort(e, "")),
+ i.push(this.months(e, "")),
+ r.push(this.months(e, "")),
+ r.push(this.monthsShort(e, ""));
+ }
+ for (n.sort(t), i.sort(t), r.sort(t), a = 0; a < 12; a++) n[a] = ft(n[a]), i[a] = ft(i[a]);
+ for (a = 0; a < 24; a++) r[a] = ft(r[a]);
+ this._monthsRegex = new RegExp("^(" + r.join("|") + ")", "i"),
+ this._monthsShortRegex = this._monthsRegex,
+ this._monthsStrictRegex = new RegExp("^(" + i.join("|") + ")", "i"),
+ this._monthsShortStrictRegex = new RegExp("^(" + n.join("|") + ")", "i");
+ }
+ function $t(t) {
+ return W(t) ? 366 : 365;
+ }
+ I("Y", 0, 0, function() {
+ var t = this.year();
+ return t <= 9999 ? L(t, 4) : "+" + t;
+ }),
+ I(0, ["YY", 2], 0, function() {
+ return this.year() % 100;
+ }),
+ I(0, ["YYYY", 4], 0, "year"),
+ I(0, ["YYYYY", 5], 0, "year"),
+ I(0, ["YYYYYY", 6, !0], 0, "year"),
+ P("year", "y"),
+ U("year", 1),
+ dt("Y", lt),
+ dt("YY", et, Q),
+ dt("YYYY", at, J),
+ dt("YYYYY", st, tt),
+ dt("YYYYYY", st, tt),
+ mt(["YYYYY", "YYYYYY"], xt),
+ mt("YYYY", function(t, e) {
+ e[xt] = 2 === t.length ? n.parseTwoDigitYear(t) : q(t);
+ }),
+ mt("YY", function(t, e) {
+ e[xt] = n.parseTwoDigitYear(t);
+ }),
+ mt("Y", function(t, e) {
+ e[xt] = parseInt(t, 10);
+ }),
+ n.parseTwoDigitYear = function(t) {
+ return q(t) + (68 < q(t) ? 1900 : 2e3);
+ };
+ var Pt = V("FullYear", !0);
+ function Yt(t, e, n, i, r, a, s) {
+ var o;
+ return t < 100 && 0 <= t
+ ? (o = new Date(t + 400, e, n, i, r, a, s), isFinite(o.getFullYear()) && o.setFullYear(t))
+ : o = new Date(t, e, n, i, r, a, s),
+ o;
+ }
+ function jt(t) {
+ var e;
+ return t < 100 && 0 <= t
+ ? ((e = Array.prototype.slice.call(arguments))[0] = t + 400,
+ e = new Date(Date.UTC.apply(null, e)),
+ isFinite(e.getUTCFullYear()) && e.setUTCFullYear(t))
+ : e = new Date(Date.UTC.apply(null, arguments)),
+ e;
+ }
+ function zt(t, e, n) {
+ return (n = 7 + e - n) - (7 + jt(t, 0, n).getUTCDay() - e) % 7 - 1;
+ }
+ function Ut(t, e, n, i, r) {
+ var a;
+ return n = (e = 1 + 7 * (e - 1) + (7 + n - i) % 7 + zt(t, i, r)) <= 0
+ ? $t(a = t - 1) + e
+ : e > $t(t)
+ ? (a = t + 1, e - $t(t))
+ : (a = t, e),
+ { year: a, dayOfYear: n };
+ }
+ function Wt(t, e, n) {
+ var i, r, a = zt(t.year(), e, n);
+ return (a = Math.floor((t.dayOfYear() - a - 1) / 7) + 1) < 1
+ ? i = a + Ht(r = t.year() - 1, e, n)
+ : a > Ht(t.year(), e, n)
+ ? (i = a - Ht(t.year(), e, n), r = t.year() + 1)
+ : (r = t.year(), i = a),
+ { week: i, year: r };
+ }
+ function Ht(t, e, n) {
+ var i = zt(t, e, n);
+ return e = zt(t + 1, e, n), ($t(t) - i + e) / 7;
+ }
+ function qt(t, e) {
+ return t.slice(e, 7).concat(t.slice(0, e));
+ }
+ I("w", ["ww", 2], "wo", "week"),
+ I("W", ["WW", 2], "Wo", "isoWeek"),
+ P("week", "w"),
+ P("isoWeek", "W"),
+ U("week", 5),
+ U("isoWeek", 5),
+ dt("w", et),
+ dt("ww", et, Q),
+ dt("W", et),
+ dt("WW", et, Q),
+ bt(["w", "ww", "W", "WW"], function(t, e, n, i) {
+ e[i.substr(0, 1)] = q(t);
+ }),
+ I("d", 0, "do", "day"),
+ I("dd", 0, 0, function(t) {
+ return this.localeData().weekdaysMin(this, t);
+ }),
+ I("ddd", 0, 0, function(t) {
+ return this.localeData().weekdaysShort(this, t);
+ }),
+ I("dddd", 0, 0, function(t) {
+ return this.localeData().weekdays(this, t);
+ }),
+ I("e", 0, 0, "weekday"),
+ I("E", 0, 0, "isoWeekday"),
+ P("day", "d"),
+ P("weekday", "e"),
+ P("isoWeekday", "E"),
+ U("day", 11),
+ U("weekday", 11),
+ U("isoWeekday", 11),
+ dt("d", et),
+ dt("e", et),
+ dt("E", et),
+ dt("dd", function(t, e) {
+ return e.weekdaysMinRegex(t);
+ }),
+ dt("ddd", function(t, e) {
+ return e.weekdaysShortRegex(t);
+ }),
+ dt("dddd", function(t, e) {
+ return e.weekdaysRegex(t);
+ }),
+ bt(["dd", "ddd", "dddd"], function(t, e, n, i) {
+ null != (i = n._locale.weekdaysParse(t, i, n._strict)) ? e.d = i : p(n).invalidWeekday = t;
+ }),
+ bt(["d", "e", "E"], function(t, e, n, i) {
+ e[i] = q(t);
+ });
+ var Vt = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
+ Gt = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
+ Xt = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
+ Zt = ut,
+ Qt = ut,
+ Kt = ut;
+ function Jt() {
+ function t(t, e) {
+ return e.length - t.length;
+ }
+ for (var e, n, i, r = [], a = [], s = [], o = [], l = 0; l < 7; l++) {
+ i = d([2e3, 1]).day(l),
+ e = ft(this.weekdaysMin(i, "")),
+ n = ft(this.weekdaysShort(i, "")),
+ i = ft(this.weekdays(i, "")),
+ r.push(e),
+ a.push(n),
+ s.push(i),
+ o.push(e),
+ o.push(n),
+ o.push(i);
+ }
+ r.sort(t),
+ a.sort(t),
+ s.sort(t),
+ o.sort(t),
+ this._weekdaysRegex = new RegExp("^(" + o.join("|") + ")", "i"),
+ this._weekdaysShortRegex = this._weekdaysRegex,
+ this._weekdaysMinRegex = this._weekdaysRegex,
+ this._weekdaysStrictRegex = new RegExp("^(" + s.join("|") + ")", "i"),
+ this._weekdaysShortStrictRegex = new RegExp("^(" + a.join("|") + ")", "i"),
+ this._weekdaysMinStrictRegex = new RegExp("^(" + r.join("|") + ")", "i");
+ }
+ function te() {
+ return this.hours() % 12 || 12;
+ }
+ function ee(t, e) {
+ I(t, 0, 0, function() {
+ return this.localeData().meridiem(this.hours(), this.minutes(), e);
+ });
+ }
+ function ne(t, e) {
+ return e._meridiemParse;
+ }
+ I("H", ["HH", 2], 0, "hour"),
+ I("h", ["hh", 2], 0, te),
+ I("k", ["kk", 2], 0, function() {
+ return this.hours() || 24;
+ }),
+ I("hmm", 0, 0, function() {
+ return "" + te.apply(this) + L(this.minutes(), 2);
+ }),
+ I("hmmss", 0, 0, function() {
+ return "" + te.apply(this) + L(this.minutes(), 2) + L(this.seconds(), 2);
+ }),
+ I("Hmm", 0, 0, function() {
+ return "" + this.hours() + L(this.minutes(), 2);
+ }),
+ I("Hmmss", 0, 0, function() {
+ return "" + this.hours() + L(this.minutes(), 2) + L(this.seconds(), 2);
+ }),
+ ee("a", !0),
+ ee("A", !1),
+ P("hour", "h"),
+ U("hour", 13),
+ dt("a", ne),
+ dt("A", ne),
+ dt("H", et),
+ dt("h", et),
+ dt("k", et),
+ dt("HH", et, Q),
+ dt("hh", et, Q),
+ dt("kk", et, Q),
+ dt("hmm", nt),
+ dt("hmmss", it),
+ dt("Hmm", nt),
+ dt("Hmmss", it),
+ mt(["H", "HH"], wt),
+ mt(["k", "kk"], function(t, e, n) {
+ t = q(t), e[wt] = 24 === t ? 0 : t;
+ }),
+ mt(["a", "A"], function(t, e, n) {
+ n._isPm = n._locale.isPM(t), n._meridiem = t;
+ }),
+ mt(["h", "hh"], function(t, e, n) {
+ e[wt] = q(t), p(n).bigHour = !0;
+ }),
+ mt("hmm", function(t, e, n) {
+ var i = t.length - 2;
+ e[wt] = q(t.substr(0, i)), e[Tt] = q(t.substr(i)), p(n).bigHour = !0;
+ }),
+ mt("hmmss", function(t, e, n) {
+ var i = t.length - 4, r = t.length - 2;
+ e[wt] = q(t.substr(0, i)), e[Tt] = q(t.substr(i, 2)), e[Ct] = q(t.substr(r)), p(n).bigHour = !0;
+ }),
+ mt("Hmm", function(t, e, n) {
+ var i = t.length - 2;
+ e[wt] = q(t.substr(0, i)), e[Tt] = q(t.substr(i));
+ }),
+ mt("Hmmss", function(t, e, n) {
+ var i = t.length - 4, r = t.length - 2;
+ e[wt] = q(t.substr(0, i)), e[Tt] = q(t.substr(i, 2)), e[Ct] = q(t.substr(r));
+ }),
+ ut = V("Hours", !0);
+ var ie,
+ re = {
+ calendar: {
+ sameDay: "[Today at] LT",
+ nextDay: "[Tomorrow at] LT",
+ nextWeek: "dddd [at] LT",
+ lastDay: "[Yesterday at] LT",
+ lastWeek: "[Last] dddd [at] LT",
+ sameElse: "L",
+ },
+ longDateFormat: {
+ LTS: "h:mm:ss A",
+ LT: "h:mm A",
+ L: "MM/DD/YYYY",
+ LL: "MMMM D, YYYY",
+ LLL: "MMMM D, YYYY h:mm A",
+ LLLL: "dddd, MMMM D, YYYY h:mm A",
+ },
+ invalidDate: "Invalid date",
+ ordinal: "%d",
+ dayOfMonthOrdinalParse: /\d{1,2}/,
+ relativeTime: {
+ future: "in %s",
+ past: "%s ago",
+ s: "a few seconds",
+ ss: "%d seconds",
+ m: "a minute",
+ mm: "%d minutes",
+ h: "an hour",
+ hh: "%d hours",
+ d: "a day",
+ dd: "%d days",
+ w: "a week",
+ ww: "%d weeks",
+ M: "a month",
+ MM: "%d months",
+ y: "a year",
+ yy: "%d years",
+ },
+ months: Lt,
+ monthsShort: Ot,
+ week: { dow: 0, doy: 6 },
+ weekdays: Vt,
+ weekdaysMin: Xt,
+ weekdaysShort: Gt,
+ meridiemParse: /[ap]\.?m?\.?/i,
+ },
+ ae = {},
+ se = {};
+ function oe(t) {
+ return t && t.toLowerCase().replace("_", "-");
+ }
+ function le(t) {
+ for (var e, n, i, r, a = 0; a < t.length;) {
+ for (e = (r = oe(t[a]).split("-")).length, n = (n = oe(t[a + 1])) ? n.split("-") : null; 0 < e;) {
+ if (i = ce(r.slice(0, e).join("-"))) return i;
+ if (
+ n && n.length >= e && function(t, e) {
+ for (var n = Math.min(t.length, e.length), i = 0; i < n; i += 1) if (t[i] !== e[i]) return i;
+ return n;
+ }(r, n) >= e - 1
+ ) break;
+ e--;
+ }
+ a++;
+ }
+ return ie;
+ }
+ function ce(e) {
+ var n;
+ if (void 0 === ae[e] && t && t.exports && null != e.match("^[^/\\\\]*$")) {
+ try {
+ n = ie._abbr,
+ function(t) {
+ throw new Error(
+ "Could not dynamically require \"" + t
+ + "\". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.",
+ );
+ }("./locale/" + e),
+ he(n);
+ } catch (n) {
+ ae[e] = null;
+ }
+ }
+ return ae[e];
+ }
+ function he(t, e) {
+ return t
+ && ((e = o(e) ? de(t) : ue(t, e))
+ ? ie = e
+ : "undefined" != typeof console && console.warn
+ && console.warn("Locale " + t + " not found. Did you forget to load it?")),
+ ie._abbr;
+ }
+ function ue(t, e) {
+ if (null === e) return delete ae[t], null;
+ var n, i = re;
+ if (e.abbr = t, null != ae[t]) {
+ C(
+ "defineLocaleOverride",
+ "use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.",
+ ), i = ae[t]._config;
+ } else if (null != e.parentLocale) {
+ if (null != ae[e.parentLocale]) i = ae[e.parentLocale]._config;
+ else {
+ if (null == (n = ce(e.parentLocale))) {
+ return se[e.parentLocale] || (se[e.parentLocale] = []),
+ se[e.parentLocale].push({ name: t, config: e }),
+ null;
+ }
+ i = n._config;
+ }
+ }
+ return ae[t] = new A(S(i, e)),
+ se[t] && se[t].forEach(function(t) {
+ ue(t.name, t.config);
+ }),
+ he(t),
+ ae[t];
+ }
+ function de(t) {
+ var e;
+ if (!(t = t && t._locale && t._locale._abbr ? t._locale._abbr : t)) return ie;
+ if (!i(t)) {
+ if (e = ce(t)) return e;
+ t = [t];
+ }
+ return le(t);
+ }
+ function pe(t) {
+ var e = t._a;
+ return e && -2 === p(t).overflow
+ && (e = e[vt] < 0 || 11 < e[vt]
+ ? vt
+ : e[kt] < 1 || e[kt] > Dt(e[xt], e[vt])
+ ? kt
+ : e[wt] < 0 || 24 < e[wt] || 24 === e[wt] && (0 !== e[Tt] || 0 !== e[Ct] || 0 !== e[Et])
+ ? wt
+ : e[Tt] < 0 || 59 < e[Tt]
+ ? Tt
+ : e[Ct] < 0 || 59 < e[Ct]
+ ? Ct
+ : e[Et] < 0 || 999 < e[Et]
+ ? Et
+ : -1,
+ p(t)._overflowDayOfYear && (e < xt || kt < e) && (e = kt),
+ p(t)._overflowWeeks && -1 === e && (e = St),
+ p(t)._overflowWeekday && -1 === e && (e = At),
+ p(t).overflow = e),
+ t;
+ }
+ var fe =
+ /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+ ge =
+ /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
+ ye = /Z|[+-]\d\d(?::?\d\d)?/,
+ me = [
+ ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/],
+ ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/],
+ ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/],
+ ["GGGG-[W]WW", /\d{4}-W\d\d/, !1],
+ ["YYYY-DDD", /\d{4}-\d{3}/],
+ ["YYYY-MM", /\d{4}-\d\d/, !1],
+ ["YYYYYYMMDD", /[+-]\d{10}/],
+ ["YYYYMMDD", /\d{8}/],
+ ["GGGG[W]WWE", /\d{4}W\d{3}/],
+ ["GGGG[W]WW", /\d{4}W\d{2}/, !1],
+ ["YYYYDDD", /\d{7}/],
+ ["YYYYMM", /\d{6}/, !1],
+ ["YYYY", /\d{4}/, !1],
+ ],
+ be = [
+ ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/],
+ ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/],
+ ["HH:mm:ss", /\d\d:\d\d:\d\d/],
+ ["HH:mm", /\d\d:\d\d/],
+ ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/],
+ ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/],
+ ["HHmmss", /\d\d\d\d\d\d/],
+ ["HHmm", /\d\d\d\d/],
+ ["HH", /\d\d/],
+ ],
+ _e = /^\/?Date\((-?\d+)/i,
+ xe =
+ /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
+ ve = { UT: 0, GMT: 0, EDT: -240, EST: -300, CDT: -300, CST: -360, MDT: -360, MST: -420, PDT: -420, PST: -480 };
+ function ke(t) {
+ var e, n, i, r, a, s, o = t._i, l = fe.exec(o) || ge.exec(o), c = (o = me.length, be.length);
+ if (l) {
+ for (p(t).iso = !0, e = 0, n = o; e < n; e++) {
+ if (me[e][1].exec(l[1])) {
+ r = me[e][0], i = !1 !== me[e][2];
+ break;
+ }
+ }
+ if (null == r) t._isValid = !1;
+ else {
+ if (l[3]) {
+ for (e = 0, n = c; e < n; e++) {
+ if (be[e][1].exec(l[3])) {
+ a = (l[2] || " ") + be[e][0];
+ break;
+ }
+ }
+ if (null == a) return void (t._isValid = !1);
+ }
+ if (i || null == a) {
+ if (l[4]) {
+ if (!ye.exec(l[4])) return void (t._isValid = !1);
+ s = "Z";
+ }
+ t._f = r + (a || "") + (s || ""), Se(t);
+ } else t._isValid = !1;
+ }
+ } else t._isValid = !1;
+ }
+ function we(t, e, n, i, r, a) {
+ return t = [
+ function(t) {
+ return (t = parseInt(t, 10)) <= 49 ? 2e3 + t : t <= 999 ? 1900 + t : t;
+ }(t),
+ Ot.indexOf(e),
+ parseInt(n, 10),
+ parseInt(i, 10),
+ parseInt(r, 10),
+ ],
+ a && t.push(parseInt(a, 10)),
+ t;
+ }
+ function Te(t) {
+ var e,
+ n,
+ i,
+ r,
+ a = xe.exec(
+ t._i.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(
+ /\s\s*$/,
+ "",
+ ),
+ );
+ a
+ ? (i = e = we(a[4], a[3], a[2], a[5], a[6], a[7]),
+ r = t,
+ (n = a[1]) && Gt.indexOf(n) !== new Date(i[0], i[1], i[2]).getDay()
+ ? (p(r).weekdayMismatch = !0, r._isValid = !1)
+ : (t._a = e,
+ t._tzm =
+ (n = a[8],
+ i = a[9],
+ r = a[10],
+ n ? ve[n] : i ? 0 : ((n = parseInt(r, 10)) - (i = n % 100)) / 100 * 60 + i),
+ t._d = jt.apply(null, t._a),
+ t._d.setUTCMinutes(t._d.getUTCMinutes() - t._tzm),
+ p(t).rfc2822 = !0))
+ : t._isValid = !1;
+ }
+ function Ce(t, e, n) {
+ return null != t ? t : null != e ? e : n;
+ }
+ function Ee(t) {
+ var e, i, r, a, s, o, l, c, h, u, d, f = [];
+ if (!t._d) {
+ for (
+ r = t,
+ a = new Date(n.now()),
+ i = r._useUTC
+ ? [a.getUTCFullYear(), a.getUTCMonth(), a.getUTCDate()]
+ : [a.getFullYear(), a.getMonth(), a.getDate()],
+ t._w && null == t._a[kt] && null == t._a[vt] && (null != (a = (r = t)._w).GG || null != a.W || null != a.E
+ ? (c = 1,
+ h = 4,
+ s = Ce(a.GG, r._a[xt], Wt(Le(), 1, 4).year),
+ o = Ce(a.W, 1),
+ ((l = Ce(a.E, 1)) < 1 || 7 < l) && (u = !0))
+ : (c = r._locale._week.dow,
+ h = r._locale._week.doy,
+ d = Wt(Le(), c, h),
+ s = Ce(a.gg, r._a[xt], d.year),
+ o = Ce(a.w, d.week),
+ null != a.d
+ ? ((l = a.d) < 0 || 6 < l) && (u = !0)
+ : null != a.e
+ ? (l = a.e + c, (a.e < 0 || 6 < a.e) && (u = !0))
+ : l = c),
+ o < 1 || o > Ht(s, c, h)
+ ? p(r)._overflowWeeks = !0
+ : null != u
+ ? p(r)._overflowWeekday = !0
+ : (d = Ut(s, o, l, c, h), r._a[xt] = d.year, r._dayOfYear = d.dayOfYear)),
+ null != t._dayOfYear
+ && (a = Ce(t._a[xt], i[xt]),
+ (t._dayOfYear > $t(a) || 0 === t._dayOfYear) && (p(t)._overflowDayOfYear = !0),
+ u = jt(a, 0, t._dayOfYear),
+ t._a[vt] = u.getUTCMonth(),
+ t._a[kt] = u.getUTCDate()),
+ e = 0;
+ e < 3 && null == t._a[e];
+ ++e
+ ) t._a[e] = f[e] = i[e];
+ for (; e < 7; e++) t._a[e] = f[e] = null == t._a[e] ? 2 === e ? 1 : 0 : t._a[e];
+ 24 === t._a[wt] && 0 === t._a[Tt] && 0 === t._a[Ct] && 0 === t._a[Et] && (t._nextDay = !0, t._a[wt] = 0),
+ t._d = (t._useUTC ? jt : Yt).apply(null, f),
+ s = t._useUTC ? t._d.getUTCDay() : t._d.getDay(),
+ null != t._tzm && t._d.setUTCMinutes(t._d.getUTCMinutes() - t._tzm),
+ t._nextDay && (t._a[wt] = 24),
+ t._w && void 0 !== t._w.d && t._w.d !== s && (p(t).weekdayMismatch = !0);
+ }
+ }
+ function Se(t) {
+ if (t._f === n.ISO_8601) ke(t);
+ else if (t._f === n.RFC_2822) Te(t);
+ else {
+ t._a = [], p(t).empty = !0;
+ for (
+ var e,
+ i,
+ r,
+ s,
+ o,
+ l = "" + t._i,
+ c = l.length,
+ h = 0,
+ u = R(t._f, t._locale).match(O) || [],
+ d = u.length,
+ f = 0;
+ f < d;
+ f++
+ ) {
+ i = u[f],
+ (e = (l.match(pt(i, t)) || [])[0])
+ && (0 < (r = l.substr(0, l.indexOf(e))).length && p(t).unusedInput.push(r),
+ l = l.slice(l.indexOf(e) + e.length),
+ h += e.length),
+ B[i]
+ ? (e ? p(t).empty = !1 : p(t).unusedTokens.push(i),
+ r = i,
+ o = t,
+ null != (s = e) && a(yt, r) && yt[r](s, o._a, o, r))
+ : t._strict && !e && p(t).unusedTokens.push(i);
+ }
+ p(t).charsLeftOver = c - h,
+ 0 < l.length && p(t).unusedInput.push(l),
+ t._a[wt] <= 12 && !0 === p(t).bigHour && 0 < t._a[wt] && (p(t).bigHour = void 0),
+ p(t).parsedDateParts = t._a.slice(0),
+ p(t).meridiem = t._meridiem,
+ t._a[wt] = function(t, e, n) {
+ return null == n
+ ? e
+ : null != t.meridiemHour
+ ? t.meridiemHour(e, n)
+ : null != t.isPM
+ ? ((t = t.isPM(n)) && e < 12 && (e += 12), e = t || 12 !== e ? e : 0)
+ : e;
+ }(t._locale, t._a[wt], t._meridiem),
+ null !== (c = p(t).era) && (t._a[xt] = t._locale.erasConvertYear(c, t._a[xt])),
+ Ee(t),
+ pe(t);
+ }
+ }
+ function Ae(t) {
+ var e, a, s, d = t._i, y = t._f;
+ return t._locale = t._locale || de(t._l),
+ null === d || void 0 === y && "" === d
+ ? g({ nullInput: !0 })
+ : ("string" == typeof d && (t._i = d = t._locale.preparse(d)),
+ v(d) ? new x(pe(d)) : (c(d) ? t._d = d : i(y)
+ ? function(t) {
+ var e, n, i, r, a, s, o = !1, l = t._f.length;
+ if (0 === l) return p(t).invalidFormat = !0, t._d = new Date(NaN);
+ for (r = 0; r < l; r++) {
+ a = 0,
+ s = !1,
+ e = _({}, t),
+ null != t._useUTC && (e._useUTC = t._useUTC),
+ e._f = t._f[r],
+ Se(e),
+ f(e) && (s = !0),
+ a = (a += p(e).charsLeftOver) + 10 * p(e).unusedTokens.length,
+ p(e).score = a,
+ o ? a < i && (i = a, n = e) : (null == i || a < i || s) && (i = a, n = e, s && (o = !0));
+ }
+ u(t, n || e);
+ }(t)
+ : y
+ ? Se(t)
+ : o(y = (d = t)._i)
+ ? d._d = new Date(n.now())
+ : c(y)
+ ? d._d = new Date(y.valueOf())
+ : "string" == typeof y
+ ? (a = d,
+ null !== (e = _e.exec(a._i))
+ ? a._d = new Date(+e[1])
+ : (ke(a),
+ !1 === a._isValid
+ && (delete a._isValid,
+ Te(a),
+ !1 === a._isValid
+ && (delete a._isValid, a._strict ? a._isValid = !1 : n.createFromInputFallback(a)))))
+ : i(y)
+ ? (d._a = h(y.slice(0), function(t) {
+ return parseInt(t, 10);
+ }),
+ Ee(d))
+ : r(y)
+ ? (e = d)._d
+ || (s = void 0 === (a = j(e._i)).day ? a.date : a.day,
+ e._a = h([a.year, a.month, s, a.hour, a.minute, a.second, a.millisecond], function(t) {
+ return t && parseInt(t, 10);
+ }),
+ Ee(e))
+ : l(y)
+ ? d._d = new Date(y)
+ : n.createFromInputFallback(d),
+ f(t) || (t._d = null),
+ t));
+ }
+ function De(t, e, n, a, o) {
+ var l = {};
+ return !0 !== e && !1 !== e || (a = e, e = void 0),
+ !0 !== n && !1 !== n || (a = n, n = void 0),
+ (r(t) && s(t) || i(t) && 0 === t.length) && (t = void 0),
+ l._isAMomentObject = !0,
+ l._useUTC = l._isUTC = o,
+ l._l = n,
+ l._i = t,
+ l._f = e,
+ l._strict = a,
+ (o = new x(pe(Ae(o = l))))._nextDay && (o.add(1, "d"), o._nextDay = void 0),
+ o;
+ }
+ function Le(t, e, n, i) {
+ return De(t, e, n, i, !1);
+ }
+ function Oe(t, e) {
+ var n, r;
+ if (!(e = 1 === e.length && i(e[0]) ? e[0] : e).length) return Le();
+ for (n = e[0], r = 1; r < e.length; ++r) e[r].isValid() && !e[r][t](n) || (n = e[r]);
+ return n;
+ }
+ n.createFromInputFallback = w(
+ "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",
+ function(t) {
+ t._d = new Date(t._i + (t._useUTC ? " UTC" : ""));
+ },
+ ),
+ n.ISO_8601 = function() {},
+ n.RFC_2822 = function() {},
+ nt = w(
+ "moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",
+ function() {
+ var t = Le.apply(null, arguments);
+ return this.isValid() && t.isValid() ? t < this ? this : t : g();
+ },
+ ),
+ it = w(
+ "moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",
+ function() {
+ var t = Le.apply(null, arguments);
+ return this.isValid() && t.isValid() ? this < t ? this : t : g();
+ },
+ );
+ var Ne = ["year", "quarter", "month", "week", "day", "hour", "minute", "second", "millisecond"];
+ function Me(t) {
+ var e = (t = j(t)).year || 0,
+ n = t.quarter || 0,
+ i = t.month || 0,
+ r = t.week || t.isoWeek || 0,
+ s = t.day || 0,
+ o = t.hour || 0,
+ l = t.minute || 0,
+ c = t.second || 0,
+ h = t.millisecond || 0;
+ this._isValid = function(t) {
+ var e, n, i = !1, r = Ne.length;
+ for (e in t) if (a(t, e) && (-1 === _t.call(Ne, e) || null != t[e] && isNaN(t[e]))) return !1;
+ for (n = 0; n < r; ++n) {
+ if (t[Ne[n]]) {
+ if (i) return !1;
+ parseFloat(t[Ne[n]]) !== q(t[Ne[n]]) && (i = !0);
+ }
+ }
+ return !0;
+ }(t),
+ this._milliseconds = +h + 1e3 * c + 6e4 * l + 1e3 * o * 60 * 60,
+ this._days = +s + 7 * r,
+ this._months = +i + 3 * n + 12 * e,
+ this._data = {},
+ this._locale = de(),
+ this._bubble();
+ }
+ function Be(t) {
+ return t instanceof Me;
+ }
+ function Ie(t) {
+ return t < 0 ? -1 * Math.round(-1 * t) : Math.round(t);
+ }
+ function Fe(t, e) {
+ I(t, 0, 0, function() {
+ var t = this.utcOffset(), n = "+";
+ return t < 0 && (t = -t, n = "-"), n + L(~~(t / 60), 2) + e + L(~~t % 60, 2);
+ });
+ }
+ Fe("Z", ":"),
+ Fe("ZZ", ""),
+ dt("Z", ht),
+ dt("ZZ", ht),
+ mt(["Z", "ZZ"], function(t, e, n) {
+ n._useUTC = !0, n._tzm = $e(ht, t);
+ });
+ var Re = /([\+\-]|\d\d)/gi;
+ function $e(t, e) {
+ return null === (e = (e || "").match(t))
+ ? null
+ : 0 === (e = 60 * (t = ((e[e.length - 1] || []) + "").match(Re) || ["-", 0, 0])[1] + q(t[2]))
+ ? 0
+ : "+" === t[0]
+ ? e
+ : -e;
+ }
+ function Pe(t, e) {
+ var i;
+ return e._isUTC
+ ? (e = e.clone(),
+ i = (v(t) || c(t) ? t : Le(t)).valueOf() - e.valueOf(),
+ e._d.setTime(e._d.valueOf() + i),
+ n.updateOffset(e, !1),
+ e)
+ : Le(t).local();
+ }
+ function Ye(t) {
+ return -Math.round(t._d.getTimezoneOffset());
+ }
+ function je() {
+ return !!this.isValid() && this._isUTC && 0 === this._offset;
+ }
+ n.updateOffset = function() {};
+ var ze = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
+ Ue =
+ /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
+ function We(t, e) {
+ var n, i = t, r = null;
+ return Be(t)
+ ? i = { ms: t._milliseconds, d: t._days, M: t._months }
+ : l(t) || !isNaN(+t)
+ ? (i = {}, e ? i[e] = +t : i.milliseconds = +t)
+ : (r = ze.exec(t))
+ ? (n = "-" === r[1] ? -1 : 1,
+ i = {
+ y: 0,
+ d: q(r[kt]) * n,
+ h: q(r[wt]) * n,
+ m: q(r[Tt]) * n,
+ s: q(r[Ct]) * n,
+ ms: q(Ie(1e3 * r[Et])) * n,
+ })
+ : (r = Ue.exec(t))
+ ? (n = "-" === r[1] ? -1 : 1,
+ i = {
+ y: He(r[2], n),
+ M: He(r[3], n),
+ w: He(r[4], n),
+ d: He(r[5], n),
+ h: He(r[6], n),
+ m: He(r[7], n),
+ s: He(r[8], n),
+ })
+ : null == i
+ ? i = {}
+ : "object" == typeof i && ("from" in i || "to" in i) && (e = function(t, e) {
+ var n;
+ return t.isValid() && e.isValid()
+ ? (e = Pe(e, t),
+ t.isBefore(e) ? n = qe(t, e) : ((n = qe(e, t)).milliseconds = -n.milliseconds, n.months = -n.months),
+ n)
+ : { milliseconds: 0, months: 0 };
+ }(Le(i.from), Le(i.to)),
+ (i = {}).ms = e.milliseconds,
+ i.M = e.months),
+ r = new Me(i),
+ Be(t) && a(t, "_locale") && (r._locale = t._locale),
+ Be(t) && a(t, "_isValid") && (r._isValid = t._isValid),
+ r;
+ }
+ function He(t, e) {
+ return t = t && parseFloat(t.replace(",", ".")), (isNaN(t) ? 0 : t) * e;
+ }
+ function qe(t, e) {
+ var n = {};
+ return n.months = e.month() - t.month() + 12 * (e.year() - t.year()),
+ t.clone().add(n.months, "M").isAfter(e) && --n.months,
+ n.milliseconds = +e - +t.clone().add(n.months, "M"),
+ n;
+ }
+ function Ve(t, e) {
+ return function(n, i) {
+ var r;
+ return null === i || isNaN(+i)
+ || (C(
+ e,
+ "moment()." + e + "(period, number) is deprecated. Please use moment()." + e
+ + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.",
+ ),
+ r = n,
+ n = i,
+ i = r),
+ Ge(this, We(n, i), t),
+ this;
+ };
+ }
+ function Ge(t, e, i, r) {
+ var a = e._milliseconds, s = Ie(e._days);
+ e = Ie(e._months),
+ t.isValid()
+ && (r = null == r || r,
+ e && It(t, G(t, "Month") + e * i),
+ s && X(t, "Date", G(t, "Date") + s * i),
+ a && t._d.setTime(t._d.valueOf() + a * i),
+ r && n.updateOffset(t, s || e));
+ }
+ function Xe(t) {
+ return "string" == typeof t || t instanceof String;
+ }
+ function Ze(t) {
+ return v(t) || c(t) || Xe(t) || l(t) || function(t) {
+ var e = i(t), n = !1;
+ return e && (n = 0 === t.filter(function(e) {
+ return !l(e) && Xe(t);
+ }).length),
+ e && n;
+ }(t) || function(t) {
+ var e,
+ n,
+ i = r(t) && !s(t),
+ o = !1,
+ l = [
+ "years",
+ "year",
+ "y",
+ "months",
+ "month",
+ "M",
+ "days",
+ "day",
+ "d",
+ "dates",
+ "date",
+ "D",
+ "hours",
+ "hour",
+ "h",
+ "minutes",
+ "minute",
+ "m",
+ "seconds",
+ "second",
+ "s",
+ "milliseconds",
+ "millisecond",
+ "ms",
+ ],
+ c = l.length;
+ for (e = 0; e < c; e += 1) n = l[e], o = o || a(t, n);
+ return i && o;
+ }(t) || null == t;
+ }
+ function Qe(t, e) {
+ if (t.date() < e.date()) return -Qe(e, t);
+ var n = 12 * (e.year() - t.year()) + (e.month() - t.month()), i = t.clone().add(n, "months");
+ return -(n
+ + (e = e - i < 0
+ ? (e - i) / (i - t.clone().add(n - 1, "months"))
+ : (e - i) / (t.clone().add(1 + n, "months") - i))) || 0;
+ }
+ function Ke(t) {
+ return void 0 === t ? this._locale._abbr : (null != (t = de(t)) && (this._locale = t), this);
+ }
+ function Je() {
+ return this._locale;
+ }
+ We.fn = Me.prototype,
+ We.invalid = function() {
+ return We(NaN);
+ },
+ Lt = Ve(1, "add"),
+ Vt = Ve(-1, "subtract"),
+ n.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ",
+ n.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]",
+ Xt = w(
+ "moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",
+ function(t) {
+ return void 0 === t ? this.localeData() : this.locale(t);
+ },
+ );
+ var tn, en = 126227808e5;
+ function nn(t, e) {
+ return (t % e + e) % e;
+ }
+ function rn(t, e, n) {
+ return t < 100 && 0 <= t ? new Date(t + 400, e, n) - en : new Date(t, e, n).valueOf();
+ }
+ function an(t, e, n) {
+ return t < 100 && 0 <= t ? Date.UTC(t + 400, e, n) - en : Date.UTC(t, e, n);
+ }
+ function sn(t, e) {
+ return e.erasAbbrRegex(t);
+ }
+ function on() {
+ for (var t = [], e = [], n = [], i = [], r = this.eras(), a = 0, s = r.length; a < s; ++a) {
+ e.push(ft(r[a].name)),
+ t.push(ft(r[a].abbr)),
+ n.push(ft(r[a].narrow)),
+ i.push(ft(r[a].name)),
+ i.push(ft(r[a].abbr)),
+ i.push(ft(r[a].narrow));
+ }
+ this._erasRegex = new RegExp("^(" + i.join("|") + ")", "i"),
+ this._erasNameRegex = new RegExp("^(" + e.join("|") + ")", "i"),
+ this._erasAbbrRegex = new RegExp("^(" + t.join("|") + ")", "i"),
+ this._erasNarrowRegex = new RegExp("^(" + n.join("|") + ")", "i");
+ }
+ function ln(t, e) {
+ I(0, [t, t.length], 0, e);
+ }
+ function cn(t, e, n, i, r) {
+ var a;
+ return null == t ? Wt(this, i, r).year : (a = Ht(t, i, r),
+ function(t, e, n, i, r) {
+ return e = jt((t = Ut(t, e, n, i, r)).year, 0, t.dayOfYear),
+ this.year(e.getUTCFullYear()),
+ this.month(e.getUTCMonth()),
+ this.date(e.getUTCDate()),
+ this;
+ }.call(this, t, e = a < e ? a : e, n, i, r));
+ }
+ for (
+ I("N", 0, 0, "eraAbbr"),
+ I("NN", 0, 0, "eraAbbr"),
+ I("NNN", 0, 0, "eraAbbr"),
+ I("NNNN", 0, 0, "eraName"),
+ I("NNNNN", 0, 0, "eraNarrow"),
+ I("y", ["y", 1], "yo", "eraYear"),
+ I("y", ["yy", 2], 0, "eraYear"),
+ I("y", ["yyy", 3], 0, "eraYear"),
+ I("y", ["yyyy", 4], 0, "eraYear"),
+ dt("N", sn),
+ dt("NN", sn),
+ dt("NNN", sn),
+ dt("NNNN", function(t, e) {
+ return e.erasNameRegex(t);
+ }),
+ dt("NNNNN", function(t, e) {
+ return e.erasNarrowRegex(t);
+ }),
+ mt(["N", "NN", "NNN", "NNNN", "NNNNN"], function(t, e, n, i) {
+ (i = n._locale.erasParse(t, i, n._strict)) ? p(n).era = i : p(n).invalidEra = t;
+ }),
+ dt("y", ot),
+ dt("yy", ot),
+ dt("yyy", ot),
+ dt("yyyy", ot),
+ dt("yo", function(t, e) {
+ return e._eraYearOrdinalRegex || ot;
+ }),
+ mt(["y", "yy", "yyy", "yyyy"], xt),
+ mt(["yo"], function(t, e, n, i) {
+ var r;
+ n._locale._eraYearOrdinalRegex && (r = t.match(n._locale._eraYearOrdinalRegex)),
+ n._locale.eraYearOrdinalParse ? e[xt] = n._locale.eraYearOrdinalParse(t, r) : e[xt] = parseInt(t, 10);
+ }),
+ I(0, ["gg", 2], 0, function() {
+ return this.weekYear() % 100;
+ }),
+ I(0, ["GG", 2], 0, function() {
+ return this.isoWeekYear() % 100;
+ }),
+ ln("gggg", "weekYear"),
+ ln("ggggg", "weekYear"),
+ ln("GGGG", "isoWeekYear"),
+ ln("GGGGG", "isoWeekYear"),
+ P("weekYear", "gg"),
+ P("isoWeekYear", "GG"),
+ U("weekYear", 1),
+ U("isoWeekYear", 1),
+ dt("G", lt),
+ dt("g", lt),
+ dt("GG", et, Q),
+ dt("gg", et, Q),
+ dt("GGGG", at, J),
+ dt("gggg", at, J),
+ dt("GGGGG", st, tt),
+ dt("ggggg", st, tt),
+ bt(["gggg", "ggggg", "GGGG", "GGGGG"], function(t, e, n, i) {
+ e[i.substr(0, 2)] = q(t);
+ }),
+ bt(["gg", "GG"], function(t, e, i, r) {
+ e[r] = n.parseTwoDigitYear(t);
+ }),
+ I("Q", 0, "Qo", "quarter"),
+ P("quarter", "Q"),
+ U("quarter", 7),
+ dt("Q", Z),
+ mt("Q", function(t, e) {
+ e[vt] = 3 * (q(t) - 1);
+ }),
+ I("D", ["DD", 2], "Do", "date"),
+ P("date", "D"),
+ U("date", 9),
+ dt("D", et),
+ dt("DD", et, Q),
+ dt("Do", function(t, e) {
+ return t ? e._dayOfMonthOrdinalParse || e._ordinalParse : e._dayOfMonthOrdinalParseLenient;
+ }),
+ mt(["D", "DD"], kt),
+ mt("Do", function(t, e) {
+ e[kt] = q(t.match(et)[0]);
+ }),
+ at = V("Date", !0),
+ I("DDD", ["DDDD", 3], "DDDo", "dayOfYear"),
+ P("dayOfYear", "DDD"),
+ U("dayOfYear", 4),
+ dt("DDD", rt),
+ dt("DDDD", K),
+ mt(["DDD", "DDDD"], function(t, e, n) {
+ n._dayOfYear = q(t);
+ }),
+ I("m", ["mm", 2], 0, "minute"),
+ P("minute", "m"),
+ U("minute", 14),
+ dt("m", et),
+ dt("mm", et, Q),
+ mt(["m", "mm"], Tt),
+ J = V("Minutes", !1),
+ I("s", ["ss", 2], 0, "second"),
+ P("second", "s"),
+ U("second", 15),
+ dt("s", et),
+ dt("ss", et, Q),
+ mt(["s", "ss"], Ct),
+ st = V("Seconds", !1),
+ I("S", 0, 0, function() {
+ return ~~(this.millisecond() / 100);
+ }),
+ I(0, ["SS", 2], 0, function() {
+ return ~~(this.millisecond() / 10);
+ }),
+ I(0, ["SSS", 3], 0, "millisecond"),
+ I(0, ["SSSS", 4], 0, function() {
+ return 10 * this.millisecond();
+ }),
+ I(0, ["SSSSS", 5], 0, function() {
+ return 100 * this.millisecond();
+ }),
+ I(0, ["SSSSSS", 6], 0, function() {
+ return 1e3 * this.millisecond();
+ }),
+ I(0, ["SSSSSSS", 7], 0, function() {
+ return 1e4 * this.millisecond();
+ }),
+ I(0, ["SSSSSSSS", 8], 0, function() {
+ return 1e5 * this.millisecond();
+ }),
+ I(0, ["SSSSSSSSS", 9], 0, function() {
+ return 1e6 * this.millisecond();
+ }),
+ P("millisecond", "ms"),
+ U("millisecond", 16),
+ dt("S", rt, Z),
+ dt("SS", rt, Q),
+ dt("SSS", rt, K),
+ tn = "SSSS";
+ tn.length <= 9;
+ tn += "S"
+ ) dt(tn, ot);
+ function hn(t, e) {
+ e[Et] = q(1e3 * ("0." + t));
+ }
+ for (tn = "S"; tn.length <= 9; tn += "S") mt(tn, hn);
+ function un(t) {
+ return t;
+ }
+ function dn(t, e, n, i) {
+ var r = de();
+ return i = d().set(i, e), r[n](i, t);
+ }
+ function pn(t, e, n) {
+ if (l(t) && (e = t, t = void 0), t = t || "", null != e) return dn(t, e, n, "month");
+ for (var i = [], r = 0; r < 12; r++) i[r] = dn(t, r, n, "month");
+ return i;
+ }
+ function fn(t, e, n, i) {
+ "boolean" == typeof t ? l(e) && (n = e, e = void 0) : (e = t, t = !1, l(n = e) && (n = e, e = void 0)),
+ e = e || "";
+ var r, a = de(), s = t ? a._week.dow : 0, o = [];
+ if (null != n) return dn(e, (n + s) % 7, i, "day");
+ for (r = 0; r < 7; r++) o[r] = dn(e, (r + s) % 7, i, "day");
+ return o;
+ }
+ tt = V("Milliseconds", !1),
+ I("z", 0, 0, "zoneAbbr"),
+ I("zz", 0, 0, "zoneName"),
+ (Z = x.prototype).add = Lt,
+ Z.calendar = function(t, e) {
+ 1 === arguments.length && (arguments[0]
+ ? Ze(arguments[0]) ? (t = arguments[0], e = void 0) : function(t) {
+ for (
+ var e = r(t) && !s(t),
+ n = !1,
+ i = ["sameDay", "nextDay", "lastDay", "nextWeek", "lastWeek", "sameElse"],
+ o = 0;
+ o < i.length;
+ o += 1
+ ) n = n || a(t, i[o]);
+ return e && n;
+ }(arguments[0]) && (e = arguments[0], t = void 0)
+ : e = t = void 0);
+ var i = Pe(t = t || Le(), this).startOf("day");
+ return i = n.calendarFormat(this, i) || "sameElse",
+ e = e && (E(e[i]) ? e[i].call(this, t) : e[i]),
+ this.format(e || this.localeData().calendar(i, this, Le(t)));
+ },
+ Z.clone = function() {
+ return new x(this);
+ },
+ Z.diff = function(t, e, n) {
+ var i, r, a;
+ if (!this.isValid()) return NaN;
+ if (!(i = Pe(t, this)).isValid()) return NaN;
+ switch (r = 6e4 * (i.utcOffset() - this.utcOffset()), e = Y(e)) {
+ case "year":
+ a = Qe(this, i) / 12;
+ break;
+ case "month":
+ a = Qe(this, i);
+ break;
+ case "quarter":
+ a = Qe(this, i) / 3;
+ break;
+ case "second":
+ a = (this - i) / 1e3;
+ break;
+ case "minute":
+ a = (this - i) / 6e4;
+ break;
+ case "hour":
+ a = (this - i) / 36e5;
+ break;
+ case "day":
+ a = (this - i - r) / 864e5;
+ break;
+ case "week":
+ a = (this - i - r) / 6048e5;
+ break;
+ default:
+ a = this - i;
+ }
+ return n ? a : H(a);
+ },
+ Z.endOf = function(t) {
+ var e, i;
+ if (void 0 === (t = Y(t)) || "millisecond" === t || !this.isValid()) return this;
+ switch (i = this._isUTC ? an : rn, t) {
+ case "year":
+ e = i(this.year() + 1, 0, 1) - 1;
+ break;
+ case "quarter":
+ e = i(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;
+ break;
+ case "month":
+ e = i(this.year(), this.month() + 1, 1) - 1;
+ break;
+ case "week":
+ e = i(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;
+ break;
+ case "isoWeek":
+ e = i(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;
+ break;
+ case "day":
+ case "date":
+ e = i(this.year(), this.month(), this.date() + 1) - 1;
+ break;
+ case "hour":
+ e = this._d.valueOf(), e += 36e5 - nn(e + (this._isUTC ? 0 : 6e4 * this.utcOffset()), 36e5) - 1;
+ break;
+ case "minute":
+ e = this._d.valueOf(), e += 6e4 - nn(e, 6e4) - 1;
+ break;
+ case "second":
+ e = this._d.valueOf(), e += 1e3 - nn(e, 1e3) - 1;
+ }
+ return this._d.setTime(e), n.updateOffset(this, !0), this;
+ },
+ Z.format = function(t) {
+ return t = F(this, t = t || (this.isUtc() ? n.defaultFormatUtc : n.defaultFormat)),
+ this.localeData().postformat(t);
+ },
+ Z.from = function(t, e) {
+ return this.isValid() && (v(t) && t.isValid() || Le(t).isValid())
+ ? We({ to: this, from: t }).locale(this.locale()).humanize(!e)
+ : this.localeData().invalidDate();
+ },
+ Z.fromNow = function(t) {
+ return this.from(Le(), t);
+ },
+ Z.to = function(t, e) {
+ return this.isValid() && (v(t) && t.isValid() || Le(t).isValid())
+ ? We({ from: this, to: t }).locale(this.locale()).humanize(!e)
+ : this.localeData().invalidDate();
+ },
+ Z.toNow = function(t) {
+ return this.to(Le(), t);
+ },
+ Z.get = function(t) {
+ return E(this[t = Y(t)]) ? this[t]() : this;
+ },
+ Z.invalidAt = function() {
+ return p(this).overflow;
+ },
+ Z.isAfter = function(t, e) {
+ return t = v(t) ? t : Le(t),
+ !(!this.isValid() || !t.isValid())
+ && ("millisecond" === (e = Y(e) || "millisecond")
+ ? this.valueOf() > t.valueOf()
+ : t.valueOf() < this.clone().startOf(e).valueOf());
+ },
+ Z.isBefore = function(t, e) {
+ return t = v(t) ? t : Le(t),
+ !(!this.isValid() || !t.isValid())
+ && ("millisecond" === (e = Y(e) || "millisecond")
+ ? this.valueOf() < t.valueOf()
+ : this.clone().endOf(e).valueOf() < t.valueOf());
+ },
+ Z.isBetween = function(t, e, n, i) {
+ return t = v(t) ? t : Le(t),
+ e = v(e) ? e : Le(e),
+ !!(this.isValid() && t.isValid() && e.isValid())
+ && ("(" === (i = i || "()")[0] ? this.isAfter(t, n) : !this.isBefore(t, n))
+ && (")" === i[1] ? this.isBefore(e, n) : !this.isAfter(e, n));
+ },
+ Z.isSame = function(t, e) {
+ return t = v(t) ? t : Le(t),
+ !(!this.isValid() || !t.isValid())
+ && ("millisecond" === (e = Y(e) || "millisecond")
+ ? this.valueOf() === t.valueOf()
+ : (t = t.valueOf(), this.clone().startOf(e).valueOf() <= t && t <= this.clone().endOf(e).valueOf()));
+ },
+ Z.isSameOrAfter = function(t, e) {
+ return this.isSame(t, e) || this.isAfter(t, e);
+ },
+ Z.isSameOrBefore = function(t, e) {
+ return this.isSame(t, e) || this.isBefore(t, e);
+ },
+ Z.isValid = function() {
+ return f(this);
+ },
+ Z.lang = Xt,
+ Z.locale = Ke,
+ Z.localeData = Je,
+ Z.max = it,
+ Z.min = nt,
+ Z.parsingFlags = function() {
+ return u({}, p(this));
+ },
+ Z.set = function(t, e) {
+ if ("object" == typeof t) {
+ for (
+ var n = function(t) {
+ var e, n = [];
+ for (e in t) a(t, e) && n.push({ unit: e, priority: z[e] });
+ return n.sort(function(t, e) {
+ return t.priority - e.priority;
+ }),
+ n;
+ }(t = j(t)),
+ i = n.length,
+ r = 0;
+ r < i;
+ r++
+ ) this[n[r].unit](t[n[r].unit]);
+ } else if (E(this[t = Y(t)])) return this[t](e);
+ return this;
+ },
+ Z.startOf = function(t) {
+ var e, i;
+ if (void 0 === (t = Y(t)) || "millisecond" === t || !this.isValid()) return this;
+ switch (i = this._isUTC ? an : rn, t) {
+ case "year":
+ e = i(this.year(), 0, 1);
+ break;
+ case "quarter":
+ e = i(this.year(), this.month() - this.month() % 3, 1);
+ break;
+ case "month":
+ e = i(this.year(), this.month(), 1);
+ break;
+ case "week":
+ e = i(this.year(), this.month(), this.date() - this.weekday());
+ break;
+ case "isoWeek":
+ e = i(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));
+ break;
+ case "day":
+ case "date":
+ e = i(this.year(), this.month(), this.date());
+ break;
+ case "hour":
+ e = this._d.valueOf(), e -= nn(e + (this._isUTC ? 0 : 6e4 * this.utcOffset()), 36e5);
+ break;
+ case "minute":
+ e = this._d.valueOf(), e -= nn(e, 6e4);
+ break;
+ case "second":
+ e = this._d.valueOf(), e -= nn(e, 1e3);
+ }
+ return this._d.setTime(e), n.updateOffset(this, !0), this;
+ },
+ Z.subtract = Vt,
+ Z.toArray = function() {
+ var t = this;
+ return [t.year(), t.month(), t.date(), t.hour(), t.minute(), t.second(), t.millisecond()];
+ },
+ Z.toObject = function() {
+ var t = this;
+ return {
+ years: t.year(),
+ months: t.month(),
+ date: t.date(),
+ hours: t.hours(),
+ minutes: t.minutes(),
+ seconds: t.seconds(),
+ milliseconds: t.milliseconds(),
+ };
+ },
+ Z.toDate = function() {
+ return new Date(this.valueOf());
+ },
+ Z.toISOString = function(t) {
+ if (!this.isValid()) return null;
+ var e = (t = !0 !== t) ? this.clone().utc() : this;
+ return e.year() < 0 || 9999 < e.year()
+ ? F(e, t ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ")
+ : E(Date.prototype.toISOString)
+ ? t
+ ? this.toDate().toISOString()
+ : new Date(this.valueOf() + 60 * this.utcOffset() * 1e3).toISOString().replace("Z", F(e, "Z"))
+ : F(e, t ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ");
+ },
+ Z.inspect = function() {
+ if (!this.isValid()) return "moment.invalid(/* " + this._i + " */)";
+ var t, e = "moment", n = "";
+ return this.isLocal() || (e = 0 === this.utcOffset() ? "moment.utc" : "moment.parseZone", n = "Z"),
+ e = "[" + e + "(\"]",
+ t = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY",
+ this.format(e + t + "-MM-DD[T]HH:mm:ss.SSS" + n + "[\")]");
+ },
+ "undefined" != typeof Symbol && null != Symbol.for
+ && (Z[Symbol.for("nodejs.util.inspect.custom")] = function() {
+ return "Moment<" + this.format() + ">";
+ }),
+ Z.toJSON = function() {
+ return this.isValid() ? this.toISOString() : null;
+ },
+ Z.toString = function() {
+ return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
+ },
+ Z.unix = function() {
+ return Math.floor(this.valueOf() / 1e3);
+ },
+ Z.valueOf = function() {
+ return this._d.valueOf() - 6e4 * (this._offset || 0);
+ },
+ Z.creationData = function() {
+ return { input: this._i, format: this._f, locale: this._locale, isUTC: this._isUTC, strict: this._strict };
+ },
+ Z.eraName = function() {
+ for (var t, e = this.localeData().eras(), n = 0, i = e.length; n < i; ++n) {
+ if (t = this.clone().startOf("day").valueOf(), e[n].since <= t && t <= e[n].until) return e[n].name;
+ if (e[n].until <= t && t <= e[n].since) return e[n].name;
+ }
+ return "";
+ },
+ Z.eraNarrow = function() {
+ for (var t, e = this.localeData().eras(), n = 0, i = e.length; n < i; ++n) {
+ if (t = this.clone().startOf("day").valueOf(), e[n].since <= t && t <= e[n].until) return e[n].narrow;
+ if (e[n].until <= t && t <= e[n].since) return e[n].narrow;
+ }
+ return "";
+ },
+ Z.eraAbbr = function() {
+ for (var t, e = this.localeData().eras(), n = 0, i = e.length; n < i; ++n) {
+ if (t = this.clone().startOf("day").valueOf(), e[n].since <= t && t <= e[n].until) return e[n].abbr;
+ if (e[n].until <= t && t <= e[n].since) return e[n].abbr;
+ }
+ return "";
+ },
+ Z.eraYear = function() {
+ for (var t, e, i = this.localeData().eras(), r = 0, a = i.length; r < a; ++r) {
+ if (
+ t = i[r].since <= i[r].until ? 1 : -1,
+ e = this.clone().startOf("day").valueOf(),
+ i[r].since <= e && e <= i[r].until || i[r].until <= e && e <= i[r].since
+ ) return (this.year() - n(i[r].since).year()) * t + i[r].offset;
+ }
+ return this.year();
+ },
+ Z.year = Pt,
+ Z.isLeapYear = function() {
+ return W(this.year());
+ },
+ Z.weekYear = function(t) {
+ return cn.call(
+ this,
+ t,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy,
+ );
+ },
+ Z.isoWeekYear = function(t) {
+ return cn.call(this, t, this.isoWeek(), this.isoWeekday(), 1, 4);
+ },
+ Z.quarter = Z.quarters = function(t) {
+ return null == t ? Math.ceil((this.month() + 1) / 3) : this.month(3 * (t - 1) + this.month() % 3);
+ },
+ Z.month = Ft,
+ Z.daysInMonth = function() {
+ return Dt(this.year(), this.month());
+ },
+ Z.week = Z.weeks = function(t) {
+ var e = this.localeData().week(this);
+ return null == t ? e : this.add(7 * (t - e), "d");
+ },
+ Z.isoWeek = Z.isoWeeks = function(t) {
+ var e = Wt(this, 1, 4).week;
+ return null == t ? e : this.add(7 * (t - e), "d");
+ },
+ Z.weeksInYear = function() {
+ var t = this.localeData()._week;
+ return Ht(this.year(), t.dow, t.doy);
+ },
+ Z.weeksInWeekYear = function() {
+ var t = this.localeData()._week;
+ return Ht(this.weekYear(), t.dow, t.doy);
+ },
+ Z.isoWeeksInYear = function() {
+ return Ht(this.year(), 1, 4);
+ },
+ Z.isoWeeksInISOWeekYear = function() {
+ return Ht(this.isoWeekYear(), 1, 4);
+ },
+ Z.date = at,
+ Z.day = Z.days = function(t) {
+ if (!this.isValid()) return null != t ? this : NaN;
+ var e, n, i = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ return null != t
+ ? (e = t,
+ n = this.localeData(),
+ t = "string" != typeof e
+ ? e
+ : isNaN(e)
+ ? "number" == typeof (e = n.weekdaysParse(e)) ? e : null
+ : parseInt(e, 10),
+ this.add(t - i, "d"))
+ : i;
+ },
+ Z.weekday = function(t) {
+ if (!this.isValid()) return null != t ? this : NaN;
+ var e = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return null == t ? e : this.add(t - e, "d");
+ },
+ Z.isoWeekday = function(t) {
+ return this.isValid()
+ ? null != t
+ ? (e = t,
+ n = this.localeData(),
+ n = "string" == typeof e ? n.weekdaysParse(e) % 7 || 7 : isNaN(e) ? null : e,
+ this.day(this.day() % 7 ? n : n - 7))
+ : this.day() || 7
+ : null != t
+ ? this
+ : NaN;
+ var e, n;
+ },
+ Z.dayOfYear = function(t) {
+ var e = Math.round((this.clone().startOf("day") - this.clone().startOf("year")) / 864e5) + 1;
+ return null == t ? e : this.add(t - e, "d");
+ },
+ Z.hour = Z.hours = ut,
+ Z.minute = Z.minutes = J,
+ Z.second = Z.seconds = st,
+ Z.millisecond = Z.milliseconds = tt,
+ Z.utcOffset = function(t, e, i) {
+ var r, a = this._offset || 0;
+ if (!this.isValid()) return null != t ? this : NaN;
+ if (null == t) return this._isUTC ? a : Ye(this);
+ if ("string" == typeof t) {
+ if (null === (t = $e(ht, t))) return this;
+ else Math.abs(t) < 16 && !i && (t *= 60);
+ }
+ return !this._isUTC && e && (r = Ye(this)),
+ this._offset = t,
+ this._isUTC = !0,
+ null != r && this.add(r, "m"),
+ a !== t
+ && (!e || this._changeInProgress
+ ? Ge(this, We(t - a, "m"), 1, !1)
+ : this._changeInProgress
+ || (this._changeInProgress = !0, n.updateOffset(this, !0), this._changeInProgress = null)),
+ this;
+ },
+ Z.utc = function(t) {
+ return this.utcOffset(0, t);
+ },
+ Z.local = function(t) {
+ return this._isUTC && (this.utcOffset(0, t), this._isUTC = !1, t && this.subtract(Ye(this), "m")), this;
+ },
+ Z.parseZone = function() {
+ var t;
+ return null != this._tzm
+ ? this.utcOffset(this._tzm, !1, !0)
+ : "string" == typeof this._i && (null != (t = $e(ct, this._i)) ? this.utcOffset(t) : this.utcOffset(0, !0)),
+ this;
+ },
+ Z.hasAlignedHourOffset = function(t) {
+ return !!this.isValid() && (t = t ? Le(t).utcOffset() : 0, (this.utcOffset() - t) % 60 == 0);
+ },
+ Z.isDST = function() {
+ return this.utcOffset() > this.clone().month(0).utcOffset()
+ || this.utcOffset() > this.clone().month(5).utcOffset();
+ },
+ Z.isLocal = function() {
+ return !!this.isValid() && !this._isUTC;
+ },
+ Z.isUtcOffset = function() {
+ return !!this.isValid() && this._isUTC;
+ },
+ Z.isUtc = je,
+ Z.isUTC = je,
+ Z.zoneAbbr = function() {
+ return this._isUTC ? "UTC" : "";
+ },
+ Z.zoneName = function() {
+ return this._isUTC ? "Coordinated Universal Time" : "";
+ },
+ Z.dates = w("dates accessor is deprecated. Use date instead.", at),
+ Z.months = w("months accessor is deprecated. Use month instead", Ft),
+ Z.years = w("years accessor is deprecated. Use year instead", Pt),
+ Z.zone = w(
+ "moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",
+ function(t, e) {
+ return null != t ? (this.utcOffset(t = "string" != typeof t ? -t : t, e), this) : -this.utcOffset();
+ },
+ ),
+ Z.isDSTShifted = w(
+ "isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",
+ function() {
+ if (!o(this._isDSTShifted)) return this._isDSTShifted;
+ var t, e = {};
+ return _(e, this),
+ (e = Ae(e))._a
+ ? (t = (e._isUTC ? d : Le)(e._a),
+ this._isDSTShifted = this.isValid() && 0 < function(t, e, n) {
+ for (
+ var i = Math.min(t.length, e.length), r = Math.abs(t.length - e.length), a = 0, s = 0;
+ s < i;
+ s++
+ ) (n && t[s] !== e[s] || !n && q(t[s]) !== q(e[s])) && a++;
+ return a + r;
+ }(e._a, t.toArray()))
+ : this._isDSTShifted = !1,
+ this._isDSTShifted;
+ },
+ ),
+ (Q = A.prototype).calendar = function(t, e, n) {
+ return E(t = this._calendar[t] || this._calendar.sameElse) ? t.call(e, n) : t;
+ },
+ Q.longDateFormat = function(t) {
+ var e = this._longDateFormat[t], n = this._longDateFormat[t.toUpperCase()];
+ return e || !n ? e : (this._longDateFormat[t] = n.match(O).map(function(t) {
+ return "MMMM" === t || "MM" === t || "DD" === t || "dddd" === t ? t.slice(1) : t;
+ }).join(""),
+ this._longDateFormat[t]);
+ },
+ Q.invalidDate = function() {
+ return this._invalidDate;
+ },
+ Q.ordinal = function(t) {
+ return this._ordinal.replace("%d", t);
+ },
+ Q.preparse = un,
+ Q.postformat = un,
+ Q.relativeTime = function(t, e, n, i) {
+ var r = this._relativeTime[n];
+ return E(r) ? r(t, e, n, i) : r.replace(/%d/i, t);
+ },
+ Q.pastFuture = function(t, e) {
+ return E(t = this._relativeTime[0 < t ? "future" : "past"]) ? t(e) : t.replace(/%s/i, e);
+ },
+ Q.set = function(t) {
+ var e, n;
+ for (n in t) a(t, n) && (E(e = t[n]) ? this[n] = e : this["_" + n] = e);
+ this._config = t,
+ this._dayOfMonthOrdinalParseLenient = new RegExp(
+ (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source,
+ );
+ },
+ Q.eras = function(t, e) {
+ for (var i, r = this._eras || de("en")._eras, a = 0, s = r.length; a < s; ++a) {
+ switch (
+ "string" == typeof r[a].since && (i = n(r[a].since).startOf("day"), r[a].since = i.valueOf()),
+ typeof r[a].until
+ ) {
+ case "undefined":
+ r[a].until = 1 / 0;
+ break;
+ case "string":
+ i = n(r[a].until).startOf("day").valueOf(), r[a].until = i.valueOf();
+ }
+ }
+ return r;
+ },
+ Q.erasParse = function(t, e, n) {
+ var i, r, a, s, o, l = this.eras();
+ for (t = t.toUpperCase(), i = 0, r = l.length; i < r; ++i) {
+ if (a = l[i].name.toUpperCase(), s = l[i].abbr.toUpperCase(), o = l[i].narrow.toUpperCase(), n) {
+ switch (e) {
+ case "N":
+ case "NN":
+ case "NNN":
+ if (s === t) return l[i];
+ break;
+ case "NNNN":
+ if (a === t) return l[i];
+ break;
+ case "NNNNN":
+ if (o === t) return l[i];
+ }
+ } else if (0 <= [a, s, o].indexOf(t)) return l[i];
+ }
+ },
+ Q.erasConvertYear = function(t, e) {
+ var i = t.since <= t.until ? 1 : -1;
+ return void 0 === e ? n(t.since).year() : n(t.since).year() + (e - t.offset) * i;
+ },
+ Q.erasAbbrRegex = function(t) {
+ return a(this, "_erasAbbrRegex") || on.call(this), t ? this._erasAbbrRegex : this._erasRegex;
+ },
+ Q.erasNameRegex = function(t) {
+ return a(this, "_erasNameRegex") || on.call(this), t ? this._erasNameRegex : this._erasRegex;
+ },
+ Q.erasNarrowRegex = function(t) {
+ return a(this, "_erasNarrowRegex") || on.call(this), t ? this._erasNarrowRegex : this._erasRegex;
+ },
+ Q.months = function(t, e) {
+ return t
+ ? (i(this._months)
+ ? this._months
+ : this._months[(this._months.isFormat || Nt).test(e) ? "format" : "standalone"])[t.month()]
+ : i(this._months)
+ ? this._months
+ : this._months.standalone;
+ },
+ Q.monthsShort = function(t, e) {
+ return t
+ ? (i(this._monthsShort) ? this._monthsShort : this._monthsShort[Nt.test(e) ? "format" : "standalone"])[
+ t.month()
+ ]
+ : i(this._monthsShort)
+ ? this._monthsShort
+ : this._monthsShort.standalone;
+ },
+ Q.monthsParse = function(t, e, n) {
+ var i, r;
+ if (this._monthsParseExact) {
+ return function(t, e, n) {
+ var i, r, a;
+ if (t = t.toLocaleLowerCase(), !this._monthsParse) {
+ for (
+ this._monthsParse = [], this._longMonthsParse = [], this._shortMonthsParse = [], i = 0;
+ i < 12;
+ ++i
+ ) {
+ a = d([2e3, i]),
+ this._shortMonthsParse[i] = this.monthsShort(a, "").toLocaleLowerCase(),
+ this._longMonthsParse[i] = this.months(a, "").toLocaleLowerCase();
+ }
+ }
+ return n
+ ? "MMM" === e
+ ? -1 !== (r = _t.call(this._shortMonthsParse, t)) ? r : null
+ : -1 !== (r = _t.call(this._longMonthsParse, t))
+ ? r
+ : null
+ : "MMM" === e
+ ? -1 !== (r = _t.call(this._shortMonthsParse, t)) || -1 !== (r = _t.call(this._longMonthsParse, t))
+ ? r
+ : null
+ : -1 !== (r = _t.call(this._longMonthsParse, t)) || -1 !== (r = _t.call(this._shortMonthsParse, t))
+ ? r
+ : null;
+ }.call(this, t, e, n);
+ }
+ for (
+ this._monthsParse || (this._monthsParse = [], this._longMonthsParse = [], this._shortMonthsParse = []),
+ i = 0;
+ i < 12;
+ i++
+ ) {
+ if (
+ r = d([2e3, i]),
+ n && !this._longMonthsParse[i]
+ && (this._longMonthsParse[i] = new RegExp("^" + this.months(r, "").replace(".", "") + "$", "i"),
+ this._shortMonthsParse[i] = new RegExp("^" + this.monthsShort(r, "").replace(".", "") + "$", "i")),
+ n || this._monthsParse[i]
+ || (r = "^" + this.months(r, "") + "|^" + this.monthsShort(r, ""),
+ this._monthsParse[i] = new RegExp(r.replace(".", ""), "i")),
+ n && "MMMM" === e && this._longMonthsParse[i].test(t)
+ ) return i;
+ if (n && "MMM" === e && this._shortMonthsParse[i].test(t)) return i;
+ if (!n && this._monthsParse[i].test(t)) return i;
+ }
+ },
+ Q.monthsRegex = function(t) {
+ return this._monthsParseExact
+ ? (a(this, "_monthsRegex") || Rt.call(this), t ? this._monthsStrictRegex : this._monthsRegex)
+ : (a(this, "_monthsRegex") || (this._monthsRegex = Bt),
+ this._monthsStrictRegex && t ? this._monthsStrictRegex : this._monthsRegex);
+ },
+ Q.monthsShortRegex = function(t) {
+ return this._monthsParseExact
+ ? (a(this, "_monthsRegex") || Rt.call(this), t ? this._monthsShortStrictRegex : this._monthsShortRegex)
+ : (a(this, "_monthsShortRegex") || (this._monthsShortRegex = Mt),
+ this._monthsShortStrictRegex && t ? this._monthsShortStrictRegex : this._monthsShortRegex);
+ },
+ Q.week = function(t) {
+ return Wt(t, this._week.dow, this._week.doy).week;
+ },
+ Q.firstDayOfYear = function() {
+ return this._week.doy;
+ },
+ Q.firstDayOfWeek = function() {
+ return this._week.dow;
+ },
+ Q.weekdays = function(t, e) {
+ return e = i(this._weekdays)
+ ? this._weekdays
+ : this._weekdays[t && !0 !== t && this._weekdays.isFormat.test(e) ? "format" : "standalone"],
+ !0 === t ? qt(e, this._week.dow) : t ? e[t.day()] : e;
+ },
+ Q.weekdaysMin = function(t) {
+ return !0 === t ? qt(this._weekdaysMin, this._week.dow) : t ? this._weekdaysMin[t.day()] : this._weekdaysMin;
+ },
+ Q.weekdaysShort = function(t) {
+ return !0 === t
+ ? qt(this._weekdaysShort, this._week.dow)
+ : t
+ ? this._weekdaysShort[t.day()]
+ : this._weekdaysShort;
+ },
+ Q.weekdaysParse = function(t, e, n) {
+ var i, r;
+ if (this._weekdaysParseExact) {
+ return function(t, e, n) {
+ var i, r, a;
+ if (t = t.toLocaleLowerCase(), !this._weekdaysParse) {
+ for (
+ this._weekdaysParse = [], this._shortWeekdaysParse = [], this._minWeekdaysParse = [], i = 0;
+ i < 7;
+ ++i
+ ) {
+ a = d([2e3, 1]).day(i),
+ this._minWeekdaysParse[i] = this.weekdaysMin(a, "").toLocaleLowerCase(),
+ this._shortWeekdaysParse[i] = this.weekdaysShort(a, "").toLocaleLowerCase(),
+ this._weekdaysParse[i] = this.weekdays(a, "").toLocaleLowerCase();
+ }
+ }
+ return n
+ ? "dddd" === e
+ ? -1 !== (r = _t.call(this._weekdaysParse, t)) ? r : null
+ : "ddd" === e
+ ? -1 !== (r = _t.call(this._shortWeekdaysParse, t)) ? r : null
+ : -1 !== (r = _t.call(this._minWeekdaysParse, t))
+ ? r
+ : null
+ : "dddd" === e
+ ? -1 !== (r = _t.call(this._weekdaysParse, t)) || -1 !== (r = _t.call(this._shortWeekdaysParse, t))
+ || -1 !== (r = _t.call(this._minWeekdaysParse, t))
+ ? r
+ : null
+ : "ddd" === e
+ ? -1 !== (r = _t.call(this._shortWeekdaysParse, t)) || -1 !== (r = _t.call(this._weekdaysParse, t))
+ || -1 !== (r = _t.call(this._minWeekdaysParse, t))
+ ? r
+ : null
+ : -1 !== (r = _t.call(this._minWeekdaysParse, t)) || -1 !== (r = _t.call(this._weekdaysParse, t))
+ || -1 !== (r = _t.call(this._shortWeekdaysParse, t))
+ ? r
+ : null;
+ }.call(this, t, e, n);
+ }
+ for (
+ this._weekdaysParse
+ || (this._weekdaysParse = [],
+ this._minWeekdaysParse = [],
+ this._shortWeekdaysParse = [],
+ this._fullWeekdaysParse = []), i = 0;
+ i < 7;
+ i++
+ ) {
+ if (
+ r = d([2e3, 1]).day(i),
+ n && !this._fullWeekdaysParse[i]
+ && (this._fullWeekdaysParse[i] = new RegExp("^" + this.weekdays(r, "").replace(".", "\\.?") + "$", "i"),
+ this._shortWeekdaysParse[i] = new RegExp(
+ "^" + this.weekdaysShort(r, "").replace(".", "\\.?") + "$",
+ "i",
+ ),
+ this._minWeekdaysParse[i] = new RegExp(
+ "^" + this.weekdaysMin(r, "").replace(".", "\\.?") + "$",
+ "i",
+ )),
+ this._weekdaysParse[i]
+ || (r = "^" + this.weekdays(r, "") + "|^" + this.weekdaysShort(r, "") + "|^" + this.weekdaysMin(r, ""),
+ this._weekdaysParse[i] = new RegExp(r.replace(".", ""), "i")),
+ n && "dddd" === e && this._fullWeekdaysParse[i].test(t)
+ ) return i;
+ if (n && "ddd" === e && this._shortWeekdaysParse[i].test(t)) return i;
+ if (n && "dd" === e && this._minWeekdaysParse[i].test(t)) return i;
+ if (!n && this._weekdaysParse[i].test(t)) return i;
+ }
+ },
+ Q.weekdaysRegex = function(t) {
+ return this._weekdaysParseExact
+ ? (a(this, "_weekdaysRegex") || Jt.call(this), t ? this._weekdaysStrictRegex : this._weekdaysRegex)
+ : (a(this, "_weekdaysRegex") || (this._weekdaysRegex = Zt),
+ this._weekdaysStrictRegex && t ? this._weekdaysStrictRegex : this._weekdaysRegex);
+ },
+ Q.weekdaysShortRegex = function(t) {
+ return this._weekdaysParseExact
+ ? (a(this, "_weekdaysRegex") || Jt.call(this),
+ t ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex)
+ : (a(this, "_weekdaysShortRegex") || (this._weekdaysShortRegex = Qt),
+ this._weekdaysShortStrictRegex && t ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex);
+ },
+ Q.weekdaysMinRegex = function(t) {
+ return this._weekdaysParseExact
+ ? (a(this, "_weekdaysRegex") || Jt.call(this), t ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex)
+ : (a(this, "_weekdaysMinRegex") || (this._weekdaysMinRegex = Kt),
+ this._weekdaysMinStrictRegex && t ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex);
+ },
+ Q.isPM = function(t) {
+ return "p" === (t + "").toLowerCase().charAt(0);
+ },
+ Q.meridiem = function(t, e, n) {
+ return 11 < t ? n ? "pm" : "PM" : n ? "am" : "AM";
+ },
+ he("en", {
+ eras: [{ since: "0001-01-01", until: 1 / 0, offset: 1, name: "Anno Domini", narrow: "AD", abbr: "AD" }, {
+ since: "0000-12-31",
+ until: -1 / 0,
+ offset: 1,
+ name: "Before Christ",
+ narrow: "BC",
+ abbr: "BC",
+ }],
+ dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal: function(t) {
+ var e = t % 10;
+ return t + (1 === q(t % 100 / 10) ? "th" : 1 == e ? "st" : 2 == e ? "nd" : 3 == e ? "rd" : "th");
+ },
+ }),
+ n.lang = w("moment.lang is deprecated. Use moment.locale instead.", he),
+ n.langData = w("moment.langData is deprecated. Use moment.localeData instead.", de);
+ var gn = Math.abs;
+ function yn(t, e, n, i) {
+ return e = We(e, n),
+ t._milliseconds += i * e._milliseconds,
+ t._days += i * e._days,
+ t._months += i * e._months,
+ t._bubble();
+ }
+ function mn(t) {
+ return t < 0 ? Math.floor(t) : Math.ceil(t);
+ }
+ function bn(t) {
+ return 4800 * t / 146097;
+ }
+ function _n(t) {
+ return 146097 * t / 4800;
+ }
+ function xn(t) {
+ return function() {
+ return this.as(t);
+ };
+ }
+ function vn(t) {
+ return function() {
+ return this.isValid() ? this._data[t] : NaN;
+ };
+ }
+ rt = xn("ms"),
+ K = xn("s"),
+ Lt = xn("m"),
+ it = xn("h"),
+ nt = xn("d"),
+ Vt = xn("w"),
+ ut = xn("M"),
+ J = xn("Q"),
+ st = xn("y"),
+ tt = vn("milliseconds"),
+ at = vn("seconds"),
+ Pt = vn("minutes"),
+ Q = vn("hours");
+ var kn = vn("days"),
+ wn = vn("months"),
+ Tn = vn("years"),
+ Cn = Math.round,
+ En = { ss: 44, s: 45, m: 45, h: 22, d: 26, w: null, M: 11 };
+ function Sn(t, e, n, i) {
+ var r = We(t).abs(),
+ a = Cn(r.as("s")),
+ s = Cn(r.as("m")),
+ o = Cn(r.as("h")),
+ l = Cn(r.as("d")),
+ c = Cn(r.as("M")),
+ h = Cn(r.as("w"));
+ return r = Cn(r.as("y")),
+ a = (a <= n.ss ? ["s", a] : a < n.s && ["ss", a]) || s <= 1 && ["m"] || s < n.m && ["mm", s]
+ || o <= 1 && ["h"] || o < n.h && ["hh", o] || l <= 1 && ["d"] || l < n.d && ["dd", l],
+ (a = (a = null != n.w ? a || h <= 1 && ["w"] || h < n.w && ["ww", h] : a) || c <= 1 && ["M"]
+ || c < n.M && ["MM", c] || r <= 1 && ["y"] || ["yy", r])[2] = e,
+ a[3] = 0 < +t,
+ a[4] = i,
+ function(t, e, n, i, r) {
+ return r.relativeTime(e || 1, !!n, t, i);
+ }.apply(null, a);
+ }
+ var An = Math.abs;
+ function Dn(t) {
+ return (0 < t) - (t < 0) || +t;
+ }
+ function Ln() {
+ if (!this.isValid()) return this.localeData().invalidDate();
+ var t,
+ e,
+ n,
+ i,
+ r,
+ a,
+ s,
+ o = An(this._milliseconds) / 1e3,
+ l = An(this._days),
+ c = An(this._months),
+ h = this.asSeconds();
+ return h
+ ? (t = H(o / 60),
+ e = H(t / 60),
+ o %= 60,
+ t %= 60,
+ n = H(c / 12),
+ c %= 12,
+ i = o ? o.toFixed(3).replace(/\.?0+$/, "") : "",
+ r = Dn(this._months) !== Dn(h) ? "-" : "",
+ a = Dn(this._days) !== Dn(h) ? "-" : "",
+ s = Dn(this._milliseconds) !== Dn(h) ? "-" : "",
+ (h < 0 ? "-" : "") + "P" + (n ? r + n + "Y" : "") + (c ? r + c + "M" : "") + (l ? a + l + "D" : "")
+ + (e || t || o ? "T" : "") + (e ? s + e + "H" : "") + (t ? s + t + "M" : "") + (o ? s + i + "S" : ""))
+ : "P0D";
+ }
+ var On = Me.prototype;
+ return On.isValid = function() {
+ return this._isValid;
+ },
+ On.abs = function() {
+ var t = this._data;
+ return this._milliseconds = gn(this._milliseconds),
+ this._days = gn(this._days),
+ this._months = gn(this._months),
+ t.milliseconds = gn(t.milliseconds),
+ t.seconds = gn(t.seconds),
+ t.minutes = gn(t.minutes),
+ t.hours = gn(t.hours),
+ t.months = gn(t.months),
+ t.years = gn(t.years),
+ this;
+ },
+ On.add = function(t, e) {
+ return yn(this, t, e, 1);
+ },
+ On.subtract = function(t, e) {
+ return yn(this, t, e, -1);
+ },
+ On.as = function(t) {
+ if (!this.isValid()) return NaN;
+ var e, n, i = this._milliseconds;
+ if ("month" === (t = Y(t)) || "quarter" === t || "year" === t) {
+ switch (e = this._days + i / 864e5, n = this._months + bn(e), t) {
+ case "month":
+ return n;
+ case "quarter":
+ return n / 3;
+ case "year":
+ return n / 12;
+ }
+ } else {switch (e = this._days + Math.round(_n(this._months)), t) {
+ case "week":
+ return e / 7 + i / 6048e5;
+ case "day":
+ return e + i / 864e5;
+ case "hour":
+ return 24 * e + i / 36e5;
+ case "minute":
+ return 1440 * e + i / 6e4;
+ case "second":
+ return 86400 * e + i / 1e3;
+ case "millisecond":
+ return Math.floor(864e5 * e) + i;
+ default:
+ throw new Error("Unknown unit " + t);
+ }}
+ },
+ On.asMilliseconds = rt,
+ On.asSeconds = K,
+ On.asMinutes = Lt,
+ On.asHours = it,
+ On.asDays = nt,
+ On.asWeeks = Vt,
+ On.asMonths = ut,
+ On.asQuarters = J,
+ On.asYears = st,
+ On.valueOf = function() {
+ return this.isValid()
+ ? this._milliseconds + 864e5 * this._days + this._months % 12 * 2592e6 + 31536e6 * q(this._months / 12)
+ : NaN;
+ },
+ On._bubble = function() {
+ var t = this._milliseconds, e = this._days, n = this._months, i = this._data;
+ return 0 <= t && 0 <= e && 0 <= n || t <= 0 && e <= 0 && n <= 0 || (t += 864e5 * mn(_n(n) + e), n = e = 0),
+ i.milliseconds = t % 1e3,
+ t = H(t / 1e3),
+ i.seconds = t % 60,
+ t = H(t / 60),
+ i.minutes = t % 60,
+ t = H(t / 60),
+ i.hours = t % 24,
+ e += H(t / 24),
+ n += t = H(bn(e)),
+ e -= mn(_n(t)),
+ t = H(n / 12),
+ n %= 12,
+ i.days = e,
+ i.months = n,
+ i.years = t,
+ this;
+ },
+ On.clone = function() {
+ return We(this);
+ },
+ On.get = function(t) {
+ return t = Y(t), this.isValid() ? this[t + "s"]() : NaN;
+ },
+ On.milliseconds = tt,
+ On.seconds = at,
+ On.minutes = Pt,
+ On.hours = Q,
+ On.days = kn,
+ On.weeks = function() {
+ return H(this.days() / 7);
+ },
+ On.months = wn,
+ On.years = Tn,
+ On.humanize = function(t, e) {
+ if (!this.isValid()) return this.localeData().invalidDate();
+ var n = !1, i = En;
+ return "object" == typeof t && (e = t, t = !1),
+ "boolean" == typeof t && (n = t),
+ "object" == typeof e && (i = Object.assign({}, En, e), null != e.s && null == e.ss && (i.ss = e.s - 1)),
+ e = Sn(this, !n, i, t = this.localeData()),
+ n && (e = t.pastFuture(+this, e)),
+ t.postformat(e);
+ },
+ On.toISOString = Ln,
+ On.toString = Ln,
+ On.toJSON = Ln,
+ On.locale = Ke,
+ On.localeData = Je,
+ On.toIsoString = w("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", Ln),
+ On.lang = Xt,
+ I("X", 0, 0, "unix"),
+ I("x", 0, 0, "valueOf"),
+ dt("x", lt),
+ dt("X", /[+-]?\d+(\.\d{1,3})?/),
+ mt("X", function(t, e, n) {
+ n._d = new Date(1e3 * parseFloat(t));
+ }),
+ mt("x", function(t, e, n) {
+ n._d = new Date(q(t));
+ }),
+ n.version = "2.29.4",
+ e = Le,
+ n.fn = Z,
+ n.min = function() {
+ return Oe("isBefore", [].slice.call(arguments, 0));
+ },
+ n.max = function() {
+ return Oe("isAfter", [].slice.call(arguments, 0));
+ },
+ n.now = function() {
+ return Date.now ? Date.now() : +new Date();
+ },
+ n.utc = d,
+ n.unix = function(t) {
+ return Le(1e3 * t);
+ },
+ n.months = function(t, e) {
+ return pn(t, e, "months");
+ },
+ n.isDate = c,
+ n.locale = he,
+ n.invalid = g,
+ n.duration = We,
+ n.isMoment = v,
+ n.weekdays = function(t, e, n) {
+ return fn(t, e, n, "weekdays");
+ },
+ n.parseZone = function() {
+ return Le.apply(null, arguments).parseZone();
+ },
+ n.localeData = de,
+ n.isDuration = Be,
+ n.monthsShort = function(t, e) {
+ return pn(t, e, "monthsShort");
+ },
+ n.weekdaysMin = function(t, e, n) {
+ return fn(t, e, n, "weekdaysMin");
+ },
+ n.defineLocale = ue,
+ n.updateLocale = function(t, e) {
+ var n, i;
+ return null != e
+ ? (i = re,
+ null != ae[t] && null != ae[t].parentLocale
+ ? ae[t].set(S(ae[t]._config, e))
+ : (e = S(i = null != (n = ce(t)) ? n._config : i, e),
+ null == n && (e.abbr = t),
+ (i = new A(e)).parentLocale = ae[t],
+ ae[t] = i),
+ he(t))
+ : null != ae[t]
+ && (null != ae[t].parentLocale
+ ? (ae[t] = ae[t].parentLocale, t === he() && he(t))
+ : null != ae[t] && delete ae[t]),
+ ae[t];
+ },
+ n.locales = function() {
+ return D(ae);
+ },
+ n.weekdaysShort = function(t, e, n) {
+ return fn(t, e, n, "weekdaysShort");
+ },
+ n.normalizeUnits = Y,
+ n.relativeTimeRounding = function(t) {
+ return void 0 === t ? Cn : "function" == typeof t && (Cn = t, !0);
+ },
+ n.relativeTimeThreshold = function(t, e) {
+ return void 0 !== En[t] && (void 0 === e ? En[t] : (En[t] = e, "s" === t && (En.ss = e - 1), !0));
+ },
+ n.calendarFormat = function(t, e) {
+ return (t = t.diff(e, "days", !0)) < -6
+ ? "sameElse"
+ : t < -1
+ ? "lastWeek"
+ : t < 0
+ ? "lastDay"
+ : t < 1
+ ? "sameDay"
+ : t < 2
+ ? "nextDay"
+ : t < 7
+ ? "nextWeek"
+ : "sameElse";
+ },
+ n.prototype = Z,
+ n.HTML5_FMT = {
+ DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",
+ DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",
+ DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",
+ DATE: "YYYY-MM-DD",
+ TIME: "HH:mm",
+ TIME_SECONDS: "HH:mm:ss",
+ TIME_MS: "HH:mm:ss.SSS",
+ WEEK: "GGGG-[W]WW",
+ MONTH: "YYYY-MM",
+ },
+ n;
+ }();
+ }(t);
+ var e = t.exports, n = {};
+ Object.defineProperty(n, "__esModule", { value: !0 });
+ var i = n.sanitizeUrl = void 0,
+ r = /^([^\w]*)(javascript|data|vbscript)/im,
+ a = /(\w+)(^\w|;)?/g,
+ s = /&(newline|tab);/gi,
+ o = /[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,
+ l = /^.+(:|:)/gim,
+ h = [".", "/"];
+ function u(t, e) {
+ return null == t || null == e ? NaN : t < e ? -1 : t > e ? 1 : t >= e ? 0 : NaN;
+ }
+ function d(t, e) {
+ return null == t || null == e ? NaN : e < t ? -1 : e > t ? 1 : e >= t ? 0 : NaN;
+ }
+ function p(t) {
+ let e, n, i;
+ function r(t, i, r = 0, a = t.length) {
+ if (r < a) {
+ if (0 !== e(i, i)) return a;
+ do {
+ const e = r + a >>> 1;
+ n(t[e], i) < 0 ? r = e + 1 : a = e;
+ } while (r < a);
+ }
+ return r;
+ }
+ return 2 !== t.length
+ ? (e = u, n = (e, n) => u(t(e), n), i = (e, n) => t(e) - n)
+ : (e = t === u || t === d ? t : f, n = t, i = t),
+ {
+ left: r,
+ center: function(t, e, n = 0, a = t.length) {
+ const s = r(t, e, n, a - 1);
+ return s > n && i(t[s - 1], e) > -i(t[s], e) ? s - 1 : s;
+ },
+ right: function(t, i, r = 0, a = t.length) {
+ if (r < a) {
+ if (0 !== e(i, i)) return a;
+ do {
+ const e = r + a >>> 1;
+ n(t[e], i) <= 0 ? r = e + 1 : a = e;
+ } while (r < a);
+ }
+ return r;
+ },
+ };
+ }
+ function f() {
+ return 0;
+ }
+ i = n.sanitizeUrl = function(t) {
+ var e = function(t) {
+ return t.replace(a, function(t, e) {
+ return String.fromCharCode(e);
+ });
+ }(t || "").replace(s, "").replace(o, "").trim();
+ if (!e) return "about:blank";
+ if (
+ function(t) {
+ return h.indexOf(t[0]) > -1;
+ }(e)
+ ) return e;
+ var n = e.match(l);
+ if (!n) return e;
+ var i = n[0];
+ return r.test(i) ? "about:blank" : e;
+ };
+ const g = p(u).right;
+ p(function(t) {
+ return null === t ? NaN : +t;
+ }).center;
+ var y = g;
+ class m extends Map {
+ constructor(t, e = _) {
+ if (super(), Object.defineProperties(this, { _intern: { value: new Map() }, _key: { value: e } }), null != t) {
+ for (const [e, n] of t) this.set(e, n);
+ }
+ }
+ get(t) {
+ return super.get(b(this, t));
+ }
+ has(t) {
+ return super.has(b(this, t));
+ }
+ set(t, e) {
+ return super.set(
+ function({ _intern: t, _key: e }, n) {
+ const i = e(n);
+ return t.has(i) ? t.get(i) : (t.set(i, n), n);
+ }(this, t),
+ e,
+ );
+ }
+ delete(t) {
+ return super.delete(function({ _intern: t, _key: e }, n) {
+ const i = e(n);
+ t.has(i) && (n = t.get(i), t.delete(i));
+ return n;
+ }(this, t));
+ }
+ }
+ function b({ _intern: t, _key: e }, n) {
+ const i = e(n);
+ return t.has(i) ? t.get(i) : n;
+ }
+ function _(t) {
+ return null !== t && "object" == typeof t ? t.valueOf() : t;
+ }
+ const x = Math.sqrt(50), v = Math.sqrt(10), k = Math.sqrt(2);
+ function w(t, e, n) {
+ const i = (e - t) / Math.max(0, n),
+ r = Math.floor(Math.log10(i)),
+ a = i / Math.pow(10, r),
+ s = a >= x ? 10 : a >= v ? 5 : a >= k ? 2 : 1;
+ let o, l, c;
+ return r < 0
+ ? (c = Math.pow(10, -r) / s,
+ o = Math.round(t * c),
+ l = Math.round(e * c),
+ o / c < t && ++o,
+ l / c > e && --l,
+ c = -c)
+ : (c = Math.pow(10, r) * s, o = Math.round(t / c), l = Math.round(e / c), o * c < t && ++o, l * c > e && --l),
+ l < o && .5 <= n && n < 2 ? w(t, e, 2 * n) : [o, l, c];
+ }
+ function T(t, e, n) {
+ return w(t = +t, e = +e, n = +n)[2];
+ }
+ function C(t, e, n) {
+ n = +n;
+ const i = (e = +e) < (t = +t), r = i ? T(e, t, n) : T(t, e, n);
+ return (i ? -1 : 1) * (r < 0 ? 1 / -r : r);
+ }
+ function E(t, e) {
+ let n;
+ if (void 0 === e) for (const e of t) null != e && (n < e || void 0 === n && e >= e) && (n = e);
+ else {
+ let i = -1;
+ for (let r of t) null != (r = e(r, ++i, t)) && (n < r || void 0 === n && r >= r) && (n = r);
+ }
+ return n;
+ }
+ function S(t, e) {
+ let n;
+ if (void 0 === e) for (const e of t) null != e && (n > e || void 0 === n && e >= e) && (n = e);
+ else {
+ let i = -1;
+ for (let r of t) null != (r = e(r, ++i, t)) && (n > r || void 0 === n && r >= r) && (n = r);
+ }
+ return n;
+ }
+ function A(t) {
+ return t;
+ }
+ var D = 1, L = 2, O = 3, N = 4, M = 1e-6;
+ function B(t) {
+ return "translate(" + t + ",0)";
+ }
+ function I(t) {
+ return "translate(0," + t + ")";
+ }
+ function F(t) {
+ return e => +t(e);
+ }
+ function R(t, e) {
+ return e = Math.max(0, t.bandwidth() - 2 * e) / 2, t.round() && (e = Math.round(e)), n => +t(n) + e;
+ }
+ function $() {
+ return !this.__axis;
+ }
+ function P(t, e) {
+ var n = [],
+ i = null,
+ r = null,
+ a = 6,
+ s = 6,
+ o = 3,
+ l = "undefined" != typeof window && window.devicePixelRatio > 1 ? 0 : .5,
+ c = t === D || t === N ? -1 : 1,
+ h = t === N || t === L ? "x" : "y",
+ u = t === D || t === O ? B : I;
+ function d(d) {
+ var p = null == i ? e.ticks ? e.ticks.apply(e, n) : e.domain() : i,
+ f = null == r ? e.tickFormat ? e.tickFormat.apply(e, n) : A : r,
+ g = Math.max(a, 0) + o,
+ y = e.range(),
+ m = +y[0] + l,
+ b = +y[y.length - 1] + l,
+ _ = (e.bandwidth ? R : F)(e.copy(), l),
+ x = d.selection ? d.selection() : d,
+ v = x.selectAll(".domain").data([null]),
+ k = x.selectAll(".tick").data(p, e).order(),
+ w = k.exit(),
+ T = k.enter().append("g").attr("class", "tick"),
+ C = k.select("line"),
+ E = k.select("text");
+ v = v.merge(v.enter().insert("path", ".tick").attr("class", "domain").attr("stroke", "currentColor")),
+ k = k.merge(T),
+ C = C.merge(T.append("line").attr("stroke", "currentColor").attr(h + "2", c * a)),
+ E = E.merge(
+ T.append("text").attr("fill", "currentColor").attr(h, c * g).attr(
+ "dy",
+ t === D ? "0em" : t === O ? "0.71em" : "0.32em",
+ ),
+ ),
+ d !== x
+ && (v = v.transition(d),
+ k = k.transition(d),
+ C = C.transition(d),
+ E = E.transition(d),
+ w = w.transition(d).attr("opacity", M).attr("transform", function(t) {
+ return isFinite(t = _(t)) ? u(t + l) : this.getAttribute("transform");
+ }),
+ T.attr("opacity", M).attr("transform", function(t) {
+ var e = this.parentNode.__axis;
+ return u((e && isFinite(e = e(t)) ? e : _(t)) + l);
+ })),
+ w.remove(),
+ v.attr(
+ "d",
+ t === N || t === L
+ ? s ? "M" + c * s + "," + m + "H" + l + "V" + b + "H" + c * s : "M" + l + "," + m + "V" + b
+ : s
+ ? "M" + m + "," + c * s + "V" + l + "H" + b + "V" + c * s
+ : "M" + m + "," + l + "H" + b,
+ ),
+ k.attr("opacity", 1).attr("transform", function(t) {
+ return u(_(t) + l);
+ }),
+ C.attr(h + "2", c * a),
+ E.attr(h, c * g).text(f),
+ x.filter($).attr("fill", "none").attr("font-size", 10).attr("font-family", "sans-serif").attr(
+ "text-anchor",
+ t === L ? "start" : t === N ? "end" : "middle",
+ ),
+ x.each(function() {
+ this.__axis = _;
+ });
+ }
+ return d.scale = function(t) {
+ return arguments.length ? (e = t, d) : e;
+ },
+ d.ticks = function() {
+ return n = Array.from(arguments), d;
+ },
+ d.tickArguments = function(t) {
+ return arguments.length ? (n = null == t ? [] : Array.from(t), d) : n.slice();
+ },
+ d.tickValues = function(t) {
+ return arguments.length ? (i = null == t ? null : Array.from(t), d) : i && i.slice();
+ },
+ d.tickFormat = function(t) {
+ return arguments.length ? (r = t, d) : r;
+ },
+ d.tickSize = function(t) {
+ return arguments.length ? (a = s = +t, d) : a;
+ },
+ d.tickSizeInner = function(t) {
+ return arguments.length ? (a = +t, d) : a;
+ },
+ d.tickSizeOuter = function(t) {
+ return arguments.length ? (s = +t, d) : s;
+ },
+ d.tickPadding = function(t) {
+ return arguments.length ? (o = +t, d) : o;
+ },
+ d.offset = function(t) {
+ return arguments.length ? (l = +t, d) : l;
+ },
+ d;
+ }
+ var Y = { value: () => {} };
+ function j() {
+ for (var t, e = 0, n = arguments.length, i = {}; e < n; ++e) {
+ if (!(t = arguments[e] + "") || t in i || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
+ i[t] = [];
+ }
+ return new z(i);
+ }
+ function z(t) {
+ this._ = t;
+ }
+ function U(t, e) {
+ for (var n, i = 0, r = t.length; i < r; ++i) if ((n = t[i]).name === e) return n.value;
+ }
+ function W(t, e, n) {
+ for (var i = 0, r = t.length; i < r; ++i) {
+ if (t[i].name === e) {
+ t[i] = Y, t = t.slice(0, i).concat(t.slice(i + 1));
+ break;
+ }
+ }
+ return null != n && t.push({ name: e, value: n }), t;
+ }
+ z.prototype = j.prototype = {
+ constructor: z,
+ on: function(t, e) {
+ var n,
+ i = this._,
+ r = function(t, e) {
+ return t.trim().split(/^|\s+/).map(function(t) {
+ var n = "", i = t.indexOf(".");
+ if (i >= 0 && (n = t.slice(i + 1), t = t.slice(0, i)), t && !e.hasOwnProperty(t)) {
+ throw new Error("unknown type: " + t);
+ }
+ return { type: t, name: n };
+ });
+ }(t + "", i),
+ a = -1,
+ s = r.length;
+ if (!(arguments.length < 2)) {
+ if (null != e && "function" != typeof e) throw new Error("invalid callback: " + e);
+ for (; ++a < s;) {
+ if (n = (t = r[a]).type) i[n] = W(i[n], t.name, e);
+ else if (null == e) for (n in i) i[n] = W(i[n], t.name, null);
+ }
+ return this;
+ }
+ for (; ++a < s;) if ((n = (t = r[a]).type) && (n = U(i[n], t.name))) return n;
+ },
+ copy: function() {
+ var t = {}, e = this._;
+ for (var n in e) t[n] = e[n].slice();
+ return new z(t);
+ },
+ call: function(t, e) {
+ if ((n = arguments.length - 2) > 0) for (var n, i, r = new Array(n), a = 0; a < n; ++a) r[a] = arguments[a + 2];
+ if (!this._.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+ for (a = 0, n = (i = this._[t]).length; a < n; ++a) i[a].value.apply(e, r);
+ },
+ apply: function(t, e, n) {
+ if (!this._.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+ for (var i = this._[t], r = 0, a = i.length; r < a; ++r) i[r].value.apply(e, n);
+ },
+ };
+ var H = "http://www.w3.org/1999/xhtml",
+ q = {
+ svg: "http://www.w3.org/2000/svg",
+ xhtml: H,
+ xlink: "http://www.w3.org/1999/xlink",
+ xml: "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/",
+ };
+ function V(t) {
+ var e = t += "", n = e.indexOf(":");
+ return n >= 0 && "xmlns" !== (e = t.slice(0, n)) && (t = t.slice(n + 1)),
+ q.hasOwnProperty(e) ? { space: q[e], local: t } : t;
+ }
+ function G(t) {
+ return function() {
+ var e = this.ownerDocument, n = this.namespaceURI;
+ return n === H && e.documentElement.namespaceURI === H ? e.createElement(t) : e.createElementNS(n, t);
+ };
+ }
+ function X(t) {
+ return function() {
+ return this.ownerDocument.createElementNS(t.space, t.local);
+ };
+ }
+ function Z(t) {
+ var e = V(t);
+ return (e.local ? X : G)(e);
+ }
+ function Q() {}
+ function K(t) {
+ return null == t ? Q : function() {
+ return this.querySelector(t);
+ };
+ }
+ function J(t) {
+ return null == t ? [] : Array.isArray(t) ? t : Array.from(t);
+ }
+ function tt() {
+ return [];
+ }
+ function et(t) {
+ return null == t ? tt : function() {
+ return this.querySelectorAll(t);
+ };
+ }
+ function nt(t) {
+ return function() {
+ return this.matches(t);
+ };
+ }
+ function it(t) {
+ return function(e) {
+ return e.matches(t);
+ };
+ }
+ var rt = Array.prototype.find;
+ function at() {
+ return this.firstElementChild;
+ }
+ var st = Array.prototype.filter;
+ function ot() {
+ return Array.from(this.children);
+ }
+ function lt(t) {
+ return new Array(t.length);
+ }
+ function ct(t, e) {
+ this.ownerDocument = t.ownerDocument,
+ this.namespaceURI = t.namespaceURI,
+ this._next = null,
+ this._parent = t,
+ this.__data__ = e;
+ }
+ function ht(t, e, n, i, r, a) {
+ for (var s, o = 0, l = e.length, c = a.length; o < c; ++o) {
+ (s = e[o])
+ ? (s.__data__ = a[o], i[o] = s)
+ : n[o] = new ct(t, a[o]);
+ }
+ for (; o < l; ++o) (s = e[o]) && (r[o] = s);
+ }
+ function ut(t, e, n, i, r, a, s) {
+ var o, l, c, h = new Map(), u = e.length, d = a.length, p = new Array(u);
+ for (o = 0; o < u; ++o) {
+ (l = e[o]) && (p[o] = c = s.call(l, l.__data__, o, e) + "", h.has(c) ? r[o] = l : h.set(c, l));
+ }
+ for (o = 0; o < d; ++o) {
+ c = s.call(t, a[o], o, a) + "",
+ (l = h.get(c)) ? (i[o] = l, l.__data__ = a[o], h.delete(c)) : n[o] = new ct(t, a[o]);
+ }
+ for (o = 0; o < u; ++o) (l = e[o]) && h.get(p[o]) === l && (r[o] = l);
+ }
+ function dt(t) {
+ return t.__data__;
+ }
+ function pt(t) {
+ return "object" == typeof t && "length" in t ? t : Array.from(t);
+ }
+ function ft(t, e) {
+ return t < e ? -1 : t > e ? 1 : t >= e ? 0 : NaN;
+ }
+ function gt(t) {
+ return function() {
+ this.removeAttribute(t);
+ };
+ }
+ function yt(t) {
+ return function() {
+ this.removeAttributeNS(t.space, t.local);
+ };
+ }
+ function mt(t, e) {
+ return function() {
+ this.setAttribute(t, e);
+ };
+ }
+ function bt(t, e) {
+ return function() {
+ this.setAttributeNS(t.space, t.local, e);
+ };
+ }
+ function _t(t, e) {
+ return function() {
+ var n = e.apply(this, arguments);
+ null == n ? this.removeAttribute(t) : this.setAttribute(t, n);
+ };
+ }
+ function xt(t, e) {
+ return function() {
+ var n = e.apply(this, arguments);
+ null == n ? this.removeAttributeNS(t.space, t.local) : this.setAttributeNS(t.space, t.local, n);
+ };
+ }
+ function vt(t) {
+ return t.ownerDocument && t.ownerDocument.defaultView || t.document && t || t.defaultView;
+ }
+ function kt(t) {
+ return function() {
+ this.style.removeProperty(t);
+ };
+ }
+ function wt(t, e, n) {
+ return function() {
+ this.style.setProperty(t, e, n);
+ };
+ }
+ function Tt(t, e, n) {
+ return function() {
+ var i = e.apply(this, arguments);
+ null == i ? this.style.removeProperty(t) : this.style.setProperty(t, i, n);
+ };
+ }
+ function Ct(t, e) {
+ return t.style.getPropertyValue(e) || vt(t).getComputedStyle(t, null).getPropertyValue(e);
+ }
+ function Et(t) {
+ return function() {
+ delete this[t];
+ };
+ }
+ function St(t, e) {
+ return function() {
+ this[t] = e;
+ };
+ }
+ function At(t, e) {
+ return function() {
+ var n = e.apply(this, arguments);
+ null == n ? delete this[t] : this[t] = n;
+ };
+ }
+ function Dt(t) {
+ return t.trim().split(/^|\s+/);
+ }
+ function Lt(t) {
+ return t.classList || new Ot(t);
+ }
+ function Ot(t) {
+ this._node = t, this._names = Dt(t.getAttribute("class") || "");
+ }
+ function Nt(t, e) {
+ for (var n = Lt(t), i = -1, r = e.length; ++i < r;) n.add(e[i]);
+ }
+ function Mt(t, e) {
+ for (var n = Lt(t), i = -1, r = e.length; ++i < r;) n.remove(e[i]);
+ }
+ function Bt(t) {
+ return function() {
+ Nt(this, t);
+ };
+ }
+ function It(t) {
+ return function() {
+ Mt(this, t);
+ };
+ }
+ function Ft(t, e) {
+ return function() {
+ (e.apply(this, arguments) ? Nt : Mt)(this, t);
+ };
+ }
+ function Rt() {
+ this.textContent = "";
+ }
+ function $t(t) {
+ return function() {
+ this.textContent = t;
+ };
+ }
+ function Pt(t) {
+ return function() {
+ var e = t.apply(this, arguments);
+ this.textContent = null == e ? "" : e;
+ };
+ }
+ function Yt() {
+ this.innerHTML = "";
+ }
+ function jt(t) {
+ return function() {
+ this.innerHTML = t;
+ };
+ }
+ function zt(t) {
+ return function() {
+ var e = t.apply(this, arguments);
+ this.innerHTML = null == e ? "" : e;
+ };
+ }
+ function Ut() {
+ this.nextSibling && this.parentNode.appendChild(this);
+ }
+ function Wt() {
+ this.previousSibling && this.parentNode.insertBefore(this, this.parentNode.firstChild);
+ }
+ function Ht() {
+ return null;
+ }
+ function qt() {
+ var t = this.parentNode;
+ t && t.removeChild(this);
+ }
+ function Vt() {
+ var t = this.cloneNode(!1), e = this.parentNode;
+ return e ? e.insertBefore(t, this.nextSibling) : t;
+ }
+ function Gt() {
+ var t = this.cloneNode(!0), e = this.parentNode;
+ return e ? e.insertBefore(t, this.nextSibling) : t;
+ }
+ function Xt(t) {
+ return function() {
+ var e = this.__on;
+ if (e) {
+ for (var n, i = 0, r = -1, a = e.length; i < a; ++i) {
+ n = e[i],
+ t.type && n.type !== t.type || n.name !== t.name
+ ? e[++r] = n
+ : this.removeEventListener(n.type, n.listener, n.options);
+ }
+ ++r ? e.length = r : delete this.__on;
+ }
+ };
+ }
+ function Zt(t, e, n) {
+ return function() {
+ var i,
+ r = this.__on,
+ a = function(t) {
+ return function(e) {
+ t.call(this, e, this.__data__);
+ };
+ }(e);
+ if (r) {
+ for (var s = 0, o = r.length; s < o; ++s) {
+ if ((i = r[s]).type === t.type && i.name === t.name) {
+ return this.removeEventListener(i.type, i.listener, i.options),
+ this.addEventListener(i.type, i.listener = a, i.options = n),
+ void (i.value = e);
+ }
+ }
+ }
+ this.addEventListener(t.type, a, n),
+ i = { type: t.type, name: t.name, value: e, listener: a, options: n },
+ r ? r.push(i) : this.__on = [i];
+ };
+ }
+ function Qt(t, e, n) {
+ var i = vt(t), r = i.CustomEvent;
+ "function" == typeof r
+ ? r = new r(e, n)
+ : (r = i.document.createEvent("Event"),
+ n ? (r.initEvent(e, n.bubbles, n.cancelable), r.detail = n.detail) : r.initEvent(e, !1, !1)),
+ t.dispatchEvent(r);
+ }
+ function Kt(t, e) {
+ return function() {
+ return Qt(this, t, e);
+ };
+ }
+ function Jt(t, e) {
+ return function() {
+ return Qt(this, t, e.apply(this, arguments));
+ };
+ }
+ ct.prototype = {
+ constructor: ct,
+ appendChild: function(t) {
+ return this._parent.insertBefore(t, this._next);
+ },
+ insertBefore: function(t, e) {
+ return this._parent.insertBefore(t, e);
+ },
+ querySelector: function(t) {
+ return this._parent.querySelector(t);
+ },
+ querySelectorAll: function(t) {
+ return this._parent.querySelectorAll(t);
+ },
+ },
+ Ot.prototype = {
+ add: function(t) {
+ this._names.indexOf(t) < 0 && (this._names.push(t), this._node.setAttribute("class", this._names.join(" ")));
+ },
+ remove: function(t) {
+ var e = this._names.indexOf(t);
+ e >= 0 && (this._names.splice(e, 1), this._node.setAttribute("class", this._names.join(" ")));
+ },
+ contains: function(t) {
+ return this._names.indexOf(t) >= 0;
+ },
+ };
+ var te = [null];
+ function ee(t, e) {
+ this._groups = t, this._parents = e;
+ }
+ function ne() {
+ return new ee([[document.documentElement]], te);
+ }
+ function ie(t) {
+ return "string" == typeof t ? new ee([[document.querySelector(t)]], [document.documentElement]) : new ee([[t]], te);
+ }
+ function re(t) {
+ return "string" == typeof t
+ ? new ee([document.querySelectorAll(t)], [document.documentElement])
+ : new ee([J(t)], te);
+ }
+ function ae(t, e, n) {
+ t.prototype = e.prototype = n, n.constructor = t;
+ }
+ function se(t, e) {
+ var n = Object.create(t.prototype);
+ for (var i in e) n[i] = e[i];
+ return n;
+ }
+ function oe() {}
+ ee.prototype = ne.prototype = {
+ constructor: ee,
+ select: function(t) {
+ "function" != typeof t && (t = K(t));
+ for (var e = this._groups, n = e.length, i = new Array(n), r = 0; r < n; ++r) {
+ for (var a, s, o = e[r], l = o.length, c = i[r] = new Array(l), h = 0; h < l; ++h) {
+ (a = o[h]) && (s = t.call(a, a.__data__, h, o)) && ("__data__" in a && (s.__data__ = a.__data__), c[h] = s);
+ }
+ }
+ return new ee(i, this._parents);
+ },
+ selectAll: function(t) {
+ t = "function" == typeof t
+ ? function(t) {
+ return function() {
+ return J(t.apply(this, arguments));
+ };
+ }(t)
+ : et(t);
+ for (var e = this._groups, n = e.length, i = [], r = [], a = 0; a < n; ++a) {
+ for (var s, o = e[a], l = o.length, c = 0; c < l; ++c) {
+ (s = o[c]) && (i.push(t.call(s, s.__data__, c, o)), r.push(s));
+ }
+ }
+ return new ee(i, r);
+ },
+ selectChild: function(t) {
+ return this.select(
+ null == t ? at : function(t) {
+ return function() {
+ return rt.call(this.children, t);
+ };
+ }("function" == typeof t ? t : it(t)),
+ );
+ },
+ selectChildren: function(t) {
+ return this.selectAll(
+ null == t ? ot : function(t) {
+ return function() {
+ return st.call(this.children, t);
+ };
+ }("function" == typeof t ? t : it(t)),
+ );
+ },
+ filter: function(t) {
+ "function" != typeof t && (t = nt(t));
+ for (var e = this._groups, n = e.length, i = new Array(n), r = 0; r < n; ++r) {
+ for (var a, s = e[r], o = s.length, l = i[r] = [], c = 0; c < o; ++c) {
+ (a = s[c]) && t.call(a, a.__data__, c, s) && l.push(a);
+ }
+ }
+ return new ee(i, this._parents);
+ },
+ data: function(t, e) {
+ if (!arguments.length) return Array.from(this, dt);
+ var n = e ? ut : ht, i = this._parents, r = this._groups;
+ "function" != typeof t && (t = function(t) {
+ return function() {
+ return t;
+ };
+ }(t));
+ for (var a = r.length, s = new Array(a), o = new Array(a), l = new Array(a), c = 0; c < a; ++c) {
+ var h = i[c],
+ u = r[c],
+ d = u.length,
+ p = pt(t.call(h, h && h.__data__, c, i)),
+ f = p.length,
+ g = o[c] = new Array(f),
+ y = s[c] = new Array(f);
+ n(h, u, g, y, l[c] = new Array(d), p, e);
+ for (var m, b, _ = 0, x = 0; _ < f; ++_) {
+ if (m = g[_]) {
+ for (_ >= x && (x = _ + 1); !(b = y[x]) && ++x < f;);
+ m._next = b || null;
+ }
+ }
+ }
+ return (s = new ee(s, i))._enter = o, s._exit = l, s;
+ },
+ enter: function() {
+ return new ee(this._enter || this._groups.map(lt), this._parents);
+ },
+ exit: function() {
+ return new ee(this._exit || this._groups.map(lt), this._parents);
+ },
+ join: function(t, e, n) {
+ var i = this.enter(), r = this, a = this.exit();
+ return "function" == typeof t ? (i = t(i)) && (i = i.selection()) : i = i.append(t + ""),
+ null != e && (r = e(r)) && (r = r.selection()),
+ null == n ? a.remove() : n(a),
+ i && r ? i.merge(r).order() : r;
+ },
+ merge: function(t) {
+ for (
+ var e = t.selection ? t.selection() : t,
+ n = this._groups,
+ i = e._groups,
+ r = n.length,
+ a = i.length,
+ s = Math.min(r, a),
+ o = new Array(r),
+ l = 0;
+ l < s;
+ ++l
+ ) {
+ for (var c, h = n[l], u = i[l], d = h.length, p = o[l] = new Array(d), f = 0; f < d; ++f) {
+ (c = h[f] || u[f]) && (p[f] = c);
+ }
+ }
+ for (; l < r; ++l) o[l] = n[l];
+ return new ee(o, this._parents);
+ },
+ selection: function() {
+ return this;
+ },
+ order: function() {
+ for (var t = this._groups, e = -1, n = t.length; ++e < n;) {
+ for (var i, r = t[e], a = r.length - 1, s = r[a]; --a >= 0;) {
+ (i = r[a]) && (s && 4 ^ i.compareDocumentPosition(s) && s.parentNode.insertBefore(i, s), s = i);
+ }
+ }
+ return this;
+ },
+ sort: function(t) {
+ function e(e, n) {
+ return e && n ? t(e.__data__, n.__data__) : !e - !n;
+ }
+ t || (t = ft);
+ for (var n = this._groups, i = n.length, r = new Array(i), a = 0; a < i; ++a) {
+ for (var s, o = n[a], l = o.length, c = r[a] = new Array(l), h = 0; h < l; ++h) (s = o[h]) && (c[h] = s);
+ c.sort(e);
+ }
+ return new ee(r, this._parents).order();
+ },
+ call: function() {
+ var t = arguments[0];
+ return arguments[0] = this, t.apply(null, arguments), this;
+ },
+ nodes: function() {
+ return Array.from(this);
+ },
+ node: function() {
+ for (var t = this._groups, e = 0, n = t.length; e < n; ++e) {
+ for (var i = t[e], r = 0, a = i.length; r < a; ++r) {
+ var s = i[r];
+ if (s) return s;
+ }
+ }
+ return null;
+ },
+ size: function() {
+ let t = 0;
+ for (const e of this) ++t;
+ return t;
+ },
+ empty: function() {
+ return !this.node();
+ },
+ each: function(t) {
+ for (var e = this._groups, n = 0, i = e.length; n < i; ++n) {
+ for (var r, a = e[n], s = 0, o = a.length; s < o; ++s) {
+ (r = a[s]) && t.call(r, r.__data__, s, a);
+ }
+ }
+ return this;
+ },
+ attr: function(t, e) {
+ var n = V(t);
+ if (arguments.length < 2) {
+ var i = this.node();
+ return n.local ? i.getAttributeNS(n.space, n.local) : i.getAttribute(n);
+ }
+ return this.each(
+ (null == e ? n.local ? yt : gt : "function" == typeof e ? n.local ? xt : _t : n.local ? bt : mt)(n, e),
+ );
+ },
+ style: function(t, e, n) {
+ return arguments.length > 1
+ ? this.each((null == e ? kt : "function" == typeof e ? Tt : wt)(t, e, null == n ? "" : n))
+ : Ct(this.node(), t);
+ },
+ property: function(t, e) {
+ return arguments.length > 1
+ ? this.each((null == e ? Et : "function" == typeof e ? At : St)(t, e))
+ : this.node()[t];
+ },
+ classed: function(t, e) {
+ var n = Dt(t + "");
+ if (arguments.length < 2) {
+ for (var i = Lt(this.node()), r = -1, a = n.length; ++r < a;) if (!i.contains(n[r])) return !1;
+ return !0;
+ }
+ return this.each(("function" == typeof e ? Ft : e ? Bt : It)(n, e));
+ },
+ text: function(t) {
+ return arguments.length
+ ? this.each(null == t ? Rt : ("function" == typeof t ? Pt : $t)(t))
+ : this.node().textContent;
+ },
+ html: function(t) {
+ return arguments.length
+ ? this.each(null == t ? Yt : ("function" == typeof t ? zt : jt)(t))
+ : this.node().innerHTML;
+ },
+ raise: function() {
+ return this.each(Ut);
+ },
+ lower: function() {
+ return this.each(Wt);
+ },
+ append: function(t) {
+ var e = "function" == typeof t ? t : Z(t);
+ return this.select(function() {
+ return this.appendChild(e.apply(this, arguments));
+ });
+ },
+ insert: function(t, e) {
+ var n = "function" == typeof t ? t : Z(t), i = null == e ? Ht : "function" == typeof e ? e : K(e);
+ return this.select(function() {
+ return this.insertBefore(n.apply(this, arguments), i.apply(this, arguments) || null);
+ });
+ },
+ remove: function() {
+ return this.each(qt);
+ },
+ clone: function(t) {
+ return this.select(t ? Gt : Vt);
+ },
+ datum: function(t) {
+ return arguments.length ? this.property("__data__", t) : this.node().__data__;
+ },
+ on: function(t, e, n) {
+ var i,
+ r,
+ a = function(t) {
+ return t.trim().split(/^|\s+/).map(function(t) {
+ var e = "", n = t.indexOf(".");
+ return n >= 0 && (e = t.slice(n + 1), t = t.slice(0, n)), { type: t, name: e };
+ });
+ }(t + ""),
+ s = a.length;
+ if (!(arguments.length < 2)) {
+ for (o = e ? Zt : Xt, i = 0; i < s; ++i) this.each(o(a[i], e, n));
+ return this;
+ }
+ var o = this.node().__on;
+ if (o) {
+ for (var l, c = 0, h = o.length; c < h; ++c) {
+ for (i = 0, l = o[c]; i < s; ++i) if ((r = a[i]).type === l.type && r.name === l.name) return l.value;
+ }
+ }
+ },
+ dispatch: function(t, e) {
+ return this.each(("function" == typeof e ? Jt : Kt)(t, e));
+ },
+ [Symbol.iterator]: function*() {
+ for (var t = this._groups, e = 0, n = t.length; e < n; ++e) {
+ for (var i, r = t[e], a = 0, s = r.length; a < s; ++a) {
+ (i = r[a]) && (yield i);
+ }
+ }
+ },
+ };
+ var le = .7,
+ ce = 1 / le,
+ he = "\\s*([+-]?\\d+)\\s*",
+ ue = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",
+ de = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
+ pe = /^#([0-9a-f]{3,8})$/,
+ fe = new RegExp(`^rgb\\(${he},${he},${he}\\)$`),
+ ge = new RegExp(`^rgb\\(${de},${de},${de}\\)$`),
+ ye = new RegExp(`^rgba\\(${he},${he},${he},${ue}\\)$`),
+ me = new RegExp(`^rgba\\(${de},${de},${de},${ue}\\)$`),
+ be = new RegExp(`^hsl\\(${ue},${de},${de}\\)$`),
+ _e = new RegExp(`^hsla\\(${ue},${de},${de},${ue}\\)$`),
+ xe = {
+ aliceblue: 15792383,
+ antiquewhite: 16444375,
+ aqua: 65535,
+ aquamarine: 8388564,
+ azure: 15794175,
+ beige: 16119260,
+ bisque: 16770244,
+ black: 0,
+ blanchedalmond: 16772045,
+ blue: 255,
+ blueviolet: 9055202,
+ brown: 10824234,
+ burlywood: 14596231,
+ cadetblue: 6266528,
+ chartreuse: 8388352,
+ chocolate: 13789470,
+ coral: 16744272,
+ cornflowerblue: 6591981,
+ cornsilk: 16775388,
+ crimson: 14423100,
+ cyan: 65535,
+ darkblue: 139,
+ darkcyan: 35723,
+ darkgoldenrod: 12092939,
+ darkgray: 11119017,
+ darkgreen: 25600,
+ darkgrey: 11119017,
+ darkkhaki: 12433259,
+ darkmagenta: 9109643,
+ darkolivegreen: 5597999,
+ darkorange: 16747520,
+ darkorchid: 10040012,
+ darkred: 9109504,
+ darksalmon: 15308410,
+ darkseagreen: 9419919,
+ darkslateblue: 4734347,
+ darkslategray: 3100495,
+ darkslategrey: 3100495,
+ darkturquoise: 52945,
+ darkviolet: 9699539,
+ deeppink: 16716947,
+ deepskyblue: 49151,
+ dimgray: 6908265,
+ dimgrey: 6908265,
+ dodgerblue: 2003199,
+ firebrick: 11674146,
+ floralwhite: 16775920,
+ forestgreen: 2263842,
+ fuchsia: 16711935,
+ gainsboro: 14474460,
+ ghostwhite: 16316671,
+ gold: 16766720,
+ goldenrod: 14329120,
+ gray: 8421504,
+ green: 32768,
+ greenyellow: 11403055,
+ grey: 8421504,
+ honeydew: 15794160,
+ hotpink: 16738740,
+ indianred: 13458524,
+ indigo: 4915330,
+ ivory: 16777200,
+ khaki: 15787660,
+ lavender: 15132410,
+ lavenderblush: 16773365,
+ lawngreen: 8190976,
+ lemonchiffon: 16775885,
+ lightblue: 11393254,
+ lightcoral: 15761536,
+ lightcyan: 14745599,
+ lightgoldenrodyellow: 16448210,
+ lightgray: 13882323,
+ lightgreen: 9498256,
+ lightgrey: 13882323,
+ lightpink: 16758465,
+ lightsalmon: 16752762,
+ lightseagreen: 2142890,
+ lightskyblue: 8900346,
+ lightslategray: 7833753,
+ lightslategrey: 7833753,
+ lightsteelblue: 11584734,
+ lightyellow: 16777184,
+ lime: 65280,
+ limegreen: 3329330,
+ linen: 16445670,
+ magenta: 16711935,
+ maroon: 8388608,
+ mediumaquamarine: 6737322,
+ mediumblue: 205,
+ mediumorchid: 12211667,
+ mediumpurple: 9662683,
+ mediumseagreen: 3978097,
+ mediumslateblue: 8087790,
+ mediumspringgreen: 64154,
+ mediumturquoise: 4772300,
+ mediumvioletred: 13047173,
+ midnightblue: 1644912,
+ mintcream: 16121850,
+ mistyrose: 16770273,
+ moccasin: 16770229,
+ navajowhite: 16768685,
+ navy: 128,
+ oldlace: 16643558,
+ olive: 8421376,
+ olivedrab: 7048739,
+ orange: 16753920,
+ orangered: 16729344,
+ orchid: 14315734,
+ palegoldenrod: 15657130,
+ palegreen: 10025880,
+ paleturquoise: 11529966,
+ palevioletred: 14381203,
+ papayawhip: 16773077,
+ peachpuff: 16767673,
+ peru: 13468991,
+ pink: 16761035,
+ plum: 14524637,
+ powderblue: 11591910,
+ purple: 8388736,
+ rebeccapurple: 6697881,
+ red: 16711680,
+ rosybrown: 12357519,
+ royalblue: 4286945,
+ saddlebrown: 9127187,
+ salmon: 16416882,
+ sandybrown: 16032864,
+ seagreen: 3050327,
+ seashell: 16774638,
+ sienna: 10506797,
+ silver: 12632256,
+ skyblue: 8900331,
+ slateblue: 6970061,
+ slategray: 7372944,
+ slategrey: 7372944,
+ snow: 16775930,
+ springgreen: 65407,
+ steelblue: 4620980,
+ tan: 13808780,
+ teal: 32896,
+ thistle: 14204888,
+ tomato: 16737095,
+ turquoise: 4251856,
+ violet: 15631086,
+ wheat: 16113331,
+ white: 16777215,
+ whitesmoke: 16119285,
+ yellow: 16776960,
+ yellowgreen: 10145074,
+ };
+ function ve() {
+ return this.rgb().formatHex();
+ }
+ function ke() {
+ return this.rgb().formatRgb();
+ }
+ function we(t) {
+ var e, n;
+ return t = (t + "").trim().toLowerCase(),
+ (e = pe.exec(t))
+ ? (n = e[1].length,
+ e = parseInt(e[1], 16),
+ 6 === n
+ ? Te(e)
+ : 3 === n
+ ? new Ae(e >> 8 & 15 | e >> 4 & 240, e >> 4 & 15 | 240 & e, (15 & e) << 4 | 15 & e, 1)
+ : 8 === n
+ ? Ce(e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, (255 & e) / 255)
+ : 4 === n
+ ? Ce(
+ e >> 12 & 15 | e >> 8 & 240,
+ e >> 8 & 15 | e >> 4 & 240,
+ e >> 4 & 15 | 240 & e,
+ ((15 & e) << 4 | 15 & e) / 255,
+ )
+ : null)
+ : (e = fe.exec(t))
+ ? new Ae(e[1], e[2], e[3], 1)
+ : (e = ge.exec(t))
+ ? new Ae(255 * e[1] / 100, 255 * e[2] / 100, 255 * e[3] / 100, 1)
+ : (e = ye.exec(t))
+ ? Ce(e[1], e[2], e[3], e[4])
+ : (e = me.exec(t))
+ ? Ce(255 * e[1] / 100, 255 * e[2] / 100, 255 * e[3] / 100, e[4])
+ : (e = be.exec(t))
+ ? Be(e[1], e[2] / 100, e[3] / 100, 1)
+ : (e = _e.exec(t))
+ ? Be(e[1], e[2] / 100, e[3] / 100, e[4])
+ : xe.hasOwnProperty(t)
+ ? Te(xe[t])
+ : "transparent" === t
+ ? new Ae(NaN, NaN, NaN, 0)
+ : null;
+ }
+ function Te(t) {
+ return new Ae(t >> 16 & 255, t >> 8 & 255, 255 & t, 1);
+ }
+ function Ce(t, e, n, i) {
+ return i <= 0 && (t = e = n = NaN), new Ae(t, e, n, i);
+ }
+ function Ee(t) {
+ return t instanceof oe || (t = we(t)), t ? new Ae((t = t.rgb()).r, t.g, t.b, t.opacity) : new Ae();
+ }
+ function Se(t, e, n, i) {
+ return 1 === arguments.length ? Ee(t) : new Ae(t, e, n, null == i ? 1 : i);
+ }
+ function Ae(t, e, n, i) {
+ this.r = +t, this.g = +e, this.b = +n, this.opacity = +i;
+ }
+ function De() {
+ return `#${Me(this.r)}${Me(this.g)}${Me(this.b)}`;
+ }
+ function Le() {
+ const t = Oe(this.opacity);
+ return `${1 === t ? "rgb(" : "rgba("}${Ne(this.r)}, ${Ne(this.g)}, ${Ne(this.b)}${1 === t ? ")" : `, ${t})`}`;
+ }
+ function Oe(t) {
+ return isNaN(t) ? 1 : Math.max(0, Math.min(1, t));
+ }
+ function Ne(t) {
+ return Math.max(0, Math.min(255, Math.round(t) || 0));
+ }
+ function Me(t) {
+ return ((t = Ne(t)) < 16 ? "0" : "") + t.toString(16);
+ }
+ function Be(t, e, n, i) {
+ return i <= 0 ? t = e = n = NaN : n <= 0 || n >= 1 ? t = e = NaN : e <= 0 && (t = NaN), new Fe(t, e, n, i);
+ }
+ function Ie(t) {
+ if (t instanceof Fe) return new Fe(t.h, t.s, t.l, t.opacity);
+ if (t instanceof oe || (t = we(t)), !t) return new Fe();
+ if (t instanceof Fe) return t;
+ var e = (t = t.rgb()).r / 255,
+ n = t.g / 255,
+ i = t.b / 255,
+ r = Math.min(e, n, i),
+ a = Math.max(e, n, i),
+ s = NaN,
+ o = a - r,
+ l = (a + r) / 2;
+ return o
+ ? (s = e === a ? (n - i) / o + 6 * (n < i) : n === a ? (i - e) / o + 2 : (e - n) / o + 4,
+ o /= l < .5 ? a + r : 2 - a - r,
+ s *= 60)
+ : o = l > 0 && l < 1 ? 0 : s,
+ new Fe(s, o, l, t.opacity);
+ }
+ function Fe(t, e, n, i) {
+ this.h = +t, this.s = +e, this.l = +n, this.opacity = +i;
+ }
+ function Re(t) {
+ return (t = (t || 0) % 360) < 0 ? t + 360 : t;
+ }
+ function $e(t) {
+ return Math.max(0, Math.min(1, t || 0));
+ }
+ function Pe(t, e, n) {
+ return 255 * (t < 60 ? e + (n - e) * t / 60 : t < 180 ? n : t < 240 ? e + (n - e) * (240 - t) / 60 : e);
+ }
+ ae(oe, we, {
+ copy(t) {
+ return Object.assign(new this.constructor(), this, t);
+ },
+ displayable() {
+ return this.rgb().displayable();
+ },
+ hex: ve,
+ formatHex: ve,
+ formatHex8: function() {
+ return this.rgb().formatHex8();
+ },
+ formatHsl: function() {
+ return Ie(this).formatHsl();
+ },
+ formatRgb: ke,
+ toString: ke,
+ }),
+ ae(
+ Ae,
+ Se,
+ se(oe, {
+ brighter(t) {
+ return t = null == t ? ce : Math.pow(ce, t), new Ae(this.r * t, this.g * t, this.b * t, this.opacity);
+ },
+ darker(t) {
+ return t = null == t ? le : Math.pow(le, t), new Ae(this.r * t, this.g * t, this.b * t, this.opacity);
+ },
+ rgb() {
+ return this;
+ },
+ clamp() {
+ return new Ae(Ne(this.r), Ne(this.g), Ne(this.b), Oe(this.opacity));
+ },
+ displayable() {
+ return -.5 <= this.r && this.r < 255.5 && -.5 <= this.g && this.g < 255.5 && -.5 <= this.b && this.b < 255.5
+ && 0 <= this.opacity && this.opacity <= 1;
+ },
+ hex: De,
+ formatHex: De,
+ formatHex8: function() {
+ return `#${Me(this.r)}${Me(this.g)}${Me(this.b)}${Me(255 * (isNaN(this.opacity) ? 1 : this.opacity))}`;
+ },
+ formatRgb: Le,
+ toString: Le,
+ }),
+ ),
+ ae(
+ Fe,
+ function(t, e, n, i) {
+ return 1 === arguments.length ? Ie(t) : new Fe(t, e, n, null == i ? 1 : i);
+ },
+ se(oe, {
+ brighter(t) {
+ return t = null == t ? ce : Math.pow(ce, t), new Fe(this.h, this.s, this.l * t, this.opacity);
+ },
+ darker(t) {
+ return t = null == t ? le : Math.pow(le, t), new Fe(this.h, this.s, this.l * t, this.opacity);
+ },
+ rgb() {
+ var t = this.h % 360 + 360 * (this.h < 0),
+ e = isNaN(t) || isNaN(this.s) ? 0 : this.s,
+ n = this.l,
+ i = n + (n < .5 ? n : 1 - n) * e,
+ r = 2 * n - i;
+ return new Ae(
+ Pe(t >= 240 ? t - 240 : t + 120, r, i),
+ Pe(t, r, i),
+ Pe(t < 120 ? t + 240 : t - 120, r, i),
+ this.opacity,
+ );
+ },
+ clamp() {
+ return new Fe(Re(this.h), $e(this.s), $e(this.l), Oe(this.opacity));
+ },
+ displayable() {
+ return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity
+ && this.opacity <= 1;
+ },
+ formatHsl() {
+ const t = Oe(this.opacity);
+ return `${1 === t ? "hsl(" : "hsla("}${Re(this.h)}, ${100 * $e(this.s)}%, ${100 * $e(this.l)}%${
+ 1 === t ? ")" : `, ${t})`
+ }`;
+ },
+ }),
+ );
+ const Ye = Math.PI / 180,
+ je = 180 / Math.PI,
+ ze = .96422,
+ Ue = 1,
+ We = .82521,
+ He = 4 / 29,
+ qe = 6 / 29,
+ Ve = 3 * qe * qe,
+ Ge = qe * qe * qe;
+ function Xe(t) {
+ if (t instanceof Ze) return new Ze(t.l, t.a, t.b, t.opacity);
+ if (t instanceof nn) return rn(t);
+ t instanceof Ae || (t = Ee(t));
+ var e, n, i = tn(t.r), r = tn(t.g), a = tn(t.b), s = Qe((.2225045 * i + .7168786 * r + .0606169 * a) / Ue);
+ return i === r && r === a
+ ? e = n = s
+ : (e = Qe((.4360747 * i + .3850649 * r + .1430804 * a) / ze),
+ n = Qe((.0139322 * i + .0971045 * r + .7141733 * a) / We)),
+ new Ze(116 * s - 16, 500 * (e - s), 200 * (s - n), t.opacity);
+ }
+ function Ze(t, e, n, i) {
+ this.l = +t, this.a = +e, this.b = +n, this.opacity = +i;
+ }
+ function Qe(t) {
+ return t > Ge ? Math.pow(t, 1 / 3) : t / Ve + He;
+ }
+ function Ke(t) {
+ return t > qe ? t * t * t : Ve * (t - He);
+ }
+ function Je(t) {
+ return 255 * (t <= .0031308 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - .055);
+ }
+ function tn(t) {
+ return (t /= 255) <= .04045 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4);
+ }
+ function en(t, e, n, i) {
+ return 1 === arguments.length
+ ? function(t) {
+ if (t instanceof nn) return new nn(t.h, t.c, t.l, t.opacity);
+ if (t instanceof Ze || (t = Xe(t)), 0 === t.a && 0 === t.b) {
+ return new nn(NaN, 0 < t.l && t.l < 100 ? 0 : NaN, t.l, t.opacity);
+ }
+ var e = Math.atan2(t.b, t.a) * je;
+ return new nn(e < 0 ? e + 360 : e, Math.sqrt(t.a * t.a + t.b * t.b), t.l, t.opacity);
+ }(t)
+ : new nn(t, e, n, null == i ? 1 : i);
+ }
+ function nn(t, e, n, i) {
+ this.h = +t, this.c = +e, this.l = +n, this.opacity = +i;
+ }
+ function rn(t) {
+ if (isNaN(t.h)) {
+ return new Ze(t.l, 0, 0, t.opacity);
+ }
+ var e = t.h * Ye;
+ return new Ze(t.l, Math.cos(e) * t.c, Math.sin(e) * t.c, t.opacity);
+ }
+ ae(
+ Ze,
+ function(t, e, n, i) {
+ return 1 === arguments.length ? Xe(t) : new Ze(t, e, n, null == i ? 1 : i);
+ },
+ se(oe, {
+ brighter(t) {
+ return new Ze(this.l + 18 * (null == t ? 1 : t), this.a, this.b, this.opacity);
+ },
+ darker(t) {
+ return new Ze(this.l - 18 * (null == t ? 1 : t), this.a, this.b, this.opacity);
+ },
+ rgb() {
+ var t = (this.l + 16) / 116, e = isNaN(this.a) ? t : t + this.a / 500, n = isNaN(this.b) ? t : t - this.b / 200;
+ return new Ae(
+ Je(3.1338561 * (e = ze * Ke(e)) - 1.6168667 * (t = Ue * Ke(t)) - .4906146 * (n = We * Ke(n))),
+ Je(-.9787684 * e + 1.9161415 * t + .033454 * n),
+ Je(.0719453 * e - .2289914 * t + 1.4052427 * n),
+ this.opacity,
+ );
+ },
+ }),
+ ),
+ ae(
+ nn,
+ en,
+ se(oe, {
+ brighter(t) {
+ return new nn(this.h, this.c, this.l + 18 * (null == t ? 1 : t), this.opacity);
+ },
+ darker(t) {
+ return new nn(this.h, this.c, this.l - 18 * (null == t ? 1 : t), this.opacity);
+ },
+ rgb() {
+ return rn(this).rgb();
+ },
+ }),
+ );
+ var an = t => () => t;
+ function sn(t, e) {
+ return function(n) {
+ return t + n * e;
+ };
+ }
+ function on(t) {
+ return 1 == (t = +t) ? ln : function(e, n) {
+ return n - e
+ ? function(t, e, n) {
+ return t = Math.pow(t, n), e = Math.pow(e, n) - t, n = 1 / n, function(i) {
+ return Math.pow(t + i * e, n);
+ };
+ }(e, n, t)
+ : an(isNaN(e) ? n : e);
+ };
+ }
+ function ln(t, e) {
+ var n = e - t;
+ return n ? sn(t, n) : an(isNaN(t) ? e : t);
+ }
+ var cn = function t(e) {
+ var n = on(e);
+ function i(t, e) {
+ var i = n((t = Se(t)).r, (e = Se(e)).r), r = n(t.g, e.g), a = n(t.b, e.b), s = ln(t.opacity, e.opacity);
+ return function(e) {
+ return t.r = i(e), t.g = r(e), t.b = a(e), t.opacity = s(e), t + "";
+ };
+ }
+ return i.gamma = t, i;
+ }(1);
+ function hn(t, e) {
+ e || (e = []);
+ var n, i = t ? Math.min(e.length, t.length) : 0, r = e.slice();
+ return function(a) {
+ for (n = 0; n < i; ++n) r[n] = t[n] * (1 - a) + e[n] * a;
+ return r;
+ };
+ }
+ function un(t, e) {
+ var n, i = e ? e.length : 0, r = t ? Math.min(i, t.length) : 0, a = new Array(r), s = new Array(i);
+ for (n = 0; n < r; ++n) a[n] = bn(t[n], e[n]);
+ for (; n < i; ++n) s[n] = e[n];
+ return function(t) {
+ for (n = 0; n < r; ++n) s[n] = a[n](t);
+ return s;
+ };
+ }
+ function dn(t, e) {
+ var n = new Date();
+ return t = +t, e = +e, function(i) {
+ return n.setTime(t * (1 - i) + e * i), n;
+ };
+ }
+ function pn(t, e) {
+ return t = +t, e = +e, function(n) {
+ return t * (1 - n) + e * n;
+ };
+ }
+ function fn(t, e) {
+ var n, i = {}, r = {};
+ for (n in null !== t && "object" == typeof t || (t = {}), null !== e && "object" == typeof e || (e = {}), e) {
+ n in t
+ ? i[n] = bn(t[n], e[n])
+ : r[n] = e[n];
+ }
+ return function(t) {
+ for (n in i) r[n] = i[n](t);
+ return r;
+ };
+ }
+ var gn = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, yn = new RegExp(gn.source, "g");
+ function mn(t, e) {
+ var n, i, r, a = gn.lastIndex = yn.lastIndex = 0, s = -1, o = [], l = [];
+ for (t += "", e += ""; (n = gn.exec(t)) && (i = yn.exec(e));) {
+ (r = i.index) > a && (r = e.slice(a, r), o[s] ? o[s] += r : o[++s] = r),
+ (n = n[0]) === (i = i[0]) ? o[s] ? o[s] += i : o[++s] = i : (o[++s] = null, l.push({ i: s, x: pn(n, i) })),
+ a = yn.lastIndex;
+ }
+ return a < e.length && (r = e.slice(a), o[s] ? o[s] += r : o[++s] = r),
+ o.length < 2
+ ? l[0]
+ ? function(t) {
+ return function(e) {
+ return t(e) + "";
+ };
+ }(l[0].x)
+ : function(t) {
+ return function() {
+ return t;
+ };
+ }(e)
+ : (e = l.length, function(t) {
+ for (var n, i = 0; i < e; ++i) o[(n = l[i]).i] = n.x(t);
+ return o.join("");
+ });
+ }
+ function bn(t, e) {
+ var n, i = typeof e;
+ return null == e || "boolean" === i
+ ? an(e)
+ : ("number" === i
+ ? pn
+ : "string" === i
+ ? (n = we(e)) ? (e = n, cn) : mn
+ : e instanceof we
+ ? cn
+ : e instanceof Date
+ ? dn
+ : (function(t) {
+ return ArrayBuffer.isView(t) && !(t instanceof DataView);
+ })(e)
+ ? hn
+ : Array.isArray(e)
+ ? un
+ : "function" != typeof e.valueOf && "function" != typeof e.toString || isNaN(e)
+ ? fn
+ : pn)(t, e);
+ }
+ function _n(t, e) {
+ return t = +t, e = +e, function(n) {
+ return Math.round(t * (1 - n) + e * n);
+ };
+ }
+ var xn, vn = 180 / Math.PI, kn = { translateX: 0, translateY: 0, rotate: 0, skewX: 0, scaleX: 1, scaleY: 1 };
+ function wn(t, e, n, i, r, a) {
+ var s, o, l;
+ return (s = Math.sqrt(t * t + e * e)) && (t /= s, e /= s),
+ (l = t * n + e * i) && (n -= t * l, i -= e * l),
+ (o = Math.sqrt(n * n + i * i)) && (n /= o, i /= o, l /= o),
+ t * i < e * n && (t = -t, e = -e, l = -l, s = -s),
+ { translateX: r, translateY: a, rotate: Math.atan2(e, t) * vn, skewX: Math.atan(l) * vn, scaleX: s, scaleY: o };
+ }
+ function Tn(t, e, n, i) {
+ function r(t) {
+ return t.length ? t.pop() + " " : "";
+ }
+ return function(a, s) {
+ var o = [], l = [];
+ return a = t(a),
+ s = t(s),
+ function(t, i, r, a, s, o) {
+ if (t !== r || i !== a) {
+ var l = s.push("translate(", null, e, null, n);
+ o.push({ i: l - 4, x: pn(t, r) }, { i: l - 2, x: pn(i, a) });
+ } else (r || a) && s.push("translate(" + r + e + a + n);
+ }(a.translateX, a.translateY, s.translateX, s.translateY, o, l),
+ function(t, e, n, a) {
+ t !== e
+ ? (t - e > 180 ? e += 360 : e - t > 180 && (t += 360),
+ a.push({ i: n.push(r(n) + "rotate(", null, i) - 2, x: pn(t, e) }))
+ : e && n.push(r(n) + "rotate(" + e + i);
+ }(a.rotate, s.rotate, o, l),
+ function(t, e, n, a) {
+ t !== e
+ ? a.push({ i: n.push(r(n) + "skewX(", null, i) - 2, x: pn(t, e) })
+ : e && n.push(r(n) + "skewX(" + e + i);
+ }(a.skewX, s.skewX, o, l),
+ function(t, e, n, i, a, s) {
+ if (t !== n || e !== i) {
+ var o = a.push(r(a) + "scale(", null, ",", null, ")");
+ s.push({ i: o - 4, x: pn(t, n) }, { i: o - 2, x: pn(e, i) });
+ } else 1 === n && 1 === i || a.push(r(a) + "scale(" + n + "," + i + ")");
+ }(a.scaleX, a.scaleY, s.scaleX, s.scaleY, o, l),
+ a = s = null,
+ function(t) {
+ for (var e, n = -1, i = l.length; ++n < i;) o[(e = l[n]).i] = e.x(t);
+ return o.join("");
+ };
+ };
+ }
+ var Cn = Tn(
+ function(t) {
+ const e = new ("function" == typeof DOMMatrix ? DOMMatrix : WebKitCSSMatrix)(t + "");
+ return e.isIdentity ? kn : wn(e.a, e.b, e.c, e.d, e.e, e.f);
+ },
+ "px, ",
+ "px)",
+ "deg)",
+ ),
+ En = Tn(
+ function(t) {
+ return null == t
+ ? kn
+ : (xn || (xn = document.createElementNS("http://www.w3.org/2000/svg", "g")),
+ xn.setAttribute("transform", t),
+ (t = xn.transform.baseVal.consolidate()) ? wn((t = t.matrix).a, t.b, t.c, t.d, t.e, t.f) : kn);
+ },
+ ", ",
+ ")",
+ ")",
+ );
+ var Sn,
+ An,
+ Dn = function(t) {
+ return function(e, n) {
+ var i = t((e = en(e)).h, (n = en(n)).h), r = ln(e.c, n.c), a = ln(e.l, n.l), s = ln(e.opacity, n.opacity);
+ return function(t) {
+ return e.h = i(t), e.c = r(t), e.l = a(t), e.opacity = s(t), e + "";
+ };
+ };
+ }(function(t, e) {
+ var n = e - t;
+ return n ? sn(t, n > 180 || n < -180 ? n - 360 * Math.round(n / 360) : n) : an(isNaN(t) ? e : t);
+ }),
+ Ln = 0,
+ On = 0,
+ Nn = 0,
+ Mn = 1e3,
+ Bn = 0,
+ In = 0,
+ Fn = 0,
+ Rn = "object" == typeof performance && performance.now ? performance : Date,
+ $n = "object" == typeof window && window.requestAnimationFrame
+ ? window.requestAnimationFrame.bind(window)
+ : function(t) {
+ setTimeout(t, 17);
+ };
+ function Pn() {
+ return In || ($n(Yn), In = Rn.now() + Fn);
+ }
+ function Yn() {
+ In = 0;
+ }
+ function jn() {
+ this._call = this._time = this._next = null;
+ }
+ function zn(t, e, n) {
+ var i = new jn();
+ return i.restart(t, e, n), i;
+ }
+ function Un() {
+ In = (Bn = Rn.now()) + Fn, Ln = On = 0;
+ try {
+ !function() {
+ Pn(), ++Ln;
+ for (var t, e = Sn; e;) (t = In - e._time) >= 0 && e._call.call(void 0, t), e = e._next;
+ --Ln;
+ }();
+ } finally {
+ Ln = 0,
+ function() {
+ var t, e, n = Sn, i = 1 / 0;
+ for (; n;) {
+ n._call
+ ? (i > n._time && (i = n._time), t = n, n = n._next)
+ : (e = n._next, n._next = null, n = t ? t._next = e : Sn = e);
+ }
+ An = t, Hn(i);
+ }(),
+ In = 0;
+ }
+ }
+ function Wn() {
+ var t = Rn.now(), e = t - Bn;
+ e > Mn && (Fn -= e, Bn = t);
+ }
+ function Hn(t) {
+ Ln
+ || (On && (On = clearTimeout(On)),
+ t - In > 24
+ ? (t < 1 / 0 && (On = setTimeout(Un, t - Rn.now() - Fn)), Nn && (Nn = clearInterval(Nn)))
+ : (Nn || (Bn = Rn.now(), Nn = setInterval(Wn, Mn)), Ln = 1, $n(Un)));
+ }
+ function qn(t, e, n) {
+ var i = new jn();
+ return e = null == e ? 0 : +e,
+ i.restart(
+ n => {
+ i.stop(), t(n + e);
+ },
+ e,
+ n,
+ ),
+ i;
+ }
+ jn.prototype = zn.prototype = {
+ constructor: jn,
+ restart: function(t, e, n) {
+ if ("function" != typeof t) throw new TypeError("callback is not a function");
+ n = (null == n ? Pn() : +n) + (null == e ? 0 : +e),
+ this._next || An === this || (An ? An._next = this : Sn = this, An = this),
+ this._call = t,
+ this._time = n,
+ Hn();
+ },
+ stop: function() {
+ this._call && (this._call = null, this._time = 1 / 0, Hn());
+ },
+ };
+ var Vn = j("start", "end", "cancel", "interrupt"), Gn = [], Xn = 0, Zn = 1, Qn = 2, Kn = 3, Jn = 4, ti = 5, ei = 6;
+ function ni(t, e, n, i, r, a) {
+ var s = t.__transition;
+ if (s) {
+ if (n in s) return;
+ else t.__transition = {};
+ }
+ !function(t, e, n) {
+ var i, r = t.__transition;
+ function a(t) {
+ n.state = Zn, n.timer.restart(s, n.delay, n.time), n.delay <= t && s(t - n.delay);
+ }
+ function s(a) {
+ var c, h, u, d;
+ if (n.state !== Zn) return l();
+ for (c in r) {
+ if ((d = r[c]).name === n.name) {
+ if (d.state === Kn) return qn(s);
+ d.state === Jn
+ ? (d.state = ei, d.timer.stop(), d.on.call("interrupt", t, t.__data__, d.index, d.group), delete r[c])
+ : +c < e
+ && (d.state = ei, d.timer.stop(), d.on.call("cancel", t, t.__data__, d.index, d.group), delete r[c]);
+ }
+ }
+ if (
+ qn(function() {
+ n.state === Kn && (n.state = Jn, n.timer.restart(o, n.delay, n.time), o(a));
+ }),
+ n.state = Qn,
+ n.on.call("start", t, t.__data__, n.index, n.group),
+ n.state === Qn
+ ) {
+ for (n.state = Kn, i = new Array(u = n.tween.length), c = 0, h = -1; c < u; ++c) {
+ (d = n.tween[c].value.call(t, t.__data__, n.index, n.group)) && (i[++h] = d);
+ }
+ i.length = h + 1;
+ }
+ }
+ function o(e) {
+ for (
+ var r = e < n.duration ? n.ease.call(null, e / n.duration) : (n.timer.restart(l), n.state = ti, 1),
+ a = -1,
+ s = i.length;
+ ++a < s;
+ ) i[a].call(t, r);
+ n.state === ti && (n.on.call("end", t, t.__data__, n.index, n.group), l());
+ }
+ function l() {
+ for (var i in n.state = ei, n.timer.stop(), delete r[e], r) return;
+ delete t.__transition;
+ }
+ r[e] = n, n.timer = zn(a, 0, n.time);
+ }(t, n, {
+ name: e,
+ index: i,
+ group: r,
+ on: Vn,
+ tween: Gn,
+ time: a.time,
+ delay: a.delay,
+ duration: a.duration,
+ ease: a.ease,
+ timer: null,
+ state: Xn,
+ });
+ }
+ function ii(t, e) {
+ var n = ai(t, e);
+ if (n.state > Xn) throw new Error("too late; already scheduled");
+ return n;
+ }
+ function ri(t, e) {
+ var n = ai(t, e);
+ if (n.state > Kn) throw new Error("too late; already running");
+ return n;
+ }
+ function ai(t, e) {
+ var n = t.__transition;
+ if (!n || !(n = n[e])) throw new Error("transition not found");
+ return n;
+ }
+ function si(t, e) {
+ var n, i;
+ return function() {
+ var r = ri(this, t), a = r.tween;
+ if (a !== n) {
+ for (var s = 0, o = (i = n = a).length; s < o; ++s) {
+ if (i[s].name === e) {
+ (i = i.slice()).splice(s, 1);
+ break;
+ }
+ }
+ }
+ r.tween = i;
+ };
+ }
+ function oi(t, e, n) {
+ var i, r;
+ if ("function" != typeof n) throw new Error();
+ return function() {
+ var a = ri(this, t), s = a.tween;
+ if (s !== i) {
+ r = (i = s).slice();
+ for (var o = { name: e, value: n }, l = 0, c = r.length; l < c; ++l) {
+ if (r[l].name === e) {
+ r[l] = o;
+ break;
+ }
+ }
+ l === c && r.push(o);
+ }
+ a.tween = r;
+ };
+ }
+ function li(t, e, n) {
+ var i = t._id;
+ return t.each(function() {
+ var t = ri(this, i);
+ (t.value || (t.value = {}))[e] = n.apply(this, arguments);
+ }),
+ function(t) {
+ return ai(t, i).value[e];
+ };
+ }
+ function ci(t, e) {
+ var n;
+ return ("number" == typeof e ? pn : e instanceof we ? cn : (n = we(e)) ? (e = n, cn) : mn)(t, e);
+ }
+ function hi(t) {
+ return function() {
+ this.removeAttribute(t);
+ };
+ }
+ function ui(t) {
+ return function() {
+ this.removeAttributeNS(t.space, t.local);
+ };
+ }
+ function di(t, e, n) {
+ var i, r, a = n + "";
+ return function() {
+ var s = this.getAttribute(t);
+ return s === a ? null : s === i ? r : r = e(i = s, n);
+ };
+ }
+ function pi(t, e, n) {
+ var i, r, a = n + "";
+ return function() {
+ var s = this.getAttributeNS(t.space, t.local);
+ return s === a ? null : s === i ? r : r = e(i = s, n);
+ };
+ }
+ function fi(t, e, n) {
+ var i, r, a;
+ return function() {
+ var s, o, l = n(this);
+ if (null != l) {
+ return (s = this.getAttribute(t)) === (o = l + "")
+ ? null
+ : s === i && o === r
+ ? a
+ : (r = o, a = e(i = s, l));
+ }
+ this.removeAttribute(t);
+ };
+ }
+ function gi(t, e, n) {
+ var i, r, a;
+ return function() {
+ var s, o, l = n(this);
+ if (null != l) {
+ return (s = this.getAttributeNS(t.space, t.local)) === (o = l + "")
+ ? null
+ : s === i && o === r
+ ? a
+ : (r = o, a = e(i = s, l));
+ }
+ this.removeAttributeNS(t.space, t.local);
+ };
+ }
+ function yi(t, e) {
+ var n, i;
+ function r() {
+ var r = e.apply(this, arguments);
+ return r !== i && (n = (i = r) && function(t, e) {
+ return function(n) {
+ this.setAttributeNS(t.space, t.local, e.call(this, n));
+ };
+ }(t, r)),
+ n;
+ }
+ return r._value = e, r;
+ }
+ function mi(t, e) {
+ var n, i;
+ function r() {
+ var r = e.apply(this, arguments);
+ return r !== i && (n = (i = r) && function(t, e) {
+ return function(n) {
+ this.setAttribute(t, e.call(this, n));
+ };
+ }(t, r)),
+ n;
+ }
+ return r._value = e, r;
+ }
+ function bi(t, e) {
+ return function() {
+ ii(this, t).delay = +e.apply(this, arguments);
+ };
+ }
+ function _i(t, e) {
+ return e = +e, function() {
+ ii(this, t).delay = e;
+ };
+ }
+ function xi(t, e) {
+ return function() {
+ ri(this, t).duration = +e.apply(this, arguments);
+ };
+ }
+ function vi(t, e) {
+ return e = +e, function() {
+ ri(this, t).duration = e;
+ };
+ }
+ var ki = ne.prototype.constructor;
+ function wi(t) {
+ return function() {
+ this.style.removeProperty(t);
+ };
+ }
+ var Ti = 0;
+ function Ci(t, e, n, i) {
+ this._groups = t, this._parents = e, this._name = n, this._id = i;
+ }
+ function Ei() {
+ return ++Ti;
+ }
+ var Si = ne.prototype;
+ Ci.prototype = {
+ constructor: Ci,
+ select: function(t) {
+ var e = this._name, n = this._id;
+ "function" != typeof t && (t = K(t));
+ for (var i = this._groups, r = i.length, a = new Array(r), s = 0; s < r; ++s) {
+ for (var o, l, c = i[s], h = c.length, u = a[s] = new Array(h), d = 0; d < h; ++d) {
+ (o = c[d]) && (l = t.call(o, o.__data__, d, c))
+ && ("__data__" in o && (l.__data__ = o.__data__), u[d] = l, ni(u[d], e, n, d, u, ai(o, n)));
+ }
+ }
+ return new Ci(a, this._parents, e, n);
+ },
+ selectAll: function(t) {
+ var e = this._name, n = this._id;
+ "function" != typeof t && (t = et(t));
+ for (var i = this._groups, r = i.length, a = [], s = [], o = 0; o < r; ++o) {
+ for (var l, c = i[o], h = c.length, u = 0; u < h; ++u) {
+ if (l = c[u]) {
+ for (var d, p = t.call(l, l.__data__, u, c), f = ai(l, n), g = 0, y = p.length; g < y; ++g) {
+ (d = p[g]) && ni(d, e, n, g, p, f);
+ }
+ a.push(p), s.push(l);
+ }
+ }
+ }
+ return new Ci(a, s, e, n);
+ },
+ selectChild: Si.selectChild,
+ selectChildren: Si.selectChildren,
+ filter: function(t) {
+ "function" != typeof t && (t = nt(t));
+ for (var e = this._groups, n = e.length, i = new Array(n), r = 0; r < n; ++r) {
+ for (var a, s = e[r], o = s.length, l = i[r] = [], c = 0; c < o; ++c) {
+ (a = s[c]) && t.call(a, a.__data__, c, s) && l.push(a);
+ }
+ }
+ return new Ci(i, this._parents, this._name, this._id);
+ },
+ merge: function(t) {
+ if (t._id !== this._id) throw new Error();
+ for (
+ var e = this._groups, n = t._groups, i = e.length, r = n.length, a = Math.min(i, r), s = new Array(i), o = 0;
+ o < a;
+ ++o
+ ) {
+ for (var l, c = e[o], h = n[o], u = c.length, d = s[o] = new Array(u), p = 0; p < u; ++p) {
+ (l = c[p] || h[p]) && (d[p] = l);
+ }
+ }
+ for (; o < i; ++o) s[o] = e[o];
+ return new Ci(s, this._parents, this._name, this._id);
+ },
+ selection: function() {
+ return new ki(this._groups, this._parents);
+ },
+ transition: function() {
+ for (var t = this._name, e = this._id, n = Ei(), i = this._groups, r = i.length, a = 0; a < r; ++a) {
+ for (var s, o = i[a], l = o.length, c = 0; c < l; ++c) {
+ if (s = o[c]) {
+ var h = ai(s, e);
+ ni(s, t, n, c, o, { time: h.time + h.delay + h.duration, delay: 0, duration: h.duration, ease: h.ease });
+ }
+ }
+ }
+ return new Ci(i, this._parents, t, n);
+ },
+ call: Si.call,
+ nodes: Si.nodes,
+ node: Si.node,
+ size: Si.size,
+ empty: Si.empty,
+ each: Si.each,
+ on: function(t, e) {
+ var n = this._id;
+ return arguments.length < 2 ? ai(this.node(), n).on.on(t) : this.each(function(t, e, n) {
+ var i,
+ r,
+ a = (function(t) {
+ return (t + "").trim().split(/^|\s+/).every(function(t) {
+ var e = t.indexOf(".");
+ return e >= 0 && (t = t.slice(0, e)), !t || "start" === t;
+ });
+ })(e)
+ ? ii
+ : ri;
+ return function() {
+ var s = a(this, t), o = s.on;
+ o !== i && (r = (i = o).copy()).on(e, n), s.on = r;
+ };
+ }(n, t, e));
+ },
+ attr: function(t, e) {
+ var n = V(t), i = "transform" === n ? En : ci;
+ return this.attrTween(
+ t,
+ "function" == typeof e
+ ? (n.local ? gi : fi)(n, i, li(this, "attr." + t, e))
+ : null == e
+ ? (n.local ? ui : hi)(n)
+ : (n.local ? pi : di)(n, i, e),
+ );
+ },
+ attrTween: function(t, e) {
+ var n = "attr." + t;
+ if (arguments.length < 2) return (n = this.tween(n)) && n._value;
+ if (null == e) return this.tween(n, null);
+ if ("function" != typeof e) throw new Error();
+ var i = V(t);
+ return this.tween(n, (i.local ? yi : mi)(i, e));
+ },
+ style: function(t, e, n) {
+ var i = "transform" == (t += "") ? Cn : ci;
+ return null == e
+ ? this.styleTween(
+ t,
+ function(t, e) {
+ var n, i, r;
+ return function() {
+ var a = Ct(this, t), s = (this.style.removeProperty(t), Ct(this, t));
+ return a === s ? null : a === n && s === i ? r : r = e(n = a, i = s);
+ };
+ }(t, i),
+ ).on("end.style." + t, wi(t))
+ : "function" == typeof e
+ ? this.styleTween(
+ t,
+ function(t, e, n) {
+ var i, r, a;
+ return function() {
+ var s = Ct(this, t), o = n(this), l = o + "";
+ return null == o && (this.style.removeProperty(t), l = o = Ct(this, t)),
+ s === l ? null : s === i && l === r ? a : (r = l, a = e(i = s, o));
+ };
+ }(t, i, li(this, "style." + t, e)),
+ ).each(function(t, e) {
+ var n, i, r, a, s = "style." + e, o = "end." + s;
+ return function() {
+ var l = ri(this, t), c = l.on, h = null == l.value[s] ? a || (a = wi(e)) : void 0;
+ c === n && r === h || (i = (n = c).copy()).on(o, r = h), l.on = i;
+ };
+ }(this._id, t))
+ : this.styleTween(
+ t,
+ function(t, e, n) {
+ var i, r, a = n + "";
+ return function() {
+ var s = Ct(this, t);
+ return s === a ? null : s === i ? r : r = e(i = s, n);
+ };
+ }(t, i, e),
+ n,
+ ).on("end.style." + t, null);
+ },
+ styleTween: function(t, e, n) {
+ var i = "style." + (t += "");
+ if (arguments.length < 2) return (i = this.tween(i)) && i._value;
+ if (null == e) return this.tween(i, null);
+ if ("function" != typeof e) throw new Error();
+ return this.tween(
+ i,
+ function(t, e, n) {
+ var i, r;
+ function a() {
+ var a = e.apply(this, arguments);
+ return a !== r && (i = (r = a) && function(t, e, n) {
+ return function(i) {
+ this.style.setProperty(t, e.call(this, i), n);
+ };
+ }(t, a, n)),
+ i;
+ }
+ return a._value = e, a;
+ }(t, e, null == n ? "" : n),
+ );
+ },
+ text: function(t) {
+ return this.tween(
+ "text",
+ "function" == typeof t
+ ? function(t) {
+ return function() {
+ var e = t(this);
+ this.textContent = null == e ? "" : e;
+ };
+ }(li(this, "text", t))
+ : function(t) {
+ return function() {
+ this.textContent = t;
+ };
+ }(null == t ? "" : t + ""),
+ );
+ },
+ textTween: function(t) {
+ var e = "text";
+ if (arguments.length < 1) return (e = this.tween(e)) && e._value;
+ if (null == t) return this.tween(e, null);
+ if ("function" != typeof t) throw new Error();
+ return this.tween(
+ e,
+ function(t) {
+ var e, n;
+ function i() {
+ var i = t.apply(this, arguments);
+ return i !== n && (e = (n = i) && function(t) {
+ return function(e) {
+ this.textContent = t.call(this, e);
+ };
+ }(i)),
+ e;
+ }
+ return i._value = t, i;
+ }(t),
+ );
+ },
+ remove: function() {
+ return this.on(
+ "end.remove",
+ function(t) {
+ return function() {
+ var e = this.parentNode;
+ for (var n in this.__transition) if (+n !== t) return;
+ e && e.removeChild(this);
+ };
+ }(this._id),
+ );
+ },
+ tween: function(t, e) {
+ var n = this._id;
+ if (t += "", arguments.length < 2) {
+ for (var i, r = ai(this.node(), n).tween, a = 0, s = r.length; a < s; ++a) {
+ if ((i = r[a]).name === t) return i.value;
+ }
+ return null;
+ }
+ return this.each((null == e ? si : oi)(n, t, e));
+ },
+ delay: function(t) {
+ var e = this._id;
+ return arguments.length ? this.each(("function" == typeof t ? bi : _i)(e, t)) : ai(this.node(), e).delay;
+ },
+ duration: function(t) {
+ var e = this._id;
+ return arguments.length ? this.each(("function" == typeof t ? xi : vi)(e, t)) : ai(this.node(), e).duration;
+ },
+ ease: function(t) {
+ var e = this._id;
+ return arguments.length
+ ? this.each(function(t, e) {
+ if ("function" != typeof e) throw new Error();
+ return function() {
+ ri(this, t).ease = e;
+ };
+ }(e, t))
+ : ai(this.node(), e).ease;
+ },
+ easeVarying: function(t) {
+ if ("function" != typeof t) throw new Error();
+ return this.each(function(t, e) {
+ return function() {
+ var n = e.apply(this, arguments);
+ if ("function" != typeof n) throw new Error();
+ ri(this, t).ease = n;
+ };
+ }(this._id, t));
+ },
+ end: function() {
+ var t, e, n = this, i = n._id, r = n.size();
+ return new Promise(function(a, s) {
+ var o = { value: s },
+ l = {
+ value: function() {
+ 0 == --r && a();
+ },
+ };
+ n.each(function() {
+ var n = ri(this, i), r = n.on;
+ r !== t && ((e = (t = r).copy())._.cancel.push(o), e._.interrupt.push(o), e._.end.push(l)), n.on = e;
+ }), 0 === r && a();
+ });
+ },
+ [Symbol.iterator]: Si[Symbol.iterator],
+ };
+ var Ai = {
+ time: null,
+ delay: 0,
+ duration: 250,
+ ease: function(t) {
+ return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+ },
+ };
+ function Di(t, e) {
+ for (var n; !(n = t.__transition) || !(n = n[e]);) {
+ if (!(t = t.parentNode)) throw new Error(`transition ${e} not found`);
+ }
+ return n;
+ }
+ ne.prototype.interrupt = function(t) {
+ return this.each(function() {
+ !function(t, e) {
+ var n, i, r, a = t.__transition, s = !0;
+ if (a) {
+ for (r in e = null == e ? null : e + "", a) {
+ (n = a[r]).name === e
+ ? (i = n.state > Qn && n.state < ti,
+ n.state = ei,
+ n.timer.stop(),
+ n.on.call(i ? "interrupt" : "cancel", t, t.__data__, n.index, n.group),
+ delete a[r])
+ : s = !1;
+ }
+ s && delete t.__transition;
+ }
+ }(this, t);
+ });
+ },
+ ne.prototype.transition = function(t) {
+ var e, n;
+ t instanceof Ci ? (e = t._id, t = t._name) : (e = Ei(), (n = Ai).time = Pn(), t = null == t ? null : t + "");
+ for (var i = this._groups, r = i.length, a = 0; a < r; ++a) {
+ for (var s, o = i[a], l = o.length, c = 0; c < l; ++c) {
+ (s = o[c]) && ni(s, t, e, c, o, n || Di(s, e));
+ }
+ }
+ return new Ci(i, this._parents, t, e);
+ };
+ const Li = Math.PI, Oi = 2 * Li, Ni = 1e-6, Mi = Oi - Ni;
+ function Bi(t) {
+ this._ += t[0];
+ for (let e = 1, n = t.length; e < n; ++e) this._ += arguments[e] + t[e];
+ }
+ class Ii {
+ constructor(t) {
+ this._x0 =
+ this._y0 =
+ this._x1 =
+ this._y1 =
+ null,
+ this._ = "",
+ this._append = null == t ? Bi : function(t) {
+ let e = Math.floor(t);
+ if (!(e >= 0)) throw new Error(`invalid digits: ${t}`);
+ if (e > 15) return Bi;
+ const n = 10 ** e;
+ return function(t) {
+ this._ += t[0];
+ for (let e = 1, i = t.length; e < i; ++e) this._ += Math.round(arguments[e] * n) / n + t[e];
+ };
+ }(t);
+ }
+ moveTo(t, e) {
+ this._append`M${this._x0 = this._x1 = +t},${this._y0 = this._y1 = +e}`;
+ }
+ closePath() {
+ null !== this._x1 && (this._x1 = this._x0, this._y1 = this._y0, this._append`Z`);
+ }
+ lineTo(t, e) {
+ this._append`L${this._x1 = +t},${this._y1 = +e}`;
+ }
+ quadraticCurveTo(t, e, n, i) {
+ this._append`Q${+t},${+e},${this._x1 = +n},${this._y1 = +i}`;
+ }
+ bezierCurveTo(t, e, n, i, r, a) {
+ this._append`C${+t},${+e},${+n},${+i},${this._x1 = +r},${this._y1 = +a}`;
+ }
+ arcTo(t, e, n, i, r) {
+ if (t = +t, e = +e, n = +n, i = +i, (r = +r) < 0) throw new Error(`negative radius: ${r}`);
+ let a = this._x1, s = this._y1, o = n - t, l = i - e, c = a - t, h = s - e, u = c * c + h * h;
+ if (null === this._x1) this._append`M${this._x1 = t},${this._y1 = e}`;
+ else if (u > Ni) {
+ if (Math.abs(h * o - l * c) > Ni && r) {
+ let d = n - a,
+ p = i - s,
+ f = o * o + l * l,
+ g = d * d + p * p,
+ y = Math.sqrt(f),
+ m = Math.sqrt(u),
+ b = r * Math.tan((Li - Math.acos((f + u - g) / (2 * y * m))) / 2),
+ _ = b / m,
+ x = b / y;
+ Math.abs(_ - 1) > Ni && this._append`L${t + _ * c},${e + _ * h}`,
+ this._append`A${r},${r},0,0,${+(h * d > c * p)},${this._x1 = t + x * o},${this._y1 = e + x * l}`;
+ } else this._append`L${this._x1 = t},${this._y1 = e}`;
+ } else;
+ }
+ arc(t, e, n, i, r, a) {
+ if (t = +t, e = +e, a = !!a, (n = +n) < 0) throw new Error(`negative radius: ${n}`);
+ let s = n * Math.cos(i), o = n * Math.sin(i), l = t + s, c = e + o, h = 1 ^ a, u = a ? i - r : r - i;
+ null === this._x1
+ ? this._append`M${l},${c}`
+ : (Math.abs(this._x1 - l) > Ni || Math.abs(this._y1 - c) > Ni) && this._append`L${l},${c}`,
+ n
+ && (u < 0 && (u = u % Oi + Oi),
+ u > Mi
+ ? this._append`A${n},${n},0,1,${h},${t - s},${e - o}A${n},${n},0,1,${h},${this._x1 = l},${this._y1 = c}`
+ : u > Ni
+ && this._append`A${n},${n},0,${+(u >= Li)},${h},${this._x1 = t + n * Math.cos(r)},${this._y1 = e
+ + n * Math.sin(r)}`);
+ }
+ rect(t, e, n, i) {
+ this._append`M${this._x0 = this._x1 = +t},${this._y0 = this._y1 = +e}h${n = +n}v${+i}h${-n}Z`;
+ }
+ toString() {
+ return this._;
+ }
+ }
+ function Fi(t) {
+ if (!t.ok) throw new Error(t.status + " " + t.statusText);
+ return t.text();
+ }
+ function Ri(t, e) {
+ if ((n = (t = e ? t.toExponential(e - 1) : t.toExponential()).indexOf("e")) < 0) return null;
+ var n, i = t.slice(0, n);
+ return [i.length > 1 ? i[0] + i.slice(2) : i, +t.slice(n + 1)];
+ }
+ function $i(t) {
+ return (t = Ri(Math.abs(t))) ? t[1] : NaN;
+ }
+ var Pi, Yi = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
+ function ji(t) {
+ if (!(e = Yi.exec(t))) throw new Error("invalid format: " + t);
+ var e;
+ return new zi({
+ fill: e[1],
+ align: e[2],
+ sign: e[3],
+ symbol: e[4],
+ zero: e[5],
+ width: e[6],
+ comma: e[7],
+ precision: e[8] && e[8].slice(1),
+ trim: e[9],
+ type: e[10],
+ });
+ }
+ function zi(t) {
+ this.fill = void 0 === t.fill ? " " : t.fill + "",
+ this.align = void 0 === t.align ? ">" : t.align + "",
+ this.sign = void 0 === t.sign ? "-" : t.sign + "",
+ this.symbol = void 0 === t.symbol ? "" : t.symbol + "",
+ this.zero = !!t.zero,
+ this.width = void 0 === t.width ? void 0 : +t.width,
+ this.comma = !!t.comma,
+ this.precision = void 0 === t.precision ? void 0 : +t.precision,
+ this.trim = !!t.trim,
+ this.type = void 0 === t.type ? "" : t.type + "";
+ }
+ function Ui(t, e) {
+ var n = Ri(t, e);
+ if (!n) return t + "";
+ var i = n[0], r = n[1];
+ return r < 0
+ ? "0." + new Array(-r).join("0") + i
+ : i.length > r + 1
+ ? i.slice(0, r + 1) + "." + i.slice(r + 1)
+ : i + new Array(r - i.length + 2).join("0");
+ }
+ ji.prototype = zi.prototype,
+ zi.prototype.toString = function() {
+ return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "")
+ + (void 0 === this.width ? "" : Math.max(1, 0 | this.width)) + (this.comma ? "," : "")
+ + (void 0 === this.precision ? "" : "." + Math.max(0, 0 | this.precision)) + (this.trim ? "~" : "") + this.type;
+ };
+ var Wi = {
+ "%": (t, e) => (100 * t).toFixed(e),
+ b: t => Math.round(t).toString(2),
+ c: t => t + "",
+ d: function(t) {
+ return Math.abs(t = Math.round(t)) >= 1e21 ? t.toLocaleString("en").replace(/,/g, "") : t.toString(10);
+ },
+ e: (t, e) => t.toExponential(e),
+ f: (t, e) => t.toFixed(e),
+ g: (t, e) => t.toPrecision(e),
+ o: t => Math.round(t).toString(8),
+ p: (t, e) => Ui(100 * t, e),
+ r: Ui,
+ s: function(t, e) {
+ var n = Ri(t, e);
+ if (!n) return t + "";
+ var i = n[0], r = n[1], a = r - (Pi = 3 * Math.max(-8, Math.min(8, Math.floor(r / 3)))) + 1, s = i.length;
+ return a === s
+ ? i
+ : a > s
+ ? i + new Array(a - s + 1).join("0")
+ : a > 0
+ ? i.slice(0, a) + "." + i.slice(a)
+ : "0." + new Array(1 - a).join("0") + Ri(t, Math.max(0, e + a - 1))[0];
+ },
+ X: t => Math.round(t).toString(16).toUpperCase(),
+ x: t => Math.round(t).toString(16),
+ };
+ function Hi(t) {
+ return t;
+ }
+ var qi,
+ Vi,
+ Gi,
+ Xi = Array.prototype.map,
+ Zi = ["y", "z", "a", "f", "p", "n", "ยต", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];
+ function Qi(t) {
+ var e,
+ n,
+ i = void 0 === t.grouping || void 0 === t.thousands
+ ? Hi
+ : (e = Xi.call(t.grouping, Number), n = t.thousands + "", function(t, i) {
+ for (
+ var r = t.length, a = [], s = 0, o = e[0], l = 0;
+ r > 0 && o > 0
+ && (l + o + 1 > i && (o = Math.max(1, i - l)), a.push(t.substring(r -= o, r + o)), !((l += o + 1) > i));
+ ) o = e[s = (s + 1) % e.length];
+ return a.reverse().join(n);
+ }),
+ r = void 0 === t.currency ? "" : t.currency[0] + "",
+ a = void 0 === t.currency ? "" : t.currency[1] + "",
+ s = void 0 === t.decimal ? "." : t.decimal + "",
+ o = void 0 === t.numerals ? Hi : function(t) {
+ return function(e) {
+ return e.replace(/[0-9]/g, function(e) {
+ return t[+e];
+ });
+ };
+ }(Xi.call(t.numerals, String)),
+ l = void 0 === t.percent ? "%" : t.percent + "",
+ c = void 0 === t.minus ? "โ" : t.minus + "",
+ h = void 0 === t.nan ? "NaN" : t.nan + "";
+ function u(t) {
+ var e = (t = ji(t)).fill,
+ n = t.align,
+ u = t.sign,
+ d = t.symbol,
+ p = t.zero,
+ f = t.width,
+ g = t.comma,
+ y = t.precision,
+ m = t.trim,
+ b = t.type;
+ "n" === b ? (g = !0, b = "g") : Wi[b] || (void 0 === y && (y = 12), m = !0, b = "g"),
+ (p || "0" === e && "=" === n) && (p = !0, e = "0", n = "=");
+ var _ = "$" === d ? r : "#" === d && /[boxX]/.test(b) ? "0" + b.toLowerCase() : "",
+ x = "$" === d ? a : /[%p]/.test(b) ? l : "",
+ v = Wi[b],
+ k = /[defgprs%]/.test(b);
+ function w(t) {
+ var r, a, l, d = _, w = x;
+ if ("c" === b) w = v(t) + w, t = "";
+ else {
+ var T = (t = +t) < 0 || 1 / t < 0;
+ if (
+ t = isNaN(t) ? h : v(Math.abs(t), y),
+ m && (t = function(t) {
+ t: for (var e, n = t.length, i = 1, r = -1; i < n; ++i) {
+ switch (t[i]) {
+ case ".":
+ r = e = i;
+ break;
+ case "0":
+ 0 === r && (r = i), e = i;
+ break;
+ default:
+ if (!+t[i]) break t;
+ r > 0 && (r = 0);
+ }
+ }
+ return r > 0 ? t.slice(0, r) + t.slice(e + 1) : t;
+ }(t)),
+ T && 0 == +t && "+" !== u && (T = !1),
+ d = (T ? "(" === u ? u : c : "-" === u || "(" === u ? "" : u) + d,
+ w = ("s" === b ? Zi[8 + Pi / 3] : "") + w + (T && "(" === u ? ")" : ""),
+ k
+ ) {
+ for (r = -1, a = t.length; ++r < a;) {
+ if (48 > (l = t.charCodeAt(r)) || l > 57) {
+ w = (46 === l ? s + t.slice(r + 1) : t.slice(r)) + w, t = t.slice(0, r);
+ break;
+ }
+ }
+ }
+ }
+ g && !p && (t = i(t, 1 / 0));
+ var C = d.length + t.length + w.length, E = C < f ? new Array(f - C + 1).join(e) : "";
+ switch (g && p && (t = i(E + t, E.length ? f - w.length : 1 / 0), E = ""), n) {
+ case "<":
+ t = d + t + w + E;
+ break;
+ case "=":
+ t = d + E + t + w;
+ break;
+ case "^":
+ t = E.slice(0, C = E.length >> 1) + d + t + w + E.slice(C);
+ break;
+ default:
+ t = E + d + t + w;
+ }
+ return o(t);
+ }
+ return y = void 0 === y ? 6 : /[gprs]/.test(b) ? Math.max(1, Math.min(21, y)) : Math.max(0, Math.min(20, y)),
+ w.toString = function() {
+ return t + "";
+ },
+ w;
+ }
+ return {
+ format: u,
+ formatPrefix: function(t, e) {
+ var n = u(((t = ji(t)).type = "f", t)),
+ i = 3 * Math.max(-8, Math.min(8, Math.floor($i(e) / 3))),
+ r = Math.pow(10, -i),
+ a = Zi[8 + i / 3];
+ return function(t) {
+ return n(r * t) + a;
+ };
+ },
+ };
+ }
+ function Ki(t, e) {
+ switch (arguments.length) {
+ case 0:
+ break;
+ case 1:
+ this.range(t);
+ break;
+ default:
+ this.range(e).domain(t);
+ }
+ return this;
+ }
+ qi = Qi({ thousands: ",", grouping: [3], currency: ["$", ""] }), Vi = qi.format, Gi = qi.formatPrefix;
+ const Ji = Symbol("implicit");
+ function tr() {
+ var t = new m(), e = [], n = [], i = Ji;
+ function r(r) {
+ let a = t.get(r);
+ if (void 0 === a) {
+ if (i !== Ji) return i;
+ t.set(r, a = e.push(r) - 1);
+ }
+ return n[a % n.length];
+ }
+ return r.domain = function(n) {
+ if (!arguments.length) return e.slice();
+ e = [], t = new m();
+ for (const i of n) t.has(i) || t.set(i, e.push(i) - 1);
+ return r;
+ },
+ r.range = function(t) {
+ return arguments.length ? (n = Array.from(t), r) : n.slice();
+ },
+ r.unknown = function(t) {
+ return arguments.length ? (i = t, r) : i;
+ },
+ r.copy = function() {
+ return tr(e, n).unknown(i);
+ },
+ Ki.apply(r, arguments),
+ r;
+ }
+ function er(t) {
+ return +t;
+ }
+ var nr = [0, 1];
+ function ir(t) {
+ return t;
+ }
+ function rr(t, e) {
+ return (e -= t = +t)
+ ? function(n) {
+ return (n - t) / e;
+ }
+ : function(t) {
+ return function() {
+ return t;
+ };
+ }(isNaN(e) ? NaN : .5);
+ }
+ function ar(t, e, n) {
+ var i = t[0], r = t[1], a = e[0], s = e[1];
+ return r < i ? (i = rr(r, i), a = n(s, a)) : (i = rr(i, r), a = n(a, s)), function(t) {
+ return a(i(t));
+ };
+ }
+ function sr(t, e, n) {
+ var i = Math.min(t.length, e.length) - 1, r = new Array(i), a = new Array(i), s = -1;
+ for (t[i] < t[0] && (t = t.slice().reverse(), e = e.slice().reverse()); ++s < i;) {
+ r[s] = rr(t[s], t[s + 1]), a[s] = n(e[s], e[s + 1]);
+ }
+ return function(e) {
+ var n = y(t, e, 1, i) - 1;
+ return a[n](r[n](e));
+ };
+ }
+ function or(t, e) {
+ return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown());
+ }
+ function lr() {
+ var t, e, n, i, r, a, s = nr, o = nr, l = bn, c = ir;
+ function h() {
+ var t, e, n, l = Math.min(s.length, o.length);
+ return c !== ir && (t = s[0],
+ e = s[l - 1],
+ t > e && (n = t, t = e, e = n),
+ c = function(n) {
+ return Math.max(t, Math.min(e, n));
+ }),
+ i = l > 2 ? sr : ar,
+ r = a = null,
+ u;
+ }
+ function u(e) {
+ return null == e || isNaN(e = +e) ? n : (r || (r = i(s.map(t), o, l)))(t(c(e)));
+ }
+ return u.invert = function(n) {
+ return c(e((a || (a = i(o, s.map(t), pn)))(n)));
+ },
+ u.domain = function(t) {
+ return arguments.length ? (s = Array.from(t, er), h()) : s.slice();
+ },
+ u.range = function(t) {
+ return arguments.length ? (o = Array.from(t), h()) : o.slice();
+ },
+ u.rangeRound = function(t) {
+ return o = Array.from(t), l = _n, h();
+ },
+ u.clamp = function(t) {
+ return arguments.length ? (c = !!t || ir, h()) : c !== ir;
+ },
+ u.interpolate = function(t) {
+ return arguments.length ? (l = t, h()) : l;
+ },
+ u.unknown = function(t) {
+ return arguments.length ? (n = t, u) : n;
+ },
+ function(n, i) {
+ return t = n, e = i, h();
+ };
+ }
+ function cr() {
+ return lr()(ir, ir);
+ }
+ function hr(t, e, n, i) {
+ var r, a = C(t, e, n);
+ switch ((i = ji(null == i ? ",f" : i)).type) {
+ case "s":
+ var s = Math.max(Math.abs(t), Math.abs(e));
+ return null != i.precision || isNaN(
+ r = function(t, e) {
+ return Math.max(0, 3 * Math.max(-8, Math.min(8, Math.floor($i(e) / 3))) - $i(Math.abs(t)));
+ }(a, s),
+ ) || (i.precision = r),
+ Gi(i, s);
+ case "":
+ case "e":
+ case "g":
+ case "p":
+ case "r":
+ null != i.precision || isNaN(
+ r = function(t, e) {
+ return t = Math.abs(t), e = Math.abs(e) - t, Math.max(0, $i(e) - $i(t)) + 1;
+ }(a, Math.max(Math.abs(t), Math.abs(e))),
+ ) || (i.precision = r - ("e" === i.type));
+ break;
+ case "f":
+ case "%":
+ null != i.precision || isNaN(
+ r = function(t) {
+ return Math.max(0, -$i(Math.abs(t)));
+ }(a),
+ ) || (i.precision = r - 2 * ("%" === i.type));
+ }
+ return Vi(i);
+ }
+ function ur(t) {
+ var e = t.domain;
+ return t.ticks = function(t) {
+ var n = e();
+ return function(t, e, n) {
+ if (!((n = +n) > 0)) return [];
+ if ((t = +t) == (e = +e)) return [t];
+ const i = e < t, [r, a, s] = i ? w(e, t, n) : w(t, e, n);
+ if (!(a >= r)) return [];
+ const o = a - r + 1, l = new Array(o);
+ if (i) {
+ if (s < 0) for (let t = 0; t < o; ++t) l[t] = (a - t) / -s;
+ else for (let t = 0; t < o; ++t) l[t] = (a - t) * s;
+ } else if (s < 0) for (let t = 0; t < o; ++t) l[t] = (r + t) / -s;
+ else for (let t = 0; t < o; ++t) l[t] = (r + t) * s;
+ return l;
+ }(n[0], n[n.length - 1], null == t ? 10 : t);
+ },
+ t.tickFormat = function(t, n) {
+ var i = e();
+ return hr(i[0], i[i.length - 1], null == t ? 10 : t, n);
+ },
+ t.nice = function(n) {
+ null == n && (n = 10);
+ var i, r, a = e(), s = 0, o = a.length - 1, l = a[s], c = a[o], h = 10;
+ for (c < l && (r = l, l = c, c = r, r = s, s = o, o = r); h-- > 0;) {
+ if ((r = T(l, c, n)) === i) return a[s] = l, a[o] = c, e(a);
+ if (r > 0) l = Math.floor(l / r) * r, c = Math.ceil(c / r) * r;
+ else {
+ if (!(r < 0)) break;
+ l = Math.ceil(l * r) / r, c = Math.floor(c * r) / r;
+ }
+ i = r;
+ }
+ return t;
+ },
+ t;
+ }
+ function dr() {
+ var t = cr();
+ return t.copy = function() {
+ return or(t, dr());
+ },
+ Ki.apply(t, arguments),
+ ur(t);
+ }
+ const pr = new Date(), fr = new Date();
+ function gr(t, e, n, i) {
+ function r(e) {
+ return t(e = 0 === arguments.length ? new Date() : new Date(+e)), e;
+ }
+ return r.floor = e => (t(e = new Date(+e)), e),
+ r.ceil = n => (t(n = new Date(n - 1)), e(n, 1), t(n), n),
+ r.round = t => {
+ const e = r(t), n = r.ceil(t);
+ return t - e < n - t ? e : n;
+ },
+ r.offset = (t, n) => (e(t = new Date(+t), null == n ? 1 : Math.floor(n)), t),
+ r.range = (n, i, a) => {
+ const s = [];
+ if (n = r.ceil(n), a = null == a ? 1 : Math.floor(a), !(n < i && a > 0)) return s;
+ let o;
+ do {
+ s.push(o = new Date(+n)), e(n, a), t(n);
+ } while (o < n && n < i);
+ return s;
+ },
+ r.filter = n =>
+ gr(e => {
+ if (e >= e) for (; t(e), !n(e);) e.setTime(e - 1);
+ }, (t, i) => {
+ if (t >= t) {
+ if (i < 0) for (; ++i <= 0;) for (; e(t, -1), !n(t););
+ else for (; --i >= 0;) for (; e(t, 1), !n(t););
+ }
+ }),
+ n
+ && (r.count = (e, i) => (pr.setTime(+e), fr.setTime(+i), t(pr), t(fr), Math.floor(n(pr, fr))),
+ r.every = t => (t = Math.floor(t),
+ isFinite(t) && t > 0
+ ? t > 1
+ ? r.filter(
+ i
+ ? e => i(e) % t == 0
+ : e => r.count(0, e) % t == 0,
+ )
+ : r
+ : null)),
+ r;
+ }
+ const yr = gr(() => {}, (t, e) => {
+ t.setTime(+t + e);
+ }, (t, e) => e - t);
+ yr.every = t => (t = Math.floor(t),
+ isFinite(t) && t > 0
+ ? t > 1
+ ? gr(e => {
+ e.setTime(Math.floor(e / t) * t);
+ }, (e, n) => {
+ e.setTime(+e + n * t);
+ }, (e, n) => (n - e) / t)
+ : yr
+ : null), yr.range;
+ const mr = 1e3,
+ br = 60 * mr,
+ _r = 60 * br,
+ xr = 24 * _r,
+ vr = 7 * xr,
+ kr = 30 * xr,
+ wr = 365 * xr,
+ Tr = gr(
+ t => {
+ t.setTime(t - t.getMilliseconds());
+ },
+ (t, e) => {
+ t.setTime(+t + e * mr);
+ },
+ (t, e) => (e - t) / mr,
+ t => t.getUTCSeconds(),
+ );
+ Tr.range;
+ const Cr = gr(
+ t => {
+ t.setTime(t - t.getMilliseconds() - t.getSeconds() * mr);
+ },
+ (t, e) => {
+ t.setTime(+t + e * br);
+ },
+ (t, e) => (e - t) / br,
+ t => t.getMinutes(),
+ );
+ Cr.range;
+ const Er = gr(
+ t => {
+ t.setUTCSeconds(0, 0);
+ },
+ (t, e) => {
+ t.setTime(+t + e * br);
+ },
+ (t, e) => (e - t) / br,
+ t => t.getUTCMinutes(),
+ );
+ Er.range;
+ const Sr = gr(
+ t => {
+ t.setTime(t - t.getMilliseconds() - t.getSeconds() * mr - t.getMinutes() * br);
+ },
+ (t, e) => {
+ t.setTime(+t + e * _r);
+ },
+ (t, e) => (e - t) / _r,
+ t => t.getHours(),
+ );
+ Sr.range;
+ const Ar = gr(
+ t => {
+ t.setUTCMinutes(0, 0, 0);
+ },
+ (t, e) => {
+ t.setTime(+t + e * _r);
+ },
+ (t, e) => (e - t) / _r,
+ t => t.getUTCHours(),
+ );
+ Ar.range;
+ const Dr = gr(
+ t => t.setHours(0, 0, 0, 0),
+ (t, e) => t.setDate(t.getDate() + e),
+ (t, e) => (e - t - (e.getTimezoneOffset() - t.getTimezoneOffset()) * br) / xr,
+ t => t.getDate() - 1,
+ );
+ Dr.range;
+ const Lr = gr(
+ t => {
+ t.setUTCHours(0, 0, 0, 0);
+ },
+ (t, e) => {
+ t.setUTCDate(t.getUTCDate() + e);
+ },
+ (t, e) => (e - t) / xr,
+ t => t.getUTCDate() - 1,
+ );
+ Lr.range;
+ const Or = gr(
+ t => {
+ t.setUTCHours(0, 0, 0, 0);
+ },
+ (t, e) => {
+ t.setUTCDate(t.getUTCDate() + e);
+ },
+ (t, e) => (e - t) / xr,
+ t => Math.floor(t / xr),
+ );
+ function Nr(t) {
+ return gr(e => {
+ e.setDate(e.getDate() - (e.getDay() + 7 - t) % 7), e.setHours(0, 0, 0, 0);
+ }, (t, e) => {
+ t.setDate(t.getDate() + 7 * e);
+ }, (t, e) => (e - t - (e.getTimezoneOffset() - t.getTimezoneOffset()) * br) / vr);
+ }
+ Or.range;
+ const Mr = Nr(0), Br = Nr(1), Ir = Nr(2), Fr = Nr(3), Rr = Nr(4), $r = Nr(5), Pr = Nr(6);
+ function Yr(t) {
+ return gr(e => {
+ e.setUTCDate(e.getUTCDate() - (e.getUTCDay() + 7 - t) % 7), e.setUTCHours(0, 0, 0, 0);
+ }, (t, e) => {
+ t.setUTCDate(t.getUTCDate() + 7 * e);
+ }, (t, e) => (e - t) / vr);
+ }
+ Mr.range, Br.range, Ir.range, Fr.range, Rr.range, $r.range, Pr.range;
+ const jr = Yr(0), zr = Yr(1), Ur = Yr(2), Wr = Yr(3), Hr = Yr(4), qr = Yr(5), Vr = Yr(6);
+ jr.range, zr.range, Ur.range, Wr.range, Hr.range, qr.range, Vr.range;
+ const Gr = gr(
+ t => {
+ t.setDate(1), t.setHours(0, 0, 0, 0);
+ },
+ (t, e) => {
+ t.setMonth(t.getMonth() + e);
+ },
+ (t, e) => e.getMonth() - t.getMonth() + 12 * (e.getFullYear() - t.getFullYear()),
+ t => t.getMonth(),
+ );
+ Gr.range;
+ const Xr = gr(
+ t => {
+ t.setUTCDate(1), t.setUTCHours(0, 0, 0, 0);
+ },
+ (t, e) => {
+ t.setUTCMonth(t.getUTCMonth() + e);
+ },
+ (t, e) => e.getUTCMonth() - t.getUTCMonth() + 12 * (e.getUTCFullYear() - t.getUTCFullYear()),
+ t => t.getUTCMonth(),
+ );
+ Xr.range;
+ const Zr = gr(
+ t => {
+ t.setMonth(0, 1), t.setHours(0, 0, 0, 0);
+ },
+ (t, e) => {
+ t.setFullYear(t.getFullYear() + e);
+ },
+ (t, e) => e.getFullYear() - t.getFullYear(),
+ t => t.getFullYear(),
+ );
+ Zr.every = t =>
+ isFinite(t = Math.floor(t)) && t > 0
+ ? gr(e => {
+ e.setFullYear(Math.floor(e.getFullYear() / t) * t), e.setMonth(0, 1), e.setHours(0, 0, 0, 0);
+ }, (e, n) => {
+ e.setFullYear(e.getFullYear() + n * t);
+ })
+ : null, Zr.range;
+ const Qr = gr(
+ t => {
+ t.setUTCMonth(0, 1), t.setUTCHours(0, 0, 0, 0);
+ },
+ (t, e) => {
+ t.setUTCFullYear(t.getUTCFullYear() + e);
+ },
+ (t, e) => e.getUTCFullYear() - t.getUTCFullYear(),
+ t => t.getUTCFullYear(),
+ );
+ function Kr(t, e, n, i, r, a) {
+ const s = [
+ [Tr, 1, mr],
+ [Tr, 5, 5 * mr],
+ [Tr, 15, 15 * mr],
+ [Tr, 30, 30 * mr],
+ [a, 1, br],
+ [a, 5, 5 * br],
+ [a, 15, 15 * br],
+ [a, 30, 30 * br],
+ [r, 1, _r],
+ [r, 3, 3 * _r],
+ [r, 6, 6 * _r],
+ [r, 12, 12 * _r],
+ [i, 1, xr],
+ [i, 2, 2 * xr],
+ [n, 1, vr],
+ [e, 1, kr],
+ [e, 3, 3 * kr],
+ [t, 1, wr],
+ ];
+ function o(e, n, i) {
+ const r = Math.abs(n - e) / i, a = p(([, , t]) => t).right(s, r);
+ if (a === s.length) return t.every(C(e / wr, n / wr, i));
+ if (0 === a) return yr.every(Math.max(C(e, n, i), 1));
+ const [o, l] = s[r / s[a - 1][2] < s[a][2] / r ? a - 1 : a];
+ return o.every(l);
+ }
+ return [function(t, e, n) {
+ const i = e < t;
+ i && ([t, e] = [e, t]);
+ const r = n && "function" == typeof n.range ? n : o(t, e, n), a = r ? r.range(t, +e + 1) : [];
+ return i ? a.reverse() : a;
+ }, o];
+ }
+ Qr.every = t =>
+ isFinite(t = Math.floor(t)) && t > 0
+ ? gr(e => {
+ e.setUTCFullYear(Math.floor(e.getUTCFullYear() / t) * t), e.setUTCMonth(0, 1), e.setUTCHours(0, 0, 0, 0);
+ }, (e, n) => {
+ e.setUTCFullYear(e.getUTCFullYear() + n * t);
+ })
+ : null,
+ Qr.range,
+ Kr(Qr, Xr, jr, Or, Ar, Er);
+ const [Jr, ta] = Kr(Zr, Gr, Mr, Dr, Sr, Cr);
+ function ea(t) {
+ if (0 <= t.y && t.y < 100) {
+ var e = new Date(-1, t.m, t.d, t.H, t.M, t.S, t.L);
+ return e.setFullYear(t.y), e;
+ }
+ return new Date(t.y, t.m, t.d, t.H, t.M, t.S, t.L);
+ }
+ function na(t) {
+ if (0 <= t.y && t.y < 100) {
+ var e = new Date(Date.UTC(-1, t.m, t.d, t.H, t.M, t.S, t.L));
+ return e.setUTCFullYear(t.y), e;
+ }
+ return new Date(Date.UTC(t.y, t.m, t.d, t.H, t.M, t.S, t.L));
+ }
+ function ia(t, e, n) {
+ return { y: t, m: e, d: n, H: 0, M: 0, S: 0, L: 0 };
+ }
+ var ra, aa, sa = { "-": "", _: " ", 0: "0" }, oa = /^\s*\d+/, la = /^%/, ca = /[\\^$*+?|[\]().{}]/g;
+ function ha(t, e, n) {
+ var i = t < 0 ? "-" : "", r = (i ? -t : t) + "", a = r.length;
+ return i + (a < n ? new Array(n - a + 1).join(e) + r : r);
+ }
+ function ua(t) {
+ return t.replace(ca, "\\$&");
+ }
+ function da(t) {
+ return new RegExp("^(?:" + t.map(ua).join("|") + ")", "i");
+ }
+ function pa(t) {
+ return new Map(t.map((t, e) => [t.toLowerCase(), e]));
+ }
+ function fa(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 1));
+ return i ? (t.w = +i[0], n + i[0].length) : -1;
+ }
+ function ga(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 1));
+ return i ? (t.u = +i[0], n + i[0].length) : -1;
+ }
+ function ya(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.U = +i[0], n + i[0].length) : -1;
+ }
+ function ma(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.V = +i[0], n + i[0].length) : -1;
+ }
+ function ba(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.W = +i[0], n + i[0].length) : -1;
+ }
+ function _a(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 4));
+ return i ? (t.y = +i[0], n + i[0].length) : -1;
+ }
+ function xa(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.y = +i[0] + (+i[0] > 68 ? 1900 : 2e3), n + i[0].length) : -1;
+ }
+ function va(t, e, n) {
+ var i = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n, n + 6));
+ return i ? (t.Z = i[1] ? 0 : -(i[2] + (i[3] || "00")), n + i[0].length) : -1;
+ }
+ function ka(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 1));
+ return i ? (t.q = 3 * i[0] - 3, n + i[0].length) : -1;
+ }
+ function wa(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.m = i[0] - 1, n + i[0].length) : -1;
+ }
+ function Ta(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.d = +i[0], n + i[0].length) : -1;
+ }
+ function Ca(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 3));
+ return i ? (t.m = 0, t.d = +i[0], n + i[0].length) : -1;
+ }
+ function Ea(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.H = +i[0], n + i[0].length) : -1;
+ }
+ function Sa(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.M = +i[0], n + i[0].length) : -1;
+ }
+ function Aa(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 2));
+ return i ? (t.S = +i[0], n + i[0].length) : -1;
+ }
+ function Da(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 3));
+ return i ? (t.L = +i[0], n + i[0].length) : -1;
+ }
+ function La(t, e, n) {
+ var i = oa.exec(e.slice(n, n + 6));
+ return i ? (t.L = Math.floor(i[0] / 1e3), n + i[0].length) : -1;
+ }
+ function Oa(t, e, n) {
+ var i = la.exec(e.slice(n, n + 1));
+ return i ? n + i[0].length : -1;
+ }
+ function Na(t, e, n) {
+ var i = oa.exec(e.slice(n));
+ return i ? (t.Q = +i[0], n + i[0].length) : -1;
+ }
+ function Ma(t, e, n) {
+ var i = oa.exec(e.slice(n));
+ return i ? (t.s = +i[0], n + i[0].length) : -1;
+ }
+ function Ba(t, e) {
+ return ha(t.getDate(), e, 2);
+ }
+ function Ia(t, e) {
+ return ha(t.getHours(), e, 2);
+ }
+ function Fa(t, e) {
+ return ha(t.getHours() % 12 || 12, e, 2);
+ }
+ function Ra(t, e) {
+ return ha(1 + Dr.count(Zr(t), t), e, 3);
+ }
+ function $a(t, e) {
+ return ha(t.getMilliseconds(), e, 3);
+ }
+ function Pa(t, e) {
+ return $a(t, e) + "000";
+ }
+ function Ya(t, e) {
+ return ha(t.getMonth() + 1, e, 2);
+ }
+ function ja(t, e) {
+ return ha(t.getMinutes(), e, 2);
+ }
+ function za(t, e) {
+ return ha(t.getSeconds(), e, 2);
+ }
+ function Ua(t) {
+ var e = t.getDay();
+ return 0 === e ? 7 : e;
+ }
+ function Wa(t, e) {
+ return ha(Mr.count(Zr(t) - 1, t), e, 2);
+ }
+ function Ha(t) {
+ var e = t.getDay();
+ return e >= 4 || 0 === e ? Rr(t) : Rr.ceil(t);
+ }
+ function qa(t, e) {
+ return t = Ha(t), ha(Rr.count(Zr(t), t) + (4 === Zr(t).getDay()), e, 2);
+ }
+ function Va(t) {
+ return t.getDay();
+ }
+ function Ga(t, e) {
+ return ha(Br.count(Zr(t) - 1, t), e, 2);
+ }
+ function Xa(t, e) {
+ return ha(t.getFullYear() % 100, e, 2);
+ }
+ function Za(t, e) {
+ return ha((t = Ha(t)).getFullYear() % 100, e, 2);
+ }
+ function Qa(t, e) {
+ return ha(t.getFullYear() % 1e4, e, 4);
+ }
+ function Ka(t, e) {
+ var n = t.getDay();
+ return ha((t = n >= 4 || 0 === n ? Rr(t) : Rr.ceil(t)).getFullYear() % 1e4, e, 4);
+ }
+ function Ja(t) {
+ var e = t.getTimezoneOffset();
+ return (e > 0 ? "-" : (e *= -1, "+")) + ha(e / 60 | 0, "0", 2) + ha(e % 60, "0", 2);
+ }
+ function ts(t, e) {
+ return ha(t.getUTCDate(), e, 2);
+ }
+ function es(t, e) {
+ return ha(t.getUTCHours(), e, 2);
+ }
+ function ns(t, e) {
+ return ha(t.getUTCHours() % 12 || 12, e, 2);
+ }
+ function is(t, e) {
+ return ha(1 + Lr.count(Qr(t), t), e, 3);
+ }
+ function rs(t, e) {
+ return ha(t.getUTCMilliseconds(), e, 3);
+ }
+ function as(t, e) {
+ return rs(t, e) + "000";
+ }
+ function ss(t, e) {
+ return ha(t.getUTCMonth() + 1, e, 2);
+ }
+ function os(t, e) {
+ return ha(t.getUTCMinutes(), e, 2);
+ }
+ function ls(t, e) {
+ return ha(t.getUTCSeconds(), e, 2);
+ }
+ function cs(t) {
+ var e = t.getUTCDay();
+ return 0 === e ? 7 : e;
+ }
+ function hs(t, e) {
+ return ha(jr.count(Qr(t) - 1, t), e, 2);
+ }
+ function us(t) {
+ var e = t.getUTCDay();
+ return e >= 4 || 0 === e ? Hr(t) : Hr.ceil(t);
+ }
+ function ds(t, e) {
+ return t = us(t), ha(Hr.count(Qr(t), t) + (4 === Qr(t).getUTCDay()), e, 2);
+ }
+ function ps(t) {
+ return t.getUTCDay();
+ }
+ function fs(t, e) {
+ return ha(zr.count(Qr(t) - 1, t), e, 2);
+ }
+ function gs(t, e) {
+ return ha(t.getUTCFullYear() % 100, e, 2);
+ }
+ function ys(t, e) {
+ return ha((t = us(t)).getUTCFullYear() % 100, e, 2);
+ }
+ function ms(t, e) {
+ return ha(t.getUTCFullYear() % 1e4, e, 4);
+ }
+ function bs(t, e) {
+ var n = t.getUTCDay();
+ return ha((t = n >= 4 || 0 === n ? Hr(t) : Hr.ceil(t)).getUTCFullYear() % 1e4, e, 4);
+ }
+ function _s() {
+ return "+0000";
+ }
+ function xs() {
+ return "%";
+ }
+ function vs(t) {
+ return +t;
+ }
+ function ks(t) {
+ return Math.floor(+t / 1e3);
+ }
+ function ws(t) {
+ return new Date(t);
+ }
+ function Ts(t) {
+ return t instanceof Date ? +t : +new Date(+t);
+ }
+ function Cs(t, e, n, i, r, a, s, o, l, c) {
+ var h = cr(),
+ u = h.invert,
+ d = h.domain,
+ p = c(".%L"),
+ f = c(":%S"),
+ g = c("%I:%M"),
+ y = c("%I %p"),
+ m = c("%a %d"),
+ b = c("%b %d"),
+ _ = c("%B"),
+ x = c("%Y");
+ function v(t) {
+ return (l(t) < t
+ ? p
+ : o(t) < t
+ ? f
+ : s(t) < t
+ ? g
+ : a(t) < t
+ ? y
+ : i(t) < t
+ ? r(t) < t ? m : b
+ : n(t) < t
+ ? _
+ : x)(t);
+ }
+ return h.invert = function(t) {
+ return new Date(u(t));
+ },
+ h.domain = function(t) {
+ return arguments.length ? d(Array.from(t, Ts)) : d().map(ws);
+ },
+ h.ticks = function(e) {
+ var n = d();
+ return t(n[0], n[n.length - 1], null == e ? 10 : e);
+ },
+ h.tickFormat = function(t, e) {
+ return null == e ? v : c(e);
+ },
+ h.nice = function(t) {
+ var n = d();
+ return t && "function" == typeof t.range || (t = e(n[0], n[n.length - 1], null == t ? 10 : t)),
+ t
+ ? d(function(t, e) {
+ var n, i = 0, r = (t = t.slice()).length - 1, a = t[i], s = t[r];
+ return s < a && (n = i, i = r, r = n, n = a, a = s, s = n), t[i] = e.floor(a), t[r] = e.ceil(s), t;
+ }(n, t))
+ : h;
+ },
+ h.copy = function() {
+ return or(h, Cs(t, e, n, i, r, a, s, o, l, c));
+ },
+ h;
+ }
+ function Es() {
+ return Ki.apply(
+ Cs(Jr, ta, Zr, Gr, Mr, Dr, Sr, Cr, Tr, aa).domain([new Date(2e3, 0, 1), new Date(2e3, 0, 2)]),
+ arguments,
+ );
+ }
+ function Ss(t) {
+ return function() {
+ return t;
+ };
+ }
+ !function(t) {
+ ra = function(t) {
+ var e = t.dateTime,
+ n = t.date,
+ i = t.time,
+ r = t.periods,
+ a = t.days,
+ s = t.shortDays,
+ o = t.months,
+ l = t.shortMonths,
+ c = da(r),
+ h = pa(r),
+ u = da(a),
+ d = pa(a),
+ p = da(s),
+ f = pa(s),
+ g = da(o),
+ y = pa(o),
+ m = da(l),
+ b = pa(l),
+ _ = {
+ a: function(t) {
+ return s[t.getDay()];
+ },
+ A: function(t) {
+ return a[t.getDay()];
+ },
+ b: function(t) {
+ return l[t.getMonth()];
+ },
+ B: function(t) {
+ return o[t.getMonth()];
+ },
+ c: null,
+ d: Ba,
+ e: Ba,
+ f: Pa,
+ g: Za,
+ G: Ka,
+ H: Ia,
+ I: Fa,
+ j: Ra,
+ L: $a,
+ m: Ya,
+ M: ja,
+ p: function(t) {
+ return r[+(t.getHours() >= 12)];
+ },
+ q: function(t) {
+ return 1 + ~~(t.getMonth() / 3);
+ },
+ Q: vs,
+ s: ks,
+ S: za,
+ u: Ua,
+ U: Wa,
+ V: qa,
+ w: Va,
+ W: Ga,
+ x: null,
+ X: null,
+ y: Xa,
+ Y: Qa,
+ Z: Ja,
+ "%": xs,
+ },
+ x = {
+ a: function(t) {
+ return s[t.getUTCDay()];
+ },
+ A: function(t) {
+ return a[t.getUTCDay()];
+ },
+ b: function(t) {
+ return l[t.getUTCMonth()];
+ },
+ B: function(t) {
+ return o[t.getUTCMonth()];
+ },
+ c: null,
+ d: ts,
+ e: ts,
+ f: as,
+ g: ys,
+ G: bs,
+ H: es,
+ I: ns,
+ j: is,
+ L: rs,
+ m: ss,
+ M: os,
+ p: function(t) {
+ return r[+(t.getUTCHours() >= 12)];
+ },
+ q: function(t) {
+ return 1 + ~~(t.getUTCMonth() / 3);
+ },
+ Q: vs,
+ s: ks,
+ S: ls,
+ u: cs,
+ U: hs,
+ V: ds,
+ w: ps,
+ W: fs,
+ x: null,
+ X: null,
+ y: gs,
+ Y: ms,
+ Z: _s,
+ "%": xs,
+ },
+ v = {
+ a: function(t, e, n) {
+ var i = p.exec(e.slice(n));
+ return i ? (t.w = f.get(i[0].toLowerCase()), n + i[0].length) : -1;
+ },
+ A: function(t, e, n) {
+ var i = u.exec(e.slice(n));
+ return i ? (t.w = d.get(i[0].toLowerCase()), n + i[0].length) : -1;
+ },
+ b: function(t, e, n) {
+ var i = m.exec(e.slice(n));
+ return i ? (t.m = b.get(i[0].toLowerCase()), n + i[0].length) : -1;
+ },
+ B: function(t, e, n) {
+ var i = g.exec(e.slice(n));
+ return i ? (t.m = y.get(i[0].toLowerCase()), n + i[0].length) : -1;
+ },
+ c: function(t, n, i) {
+ return T(t, e, n, i);
+ },
+ d: Ta,
+ e: Ta,
+ f: La,
+ g: xa,
+ G: _a,
+ H: Ea,
+ I: Ea,
+ j: Ca,
+ L: Da,
+ m: wa,
+ M: Sa,
+ p: function(t, e, n) {
+ var i = c.exec(e.slice(n));
+ return i ? (t.p = h.get(i[0].toLowerCase()), n + i[0].length) : -1;
+ },
+ q: ka,
+ Q: Na,
+ s: Ma,
+ S: Aa,
+ u: ga,
+ U: ya,
+ V: ma,
+ w: fa,
+ W: ba,
+ x: function(t, e, i) {
+ return T(t, n, e, i);
+ },
+ X: function(t, e, n) {
+ return T(t, i, e, n);
+ },
+ y: xa,
+ Y: _a,
+ Z: va,
+ "%": Oa,
+ };
+ function k(t, e) {
+ return function(n) {
+ var i, r, a, s = [], o = -1, l = 0, c = t.length;
+ for (n instanceof Date || (n = new Date(+n)); ++o < c;) {
+ 37 === t.charCodeAt(o)
+ && (s.push(t.slice(l, o)),
+ null != (r = sa[i = t.charAt(++o)]) ? i = t.charAt(++o) : r = "e" === i ? " " : "0",
+ (a = e[i]) && (i = a(n, r)),
+ s.push(i),
+ l = o + 1);
+ }
+ return s.push(t.slice(l, o)), s.join("");
+ };
+ }
+ function w(t, e) {
+ return function(n) {
+ var i, r, a = ia(1900, void 0, 1);
+ if (T(a, t, n += "", 0) != n.length) return null;
+ if ("Q" in a) return new Date(a.Q);
+ if ("s" in a) return new Date(1e3 * a.s + ("L" in a ? a.L : 0));
+ if (
+ e && !("Z" in a) && (a.Z = 0),
+ "p" in a && (a.H = a.H % 12 + 12 * a.p),
+ void 0 === a.m && (a.m = "q" in a ? a.q : 0),
+ "V" in a
+ ) {
+ if (a.V < 1 || a.V > 53) return null;
+ "w" in a || (a.w = 1),
+ "Z" in a
+ ? (r = (i = na(ia(a.y, 0, 1))).getUTCDay(),
+ i = r > 4 || 0 === r ? zr.ceil(i) : zr(i),
+ i = Lr.offset(i, 7 * (a.V - 1)),
+ a.y = i.getUTCFullYear(),
+ a.m = i.getUTCMonth(),
+ a.d = i.getUTCDate() + (a.w + 6) % 7)
+ : (r = (i = ea(ia(a.y, 0, 1))).getDay(),
+ i = r > 4 || 0 === r ? Br.ceil(i) : Br(i),
+ i = Dr.offset(i, 7 * (a.V - 1)),
+ a.y = i.getFullYear(),
+ a.m = i.getMonth(),
+ a.d = i.getDate() + (a.w + 6) % 7);
+ } else {("W" in a || "U" in a)
+ && ("w" in a || (a.w = "u" in a ? a.u % 7 : "W" in a ? 1 : 0),
+ r = "Z" in a ? na(ia(a.y, 0, 1)).getUTCDay() : ea(ia(a.y, 0, 1)).getDay(),
+ a.m = 0,
+ a.d = "W" in a ? (a.w + 6) % 7 + 7 * a.W - (r + 5) % 7 : a.w + 7 * a.U - (r + 6) % 7);}
+ return "Z" in a ? (a.H += a.Z / 100 | 0, a.M += a.Z % 100, na(a)) : ea(a);
+ };
+ }
+ function T(t, e, n, i) {
+ for (var r, a, s = 0, o = e.length, l = n.length; s < o;) {
+ if (i >= l) return -1;
+ if (37 === (r = e.charCodeAt(s++))) {
+ if (r = e.charAt(s++), !(a = v[r in sa ? e.charAt(s++) : r]) || (i = a(t, n, i)) < 0) return -1;
+ } else if (r != n.charCodeAt(i++)) return -1;
+ }
+ return i;
+ }
+ return _.x = k(n, _), _.X = k(i, _), _.c = k(e, _), x.x = k(n, x), x.X = k(i, x), x.c = k(e, x), {
+ format: function(t) {
+ var e = k(t += "", _);
+ return e.toString = function() {
+ return t;
+ },
+ e;
+ },
+ parse: function(t) {
+ var e = w(t += "", !1);
+ return e.toString = function() {
+ return t;
+ },
+ e;
+ },
+ utcFormat: function(t) {
+ var e = k(t += "", x);
+ return e.toString = function() {
+ return t;
+ },
+ e;
+ },
+ utcParse: function(t) {
+ var e = w(t += "", !0);
+ return e.toString = function() {
+ return t;
+ },
+ e;
+ },
+ };
+ }(t),
+ aa = ra.format,
+ ra.parse,
+ ra.utcFormat,
+ ra.utcParse;
+ }({
+ dateTime: "%x, %X",
+ date: "%-m/%-d/%Y",
+ time: "%-I:%M:%S %p",
+ periods: ["AM", "PM"],
+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months: [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December",
+ ],
+ shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ });
+ const As = Math.abs,
+ Ds = Math.atan2,
+ Ls = Math.cos,
+ Os = Math.max,
+ Ns = Math.min,
+ Ms = Math.sin,
+ Bs = Math.sqrt,
+ Is = 1e-12,
+ Fs = Math.PI,
+ Rs = Fs / 2,
+ $s = 2 * Fs;
+ function Ps(t) {
+ return t >= 1 ? Rs : t <= -1 ? -Rs : Math.asin(t);
+ }
+ function Ys(t) {
+ let e = 3;
+ return t.digits = function(n) {
+ if (!arguments.length) return e;
+ if (null == n) e = null;
+ else {
+ const t = Math.floor(n);
+ if (!(t >= 0)) throw new RangeError(`invalid digits: ${n}`);
+ e = t;
+ }
+ return t;
+ },
+ () => new Ii(e);
+ }
+ function js(t) {
+ return t.innerRadius;
+ }
+ function zs(t) {
+ return t.outerRadius;
+ }
+ function Us(t) {
+ return t.startAngle;
+ }
+ function Ws(t) {
+ return t.endAngle;
+ }
+ function Hs(t) {
+ return t && t.padAngle;
+ }
+ function qs(t, e, n, i, r, a, s) {
+ var o = t - n,
+ l = e - i,
+ c = (s ? a : -a) / Bs(o * o + l * l),
+ h = c * l,
+ u = -c * o,
+ d = t + h,
+ p = e + u,
+ f = n + h,
+ g = i + u,
+ y = (d + f) / 2,
+ m = (p + g) / 2,
+ b = f - d,
+ _ = g - p,
+ x = b * b + _ * _,
+ v = r - a,
+ k = d * g - f * p,
+ w = (_ < 0 ? -1 : 1) * Bs(Os(0, v * v * x - k * k)),
+ T = (k * _ - b * w) / x,
+ C = (-k * b - _ * w) / x,
+ E = (k * _ + b * w) / x,
+ S = (-k * b + _ * w) / x,
+ A = T - y,
+ D = C - m,
+ L = E - y,
+ O = S - m;
+ return A * A + D * D > L * L + O * O && (T = E, C = S),
+ { cx: T, cy: C, x01: -h, y01: -u, x11: T * (r / v - 1), y11: C * (r / v - 1) };
+ }
+ function Vs() {
+ var t = js, e = zs, n = Ss(0), i = null, r = Us, a = Ws, s = Hs, o = null, l = Ys(c);
+ function c() {
+ var c,
+ h,
+ u = +t.apply(this, arguments),
+ d = +e.apply(this, arguments),
+ p = r.apply(this, arguments) - Rs,
+ f = a.apply(this, arguments) - Rs,
+ g = As(f - p),
+ y = f > p;
+ if (o || (o = c = l()), d < u && (h = d, d = u, u = h), d > Is) {
+ if (g > $s - Is) {
+ o.moveTo(d * Ls(p), d * Ms(p)),
+ o.arc(0, 0, d, p, f, !y),
+ u > Is && (o.moveTo(u * Ls(f), u * Ms(f)), o.arc(0, 0, u, f, p, y));
+ } else {
+ var m,
+ b,
+ _ = p,
+ x = f,
+ v = p,
+ k = f,
+ w = g,
+ T = g,
+ C = s.apply(this, arguments) / 2,
+ E = C > Is && (i ? +i.apply(this, arguments) : Bs(u * u + d * d)),
+ S = Ns(As(d - u) / 2, +n.apply(this, arguments)),
+ A = S,
+ D = S;
+ if (E > Is) {
+ var L = Ps(E / u * Ms(C)), O = Ps(E / d * Ms(C));
+ (w -= 2 * L) > Is ? (v += L *= y ? 1 : -1, k -= L) : (w = 0, v = k = (p + f) / 2),
+ (T -= 2 * O) > Is ? (_ += O *= y ? 1 : -1, x -= O) : (T = 0, _ = x = (p + f) / 2);
+ }
+ var N = d * Ls(_), M = d * Ms(_), B = u * Ls(k), I = u * Ms(k);
+ if (S > Is) {
+ var F, R = d * Ls(x), $ = d * Ms(x), P = u * Ls(v), Y = u * Ms(v);
+ if (g < Fs) {
+ if (
+ F = function(t, e, n, i, r, a, s, o) {
+ var l = n - t, c = i - e, h = s - r, u = o - a, d = u * l - h * c;
+ if (!(d * d < Is)) return [t + (d = (h * (e - a) - u * (t - r)) / d) * l, e + d * c];
+ }(N, M, P, Y, R, $, B, I)
+ ) {
+ var j = N - F[0],
+ z = M - F[1],
+ U = R - F[0],
+ W = $ - F[1],
+ H = 1 / Ms(
+ function(t) {
+ return t > 1 ? 0 : t < -1 ? Fs : Math.acos(t);
+ }((j * U + z * W) / (Bs(j * j + z * z) * Bs(U * U + W * W))) / 2,
+ ),
+ q = Bs(F[0] * F[0] + F[1] * F[1]);
+ A = Ns(S, (u - q) / (H - 1)), D = Ns(S, (d - q) / (H + 1));
+ } else A = D = 0;
+ }
+ }
+ T > Is
+ ? D > Is
+ ? (m = qs(P, Y, N, M, d, D, y),
+ b = qs(R, $, B, I, d, D, y),
+ o.moveTo(m.cx + m.x01, m.cy + m.y01),
+ D < S
+ ? o.arc(m.cx, m.cy, D, Ds(m.y01, m.x01), Ds(b.y01, b.x01), !y)
+ : (o.arc(m.cx, m.cy, D, Ds(m.y01, m.x01), Ds(m.y11, m.x11), !y),
+ o.arc(0, 0, d, Ds(m.cy + m.y11, m.cx + m.x11), Ds(b.cy + b.y11, b.cx + b.x11), !y),
+ o.arc(b.cx, b.cy, D, Ds(b.y11, b.x11), Ds(b.y01, b.x01), !y)))
+ : (o.moveTo(N, M), o.arc(0, 0, d, _, x, !y))
+ : o.moveTo(N, M),
+ u > Is && w > Is
+ ? A > Is
+ ? (m = qs(B, I, R, $, u, -A, y),
+ b = qs(N, M, P, Y, u, -A, y),
+ o.lineTo(m.cx + m.x01, m.cy + m.y01),
+ A < S
+ ? o.arc(m.cx, m.cy, A, Ds(m.y01, m.x01), Ds(b.y01, b.x01), !y)
+ : (o.arc(m.cx, m.cy, A, Ds(m.y01, m.x01), Ds(m.y11, m.x11), !y),
+ o.arc(0, 0, u, Ds(m.cy + m.y11, m.cx + m.x11), Ds(b.cy + b.y11, b.cx + b.x11), y),
+ o.arc(b.cx, b.cy, A, Ds(b.y11, b.x11), Ds(b.y01, b.x01), !y)))
+ : o.arc(0, 0, u, k, v, y)
+ : o.lineTo(B, I);
+ }
+ } else o.moveTo(0, 0);
+ if (o.closePath(), c) return o = null, c + "" || null;
+ }
+ return c.centroid = function() {
+ var n = (+t.apply(this, arguments) + +e.apply(this, arguments)) / 2,
+ i = (+r.apply(this, arguments) + +a.apply(this, arguments)) / 2 - Fs / 2;
+ return [Ls(i) * n, Ms(i) * n];
+ },
+ c.innerRadius = function(e) {
+ return arguments.length ? (t = "function" == typeof e ? e : Ss(+e), c) : t;
+ },
+ c.outerRadius = function(t) {
+ return arguments.length ? (e = "function" == typeof t ? t : Ss(+t), c) : e;
+ },
+ c.cornerRadius = function(t) {
+ return arguments.length ? (n = "function" == typeof t ? t : Ss(+t), c) : n;
+ },
+ c.padRadius = function(t) {
+ return arguments.length ? (i = null == t ? null : "function" == typeof t ? t : Ss(+t), c) : i;
+ },
+ c.startAngle = function(t) {
+ return arguments.length ? (r = "function" == typeof t ? t : Ss(+t), c) : r;
+ },
+ c.endAngle = function(t) {
+ return arguments.length ? (a = "function" == typeof t ? t : Ss(+t), c) : a;
+ },
+ c.padAngle = function(t) {
+ return arguments.length ? (s = "function" == typeof t ? t : Ss(+t), c) : s;
+ },
+ c.context = function(t) {
+ return arguments.length ? (o = null == t ? null : t, c) : o;
+ },
+ c;
+ }
+ function Gs(t) {
+ return "object" == typeof t && "length" in t ? t : Array.from(t);
+ }
+ function Xs(t) {
+ this._context = t;
+ }
+ function Zs(t) {
+ return new Xs(t);
+ }
+ function Qs(t) {
+ return t[0];
+ }
+ function Ks(t) {
+ return t[1];
+ }
+ function Js(t, e) {
+ var n = Ss(!0), i = null, r = Zs, a = null, s = Ys(o);
+ function o(o) {
+ var l, c, h, u = (o = Gs(o)).length, d = !1;
+ for (null == i && (a = r(h = s())), l = 0; l <= u; ++l) {
+ !(l < u && n(c = o[l], l, o)) === d && ((d = !d) ? a.lineStart() : a.lineEnd()),
+ d && a.point(+t(c, l, o), +e(c, l, o));
+ }
+ if (h) return a = null, h + "" || null;
+ }
+ return t = "function" == typeof t ? t : void 0 === t ? Qs : Ss(t),
+ e = "function" == typeof e ? e : void 0 === e ? Ks : Ss(e),
+ o.x = function(e) {
+ return arguments.length ? (t = "function" == typeof e ? e : Ss(+e), o) : t;
+ },
+ o.y = function(t) {
+ return arguments.length ? (e = "function" == typeof t ? t : Ss(+t), o) : e;
+ },
+ o.defined = function(t) {
+ return arguments.length ? (n = "function" == typeof t ? t : Ss(!!t), o) : n;
+ },
+ o.curve = function(t) {
+ return arguments.length ? (r = t, null != i && (a = r(i)), o) : r;
+ },
+ o.context = function(t) {
+ return arguments.length ? (null == t ? i = a = null : a = r(i = t), o) : i;
+ },
+ o;
+ }
+ function to(t, e) {
+ return e < t ? -1 : e > t ? 1 : e >= t ? 0 : NaN;
+ }
+ function eo(t) {
+ return t;
+ }
+ function no() {}
+ function io(t, e, n) {
+ t._context.bezierCurveTo(
+ (2 * t._x0 + t._x1) / 3,
+ (2 * t._y0 + t._y1) / 3,
+ (t._x0 + 2 * t._x1) / 3,
+ (t._y0 + 2 * t._y1) / 3,
+ (t._x0 + 4 * t._x1 + e) / 6,
+ (t._y0 + 4 * t._y1 + n) / 6,
+ );
+ }
+ function ro(t) {
+ this._context = t;
+ }
+ function ao(t) {
+ return new ro(t);
+ }
+ function so(t) {
+ this._context = t;
+ }
+ function oo(t) {
+ this._context = t;
+ }
+ function lo(t) {
+ this._context = t;
+ }
+ function co(t) {
+ return t < 0 ? -1 : 1;
+ }
+ function ho(t, e, n) {
+ var i = t._x1 - t._x0,
+ r = e - t._x1,
+ a = (t._y1 - t._y0) / (i || r < 0 && -0),
+ s = (n - t._y1) / (r || i < 0 && -0),
+ o = (a * r + s * i) / (i + r);
+ return (co(a) + co(s)) * Math.min(Math.abs(a), Math.abs(s), .5 * Math.abs(o)) || 0;
+ }
+ function uo(t, e) {
+ var n = t._x1 - t._x0;
+ return n ? (3 * (t._y1 - t._y0) / n - e) / 2 : e;
+ }
+ function po(t, e, n) {
+ var i = t._x0, r = t._y0, a = t._x1, s = t._y1, o = (a - i) / 3;
+ t._context.bezierCurveTo(i + o, r + o * e, a - o, s - o * n, a, s);
+ }
+ function fo(t) {
+ this._context = t;
+ }
+ function go(t) {
+ this._context = new yo(t);
+ }
+ function yo(t) {
+ this._context = t;
+ }
+ function mo(t) {
+ this._context = t;
+ }
+ function bo(t) {
+ var e, n, i = t.length - 1, r = new Array(i), a = new Array(i), s = new Array(i);
+ for (r[0] = 0, a[0] = 2, s[0] = t[0] + 2 * t[1], e = 1; e < i - 1; ++e) {
+ r[e] = 1, a[e] = 4, s[e] = 4 * t[e] + 2 * t[e + 1];
+ }
+ for (r[i - 1] = 2, a[i - 1] = 7, s[i - 1] = 8 * t[i - 1] + t[i], e = 1; e < i; ++e) {
+ n = r[e] / a[e - 1], a[e] -= n, s[e] -= n * s[e - 1];
+ }
+ for (r[i - 1] = s[i - 1] / a[i - 1], e = i - 2; e >= 0; --e) r[e] = (s[e] - r[e + 1]) / a[e];
+ for (a[i - 1] = (t[i] + r[i - 1]) / 2, e = 0; e < i - 1; ++e) a[e] = 2 * t[e + 1] - r[e + 1];
+ return [r, a];
+ }
+ function _o(t, e) {
+ this._context = t, this._t = e;
+ }
+ function xo(t, e, n) {
+ this.k = t, this.x = e, this.y = n;
+ }
+ /*! @license DOMPurify 2.4.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.1/LICENSE */
+ function vo(t) {
+ return vo = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator
+ ? function(t) {
+ return typeof t;
+ }
+ : function(t) {
+ return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype
+ ? "symbol"
+ : typeof t;
+ },
+ vo(t);
+ }
+ function ko(t, e) {
+ return ko = Object.setPrototypeOf || function(t, e) {
+ return t.__proto__ = e, t;
+ },
+ ko(t, e);
+ }
+ function wo(t, e, n) {
+ return wo = (function() {
+ if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
+ if (Reflect.construct.sham) return !1;
+ if ("function" == typeof Proxy) return !0;
+ try {
+ return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {})), !0;
+ } catch (t) {
+ return !1;
+ }
+ })()
+ ? Reflect.construct
+ : function(t, e, n) {
+ var i = [null];
+ i.push.apply(i, e);
+ var r = new (Function.bind.apply(t, i))();
+ return n && ko(r, n.prototype), r;
+ },
+ wo.apply(null, arguments);
+ }
+ function To(t) {
+ return function(t) {
+ if (Array.isArray(t)) return Co(t);
+ }(t) || function(t) {
+ if ("undefined" != typeof Symbol && null != t[Symbol.iterator] || null != t["@@iterator"]) return Array.from(t);
+ }(t) || function(t, e) {
+ if (!t) return;
+ if ("string" == typeof t) return Co(t, e);
+ var n = Object.prototype.toString.call(t).slice(8, -1);
+ "Object" === n && t.constructor && (n = t.constructor.name);
+ if ("Map" === n || "Set" === n) return Array.from(t);
+ if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Co(t, e);
+ }(t) || function() {
+ throw new TypeError(
+ "Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.",
+ );
+ }();
+ }
+ function Co(t, e) {
+ (null == e || e > t.length) && (e = t.length);
+ for (var n = 0, i = new Array(e); n < e; n++) i[n] = t[n];
+ return i;
+ }
+ Xs.prototype = {
+ areaStart: function() {
+ this._line = 0;
+ },
+ areaEnd: function() {
+ this._line = NaN;
+ },
+ lineStart: function() {
+ this._point = 0;
+ },
+ lineEnd: function() {
+ (this._line || 0 !== this._line && 1 === this._point) && this._context.closePath(), this._line = 1 - this._line;
+ },
+ point: function(t, e) {
+ switch (t = +t, e = +e, this._point) {
+ case 0:
+ this._point = 1, this._line ? this._context.lineTo(t, e) : this._context.moveTo(t, e);
+ break;
+ case 1:
+ this._point = 2;
+ default:
+ this._context.lineTo(t, e);
+ }
+ },
+ },
+ ro.prototype = {
+ areaStart: function() {
+ this._line = 0;
+ },
+ areaEnd: function() {
+ this._line = NaN;
+ },
+ lineStart: function() {
+ this._x0 =
+ this._x1 =
+ this._y0 =
+ this._y1 =
+ NaN, this._point = 0;
+ },
+ lineEnd: function() {
+ switch (this._point) {
+ case 3:
+ io(this, this._x1, this._y1);
+ case 2:
+ this._context.lineTo(this._x1, this._y1);
+ }
+ (this._line || 0 !== this._line && 1 === this._point) && this._context.closePath(), this._line = 1 - this._line;
+ },
+ point: function(t, e) {
+ switch (t = +t, e = +e, this._point) {
+ case 0:
+ this._point = 1, this._line ? this._context.lineTo(t, e) : this._context.moveTo(t, e);
+ break;
+ case 1:
+ this._point = 2;
+ break;
+ case 2:
+ this._point = 3, this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6);
+ default:
+ io(this, t, e);
+ }
+ this._x0 = this._x1, this._x1 = t, this._y0 = this._y1, this._y1 = e;
+ },
+ },
+ so.prototype = {
+ areaStart: no,
+ areaEnd: no,
+ lineStart: function() {
+ this._x0 =
+ this._x1 =
+ this._x2 =
+ this._x3 =
+ this._x4 =
+ this._y0 =
+ this._y1 =
+ this._y2 =
+ this._y3 =
+ this._y4 =
+ NaN, this._point = 0;
+ },
+ lineEnd: function() {
+ switch (this._point) {
+ case 1:
+ this._context.moveTo(this._x2, this._y2), this._context.closePath();
+ break;
+ case 2:
+ this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3),
+ this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3),
+ this._context.closePath();
+ break;
+ case 3:
+ this.point(this._x2, this._y2), this.point(this._x3, this._y3), this.point(this._x4, this._y4);
+ }
+ },
+ point: function(t, e) {
+ switch (t = +t, e = +e, this._point) {
+ case 0:
+ this._point = 1, this._x2 = t, this._y2 = e;
+ break;
+ case 1:
+ this._point = 2, this._x3 = t, this._y3 = e;
+ break;
+ case 2:
+ this._point = 3,
+ this._x4 = t,
+ this._y4 = e,
+ this._context.moveTo((this._x0 + 4 * this._x1 + t) / 6, (this._y0 + 4 * this._y1 + e) / 6);
+ break;
+ default:
+ io(this, t, e);
+ }
+ this._x0 = this._x1, this._x1 = t, this._y0 = this._y1, this._y1 = e;
+ },
+ },
+ oo.prototype = {
+ areaStart: function() {
+ this._line = 0;
+ },
+ areaEnd: function() {
+ this._line = NaN;
+ },
+ lineStart: function() {
+ this._x0 =
+ this._x1 =
+ this._y0 =
+ this._y1 =
+ NaN, this._point = 0;
+ },
+ lineEnd: function() {
+ (this._line || 0 !== this._line && 3 === this._point) && this._context.closePath(), this._line = 1 - this._line;
+ },
+ point: function(t, e) {
+ switch (t = +t, e = +e, this._point) {
+ case 0:
+ this._point = 1;
+ break;
+ case 1:
+ this._point = 2;
+ break;
+ case 2:
+ this._point = 3;
+ var n = (this._x0 + 4 * this._x1 + t) / 6, i = (this._y0 + 4 * this._y1 + e) / 6;
+ this._line ? this._context.lineTo(n, i) : this._context.moveTo(n, i);
+ break;
+ case 3:
+ this._point = 4;
+ default:
+ io(this, t, e);
+ }
+ this._x0 = this._x1, this._x1 = t, this._y0 = this._y1, this._y1 = e;
+ },
+ },
+ lo.prototype = {
+ areaStart: no,
+ areaEnd: no,
+ lineStart: function() {
+ this._point = 0;
+ },
+ lineEnd: function() {
+ this._point && this._context.closePath();
+ },
+ point: function(t, e) {
+ t = +t, e = +e, this._point ? this._context.lineTo(t, e) : (this._point = 1, this._context.moveTo(t, e));
+ },
+ },
+ fo.prototype = {
+ areaStart: function() {
+ this._line = 0;
+ },
+ areaEnd: function() {
+ this._line = NaN;
+ },
+ lineStart: function() {
+ this._x0 =
+ this._x1 =
+ this._y0 =
+ this._y1 =
+ this._t0 =
+ NaN, this._point = 0;
+ },
+ lineEnd: function() {
+ switch (this._point) {
+ case 2:
+ this._context.lineTo(this._x1, this._y1);
+ break;
+ case 3:
+ po(this, this._t0, uo(this, this._t0));
+ }
+ (this._line || 0 !== this._line && 1 === this._point) && this._context.closePath(), this._line = 1 - this._line;
+ },
+ point: function(t, e) {
+ var n = NaN;
+ if (e = +e, (t = +t) !== this._x1 || e !== this._y1) {
+ switch (this._point) {
+ case 0:
+ this._point = 1, this._line ? this._context.lineTo(t, e) : this._context.moveTo(t, e);
+ break;
+ case 1:
+ this._point = 2;
+ break;
+ case 2:
+ this._point = 3, po(this, uo(this, n = ho(this, t, e)), n);
+ break;
+ default:
+ po(this, this._t0, n = ho(this, t, e));
+ }
+ this._x0 = this._x1, this._x1 = t, this._y0 = this._y1, this._y1 = e, this._t0 = n;
+ }
+ },
+ },
+ (go.prototype = Object.create(fo.prototype)).point = function(t, e) {
+ fo.prototype.point.call(this, e, t);
+ },
+ yo.prototype = {
+ moveTo: function(t, e) {
+ this._context.moveTo(e, t);
+ },
+ closePath: function() {
+ this._context.closePath();
+ },
+ lineTo: function(t, e) {
+ this._context.lineTo(e, t);
+ },
+ bezierCurveTo: function(t, e, n, i, r, a) {
+ this._context.bezierCurveTo(e, t, i, n, a, r);
+ },
+ },
+ mo.prototype = {
+ areaStart: function() {
+ this._line = 0;
+ },
+ areaEnd: function() {
+ this._line = NaN;
+ },
+ lineStart: function() {
+ this._x = [], this._y = [];
+ },
+ lineEnd: function() {
+ var t = this._x, e = this._y, n = t.length;
+ if (n) {
+ if (this._line ? this._context.lineTo(t[0], e[0]) : this._context.moveTo(t[0], e[0]), 2 === n) {
+ this._context.lineTo(t[1], e[1]);
+ } else {for (var i = bo(t), r = bo(e), a = 0, s = 1; s < n; ++a, ++s) {
+ this._context.bezierCurveTo(i[0][a], r[0][a], i[1][a], r[1][a], t[s], e[s]);
+ }}
+ }
+ (this._line || 0 !== this._line && 1 === n) && this._context.closePath(),
+ this._line = 1 - this._line,
+ this._x = this._y = null;
+ },
+ point: function(t, e) {
+ this._x.push(+t), this._y.push(+e);
+ },
+ },
+ _o.prototype = {
+ areaStart: function() {
+ this._line = 0;
+ },
+ areaEnd: function() {
+ this._line = NaN;
+ },
+ lineStart: function() {
+ this._x = this._y = NaN, this._point = 0;
+ },
+ lineEnd: function() {
+ 0 < this._t && this._t < 1 && 2 === this._point && this._context.lineTo(this._x, this._y),
+ (this._line || 0 !== this._line && 1 === this._point) && this._context.closePath(),
+ this._line >= 0 && (this._t = 1 - this._t, this._line = 1 - this._line);
+ },
+ point: function(t, e) {
+ switch (t = +t, e = +e, this._point) {
+ case 0:
+ this._point = 1, this._line ? this._context.lineTo(t, e) : this._context.moveTo(t, e);
+ break;
+ case 1:
+ this._point = 2;
+ default:
+ if (this._t <= 0) {
+ this._context.lineTo(this._x, e), this._context.lineTo(t, e);
+ } else {
+ var n = this._x * (1 - this._t) + t * this._t;
+ this._context.lineTo(n, this._y), this._context.lineTo(n, e);
+ }
+ }
+ this._x = t, this._y = e;
+ },
+ },
+ xo.prototype = {
+ constructor: xo,
+ scale: function(t) {
+ return 1 === t ? this : new xo(this.k * t, this.x, this.y);
+ },
+ translate: function(t, e) {
+ return 0 === t & 0 === e ? this : new xo(this.k, this.x + this.k * t, this.y + this.k * e);
+ },
+ apply: function(t) {
+ return [t[0] * this.k + this.x, t[1] * this.k + this.y];
+ },
+ applyX: function(t) {
+ return t * this.k + this.x;
+ },
+ applyY: function(t) {
+ return t * this.k + this.y;
+ },
+ invert: function(t) {
+ return [(t[0] - this.x) / this.k, (t[1] - this.y) / this.k];
+ },
+ invertX: function(t) {
+ return (t - this.x) / this.k;
+ },
+ invertY: function(t) {
+ return (t - this.y) / this.k;
+ },
+ rescaleX: function(t) {
+ return t.copy().domain(t.range().map(this.invertX, this).map(t.invert, t));
+ },
+ rescaleY: function(t) {
+ return t.copy().domain(t.range().map(this.invertY, this).map(t.invert, t));
+ },
+ toString: function() {
+ return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
+ },
+ },
+ new xo(1, 0, 0),
+ xo.prototype;
+ var Eo = Object.hasOwnProperty,
+ So = Object.setPrototypeOf,
+ Ao = Object.isFrozen,
+ Do = Object.getPrototypeOf,
+ Lo = Object.getOwnPropertyDescriptor,
+ Oo = Object.freeze,
+ No = Object.seal,
+ Mo = Object.create,
+ Bo = "undefined" != typeof Reflect && Reflect,
+ Io = Bo.apply,
+ Fo = Bo.construct;
+ Io || (Io = function(t, e, n) {
+ return t.apply(e, n);
+ }),
+ Oo || (Oo = function(t) {
+ return t;
+ }),
+ No || (No = function(t) {
+ return t;
+ }),
+ Fo || (Fo = function(t, e) {
+ return wo(t, To(e));
+ });
+ var Ro,
+ $o = Xo(Array.prototype.forEach),
+ Po = Xo(Array.prototype.pop),
+ Yo = Xo(Array.prototype.push),
+ jo = Xo(String.prototype.toLowerCase),
+ zo = Xo(String.prototype.toString),
+ Uo = Xo(String.prototype.match),
+ Wo = Xo(String.prototype.replace),
+ Ho = Xo(String.prototype.indexOf),
+ qo = Xo(String.prototype.trim),
+ Vo = Xo(RegExp.prototype.test),
+ Go = (Ro = TypeError, function() {
+ for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) {
+ e[n] = arguments[n];
+ }
+ return Fo(Ro, e);
+ });
+ function Xo(t) {
+ return function(e) {
+ for (var n = arguments.length, i = new Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) {
+ i[r - 1] = arguments[r];
+ }
+ return Io(t, e, i);
+ };
+ }
+ function Zo(t, e, n) {
+ n = n || jo, So && So(t, null);
+ for (var i = e.length; i--;) {
+ var r = e[i];
+ if ("string" == typeof r) {
+ var a = n(r);
+ a !== r && (Ao(e) || (e[i] = a), r = a);
+ }
+ t[r] = !0;
+ }
+ return t;
+ }
+ function Qo(t) {
+ var e, n = Mo(null);
+ for (e in t) Io(Eo, t, [e]) && (n[e] = t[e]);
+ return n;
+ }
+ function Ko(t, e) {
+ for (; null !== t;) {
+ var n = Lo(t, e);
+ if (n) {
+ if (n.get) return Xo(n.get);
+ if ("function" == typeof n.value) return Xo(n.value);
+ }
+ t = Do(t);
+ }
+ return function(t) {
+ return console.warn("fallback value for", t), null;
+ };
+ }
+ var Jo = Oo([
+ "a",
+ "abbr",
+ "acronym",
+ "address",
+ "area",
+ "article",
+ "aside",
+ "audio",
+ "b",
+ "bdi",
+ "bdo",
+ "big",
+ "blink",
+ "blockquote",
+ "body",
+ "br",
+ "button",
+ "canvas",
+ "caption",
+ "center",
+ "cite",
+ "code",
+ "col",
+ "colgroup",
+ "content",
+ "data",
+ "datalist",
+ "dd",
+ "decorator",
+ "del",
+ "details",
+ "dfn",
+ "dialog",
+ "dir",
+ "div",
+ "dl",
+ "dt",
+ "element",
+ "em",
+ "fieldset",
+ "figcaption",
+ "figure",
+ "font",
+ "footer",
+ "form",
+ "h1",
+ "h2",
+ "h3",
+ "h4",
+ "h5",
+ "h6",
+ "head",
+ "header",
+ "hgroup",
+ "hr",
+ "html",
+ "i",
+ "img",
+ "input",
+ "ins",
+ "kbd",
+ "label",
+ "legend",
+ "li",
+ "main",
+ "map",
+ "mark",
+ "marquee",
+ "menu",
+ "menuitem",
+ "meter",
+ "nav",
+ "nobr",
+ "ol",
+ "optgroup",
+ "option",
+ "output",
+ "p",
+ "picture",
+ "pre",
+ "progress",
+ "q",
+ "rp",
+ "rt",
+ "ruby",
+ "s",
+ "samp",
+ "section",
+ "select",
+ "shadow",
+ "small",
+ "source",
+ "spacer",
+ "span",
+ "strike",
+ "strong",
+ "style",
+ "sub",
+ "summary",
+ "sup",
+ "table",
+ "tbody",
+ "td",
+ "template",
+ "textarea",
+ "tfoot",
+ "th",
+ "thead",
+ "time",
+ "tr",
+ "track",
+ "tt",
+ "u",
+ "ul",
+ "var",
+ "video",
+ "wbr",
+ ]),
+ tl = Oo([
+ "svg",
+ "a",
+ "altglyph",
+ "altglyphdef",
+ "altglyphitem",
+ "animatecolor",
+ "animatemotion",
+ "animatetransform",
+ "circle",
+ "clippath",
+ "defs",
+ "desc",
+ "ellipse",
+ "filter",
+ "font",
+ "g",
+ "glyph",
+ "glyphref",
+ "hkern",
+ "image",
+ "line",
+ "lineargradient",
+ "marker",
+ "mask",
+ "metadata",
+ "mpath",
+ "path",
+ "pattern",
+ "polygon",
+ "polyline",
+ "radialgradient",
+ "rect",
+ "stop",
+ "style",
+ "switch",
+ "symbol",
+ "text",
+ "textpath",
+ "title",
+ "tref",
+ "tspan",
+ "view",
+ "vkern",
+ ]),
+ el = Oo([
+ "feBlend",
+ "feColorMatrix",
+ "feComponentTransfer",
+ "feComposite",
+ "feConvolveMatrix",
+ "feDiffuseLighting",
+ "feDisplacementMap",
+ "feDistantLight",
+ "feFlood",
+ "feFuncA",
+ "feFuncB",
+ "feFuncG",
+ "feFuncR",
+ "feGaussianBlur",
+ "feImage",
+ "feMerge",
+ "feMergeNode",
+ "feMorphology",
+ "feOffset",
+ "fePointLight",
+ "feSpecularLighting",
+ "feSpotLight",
+ "feTile",
+ "feTurbulence",
+ ]),
+ nl = Oo([
+ "animate",
+ "color-profile",
+ "cursor",
+ "discard",
+ "fedropshadow",
+ "font-face",
+ "font-face-format",
+ "font-face-name",
+ "font-face-src",
+ "font-face-uri",
+ "foreignobject",
+ "hatch",
+ "hatchpath",
+ "mesh",
+ "meshgradient",
+ "meshpatch",
+ "meshrow",
+ "missing-glyph",
+ "script",
+ "set",
+ "solidcolor",
+ "unknown",
+ "use",
+ ]),
+ il = Oo([
+ "math",
+ "menclose",
+ "merror",
+ "mfenced",
+ "mfrac",
+ "mglyph",
+ "mi",
+ "mlabeledtr",
+ "mmultiscripts",
+ "mn",
+ "mo",
+ "mover",
+ "mpadded",
+ "mphantom",
+ "mroot",
+ "mrow",
+ "ms",
+ "mspace",
+ "msqrt",
+ "mstyle",
+ "msub",
+ "msup",
+ "msubsup",
+ "mtable",
+ "mtd",
+ "mtext",
+ "mtr",
+ "munder",
+ "munderover",
+ ]),
+ rl = Oo([
+ "maction",
+ "maligngroup",
+ "malignmark",
+ "mlongdiv",
+ "mscarries",
+ "mscarry",
+ "msgroup",
+ "mstack",
+ "msline",
+ "msrow",
+ "semantics",
+ "annotation",
+ "annotation-xml",
+ "mprescripts",
+ "none",
+ ]),
+ al = Oo(["#text"]),
+ sl = Oo([
+ "accept",
+ "action",
+ "align",
+ "alt",
+ "autocapitalize",
+ "autocomplete",
+ "autopictureinpicture",
+ "autoplay",
+ "background",
+ "bgcolor",
+ "border",
+ "capture",
+ "cellpadding",
+ "cellspacing",
+ "checked",
+ "cite",
+ "class",
+ "clear",
+ "color",
+ "cols",
+ "colspan",
+ "controls",
+ "controlslist",
+ "coords",
+ "crossorigin",
+ "datetime",
+ "decoding",
+ "default",
+ "dir",
+ "disabled",
+ "disablepictureinpicture",
+ "disableremoteplayback",
+ "download",
+ "draggable",
+ "enctype",
+ "enterkeyhint",
+ "face",
+ "for",
+ "headers",
+ "height",
+ "hidden",
+ "high",
+ "href",
+ "hreflang",
+ "id",
+ "inputmode",
+ "integrity",
+ "ismap",
+ "kind",
+ "label",
+ "lang",
+ "list",
+ "loading",
+ "loop",
+ "low",
+ "max",
+ "maxlength",
+ "media",
+ "method",
+ "min",
+ "minlength",
+ "multiple",
+ "muted",
+ "name",
+ "nonce",
+ "noshade",
+ "novalidate",
+ "nowrap",
+ "open",
+ "optimum",
+ "pattern",
+ "placeholder",
+ "playsinline",
+ "poster",
+ "preload",
+ "pubdate",
+ "radiogroup",
+ "readonly",
+ "rel",
+ "required",
+ "rev",
+ "reversed",
+ "role",
+ "rows",
+ "rowspan",
+ "spellcheck",
+ "scope",
+ "selected",
+ "shape",
+ "size",
+ "sizes",
+ "span",
+ "srclang",
+ "start",
+ "src",
+ "srcset",
+ "step",
+ "style",
+ "summary",
+ "tabindex",
+ "title",
+ "translate",
+ "type",
+ "usemap",
+ "valign",
+ "value",
+ "width",
+ "xmlns",
+ "slot",
+ ]),
+ ol = Oo([
+ "accent-height",
+ "accumulate",
+ "additive",
+ "alignment-baseline",
+ "ascent",
+ "attributename",
+ "attributetype",
+ "azimuth",
+ "basefrequency",
+ "baseline-shift",
+ "begin",
+ "bias",
+ "by",
+ "class",
+ "clip",
+ "clippathunits",
+ "clip-path",
+ "clip-rule",
+ "color",
+ "color-interpolation",
+ "color-interpolation-filters",
+ "color-profile",
+ "color-rendering",
+ "cx",
+ "cy",
+ "d",
+ "dx",
+ "dy",
+ "diffuseconstant",
+ "direction",
+ "display",
+ "divisor",
+ "dur",
+ "edgemode",
+ "elevation",
+ "end",
+ "fill",
+ "fill-opacity",
+ "fill-rule",
+ "filter",
+ "filterunits",
+ "flood-color",
+ "flood-opacity",
+ "font-family",
+ "font-size",
+ "font-size-adjust",
+ "font-stretch",
+ "font-style",
+ "font-variant",
+ "font-weight",
+ "fx",
+ "fy",
+ "g1",
+ "g2",
+ "glyph-name",
+ "glyphref",
+ "gradientunits",
+ "gradienttransform",
+ "height",
+ "href",
+ "id",
+ "image-rendering",
+ "in",
+ "in2",
+ "k",
+ "k1",
+ "k2",
+ "k3",
+ "k4",
+ "kerning",
+ "keypoints",
+ "keysplines",
+ "keytimes",
+ "lang",
+ "lengthadjust",
+ "letter-spacing",
+ "kernelmatrix",
+ "kernelunitlength",
+ "lighting-color",
+ "local",
+ "marker-end",
+ "marker-mid",
+ "marker-start",
+ "markerheight",
+ "markerunits",
+ "markerwidth",
+ "maskcontentunits",
+ "maskunits",
+ "max",
+ "mask",
+ "media",
+ "method",
+ "mode",
+ "min",
+ "name",
+ "numoctaves",
+ "offset",
+ "operator",
+ "opacity",
+ "order",
+ "orient",
+ "orientation",
+ "origin",
+ "overflow",
+ "paint-order",
+ "path",
+ "pathlength",
+ "patterncontentunits",
+ "patterntransform",
+ "patternunits",
+ "points",
+ "preservealpha",
+ "preserveaspectratio",
+ "primitiveunits",
+ "r",
+ "rx",
+ "ry",
+ "radius",
+ "refx",
+ "refy",
+ "repeatcount",
+ "repeatdur",
+ "restart",
+ "result",
+ "rotate",
+ "scale",
+ "seed",
+ "shape-rendering",
+ "specularconstant",
+ "specularexponent",
+ "spreadmethod",
+ "startoffset",
+ "stddeviation",
+ "stitchtiles",
+ "stop-color",
+ "stop-opacity",
+ "stroke-dasharray",
+ "stroke-dashoffset",
+ "stroke-linecap",
+ "stroke-linejoin",
+ "stroke-miterlimit",
+ "stroke-opacity",
+ "stroke",
+ "stroke-width",
+ "style",
+ "surfacescale",
+ "systemlanguage",
+ "tabindex",
+ "targetx",
+ "targety",
+ "transform",
+ "transform-origin",
+ "text-anchor",
+ "text-decoration",
+ "text-rendering",
+ "textlength",
+ "type",
+ "u1",
+ "u2",
+ "unicode",
+ "values",
+ "viewbox",
+ "visibility",
+ "version",
+ "vert-adv-y",
+ "vert-origin-x",
+ "vert-origin-y",
+ "width",
+ "word-spacing",
+ "wrap",
+ "writing-mode",
+ "xchannelselector",
+ "ychannelselector",
+ "x",
+ "x1",
+ "x2",
+ "xmlns",
+ "y",
+ "y1",
+ "y2",
+ "z",
+ "zoomandpan",
+ ]),
+ ll = Oo([
+ "accent",
+ "accentunder",
+ "align",
+ "bevelled",
+ "close",
+ "columnsalign",
+ "columnlines",
+ "columnspan",
+ "denomalign",
+ "depth",
+ "dir",
+ "display",
+ "displaystyle",
+ "encoding",
+ "fence",
+ "frame",
+ "height",
+ "href",
+ "id",
+ "largeop",
+ "length",
+ "linethickness",
+ "lspace",
+ "lquote",
+ "mathbackground",
+ "mathcolor",
+ "mathsize",
+ "mathvariant",
+ "maxsize",
+ "minsize",
+ "movablelimits",
+ "notation",
+ "numalign",
+ "open",
+ "rowalign",
+ "rowlines",
+ "rowspacing",
+ "rowspan",
+ "rspace",
+ "rquote",
+ "scriptlevel",
+ "scriptminsize",
+ "scriptsizemultiplier",
+ "selection",
+ "separator",
+ "separators",
+ "stretchy",
+ "subscriptshift",
+ "supscriptshift",
+ "symmetric",
+ "voffset",
+ "width",
+ "xmlns",
+ ]),
+ cl = Oo(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]),
+ hl = No(/\{\{[\w\W]*|[\w\W]*\}\}/gm),
+ ul = No(/<%[\w\W]*|[\w\W]*%>/gm),
+ dl = No(/\${[\w\W]*}/gm),
+ pl = No(/^data-[\-\w.\u00B7-\uFFFF]/),
+ fl = No(/^aria-[\-\w]+$/),
+ gl = No(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),
+ yl = No(/^(?:\w+script|data):/i),
+ ml = No(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),
+ bl = No(/^html$/i),
+ _l = function() {
+ return "undefined" == typeof window ? null : window;
+ },
+ xl = function(t, e) {
+ if ("object" !== vo(t) || "function" != typeof t.createPolicy) return null;
+ var n = null, i = "data-tt-policy-suffix";
+ e.currentScript && e.currentScript.hasAttribute(i) && (n = e.currentScript.getAttribute(i));
+ var r = "dompurify" + (n ? "#" + n : "");
+ try {
+ return t.createPolicy(r, {
+ createHTML: function(t) {
+ return t;
+ },
+ createScriptURL: function(t) {
+ return t;
+ },
+ });
+ } catch (t) {
+ return console.warn("TrustedTypes policy " + r + " could not be created."), null;
+ }
+ };
+ var vl = function t() {
+ var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : _l(),
+ n = function(e) {
+ return t(e);
+ };
+ if (n.version = "2.4.1", n.removed = [], !e || !e.document || 9 !== e.document.nodeType) {
+ return n.isSupported = !1, n;
+ }
+ var i = e.document,
+ r = e.document,
+ a = e.DocumentFragment,
+ s = e.HTMLTemplateElement,
+ o = e.Node,
+ l = e.Element,
+ c = e.NodeFilter,
+ h = e.NamedNodeMap,
+ u = void 0 === h ? e.NamedNodeMap || e.MozNamedAttrMap : h,
+ d = e.HTMLFormElement,
+ p = e.DOMParser,
+ f = e.trustedTypes,
+ g = l.prototype,
+ y = Ko(g, "cloneNode"),
+ m = Ko(g, "nextSibling"),
+ b = Ko(g, "childNodes"),
+ _ = Ko(g, "parentNode");
+ if ("function" == typeof s) {
+ var x = r.createElement("template");
+ x.content && x.content.ownerDocument && (r = x.content.ownerDocument);
+ }
+ var v = xl(f, i),
+ k = v ? v.createHTML("") : "",
+ w = r,
+ T = w.implementation,
+ C = w.createNodeIterator,
+ E = w.createDocumentFragment,
+ S = w.getElementsByTagName,
+ A = i.importNode,
+ D = {};
+ try {
+ D = Qo(r).documentMode ? r.documentMode : {};
+ } catch (t) {}
+ var L = {};
+ n.isSupported = "function" == typeof _ && T && void 0 !== T.createHTMLDocument && 9 !== D;
+ var O,
+ N,
+ M = hl,
+ B = ul,
+ I = dl,
+ F = pl,
+ R = fl,
+ $ = yl,
+ P = ml,
+ Y = gl,
+ j = null,
+ z = Zo({}, [].concat(To(Jo), To(tl), To(el), To(il), To(al))),
+ U = null,
+ W = Zo({}, [].concat(To(sl), To(ol), To(ll), To(cl))),
+ H = Object.seal(
+ Object.create(null, {
+ tagNameCheck: { writable: !0, configurable: !1, enumerable: !0, value: null },
+ attributeNameCheck: { writable: !0, configurable: !1, enumerable: !0, value: null },
+ allowCustomizedBuiltInElements: { writable: !0, configurable: !1, enumerable: !0, value: !1 },
+ }),
+ ),
+ q = null,
+ V = null,
+ G = !0,
+ X = !0,
+ Z = !1,
+ Q = !1,
+ K = !1,
+ J = !1,
+ tt = !1,
+ et = !1,
+ nt = !1,
+ it = !1,
+ rt = !0,
+ at = !1,
+ st = !0,
+ ot = !1,
+ lt = {},
+ ct = null,
+ ht = Zo({}, [
+ "annotation-xml",
+ "audio",
+ "colgroup",
+ "desc",
+ "foreignobject",
+ "head",
+ "iframe",
+ "math",
+ "mi",
+ "mn",
+ "mo",
+ "ms",
+ "mtext",
+ "noembed",
+ "noframes",
+ "noscript",
+ "plaintext",
+ "script",
+ "style",
+ "svg",
+ "template",
+ "thead",
+ "title",
+ "video",
+ "xmp",
+ ]),
+ ut = null,
+ dt = Zo({}, ["audio", "video", "img", "source", "image", "track"]),
+ pt = null,
+ ft = Zo({}, [
+ "alt",
+ "class",
+ "for",
+ "id",
+ "label",
+ "name",
+ "pattern",
+ "placeholder",
+ "role",
+ "summary",
+ "title",
+ "value",
+ "style",
+ "xmlns",
+ ]),
+ gt = "http://www.w3.org/1998/Math/MathML",
+ yt = "http://www.w3.org/2000/svg",
+ mt = "http://www.w3.org/1999/xhtml",
+ bt = mt,
+ _t = !1,
+ xt = null,
+ vt = Zo({}, [gt, yt, mt], zo),
+ kt = ["application/xhtml+xml", "text/html"],
+ wt = null,
+ Tt = r.createElement("form"),
+ Ct = function(t) {
+ return t instanceof RegExp || t instanceof Function;
+ },
+ Et = function(t) {
+ wt && wt === t
+ || (t && "object" === vo(t) || (t = {}),
+ t = Qo(t),
+ O = O = -1 === kt.indexOf(t.PARSER_MEDIA_TYPE) ? "text/html" : t.PARSER_MEDIA_TYPE,
+ N = "application/xhtml+xml" === O ? zo : jo,
+ j = "ALLOWED_TAGS" in t ? Zo({}, t.ALLOWED_TAGS, N) : z,
+ U = "ALLOWED_ATTR" in t ? Zo({}, t.ALLOWED_ATTR, N) : W,
+ xt = "ALLOWED_NAMESPACES" in t ? Zo({}, t.ALLOWED_NAMESPACES, zo) : vt,
+ pt = "ADD_URI_SAFE_ATTR" in t ? Zo(Qo(ft), t.ADD_URI_SAFE_ATTR, N) : ft,
+ ut = "ADD_DATA_URI_TAGS" in t ? Zo(Qo(dt), t.ADD_DATA_URI_TAGS, N) : dt,
+ ct = "FORBID_CONTENTS" in t ? Zo({}, t.FORBID_CONTENTS, N) : ht,
+ q = "FORBID_TAGS" in t ? Zo({}, t.FORBID_TAGS, N) : {},
+ V = "FORBID_ATTR" in t ? Zo({}, t.FORBID_ATTR, N) : {},
+ lt = "USE_PROFILES" in t && t.USE_PROFILES,
+ G = !1 !== t.ALLOW_ARIA_ATTR,
+ X = !1 !== t.ALLOW_DATA_ATTR,
+ Z = t.ALLOW_UNKNOWN_PROTOCOLS || !1,
+ Q = t.SAFE_FOR_TEMPLATES || !1,
+ K = t.WHOLE_DOCUMENT || !1,
+ et = t.RETURN_DOM || !1,
+ nt = t.RETURN_DOM_FRAGMENT || !1,
+ it = t.RETURN_TRUSTED_TYPE || !1,
+ tt = t.FORCE_BODY || !1,
+ rt = !1 !== t.SANITIZE_DOM,
+ at = t.SANITIZE_NAMED_PROPS || !1,
+ st = !1 !== t.KEEP_CONTENT,
+ ot = t.IN_PLACE || !1,
+ Y = t.ALLOWED_URI_REGEXP || Y,
+ bt = t.NAMESPACE || mt,
+ t.CUSTOM_ELEMENT_HANDLING && Ct(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)
+ && (H.tagNameCheck = t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),
+ t.CUSTOM_ELEMENT_HANDLING && Ct(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)
+ && (H.attributeNameCheck = t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),
+ t.CUSTOM_ELEMENT_HANDLING && "boolean" == typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements
+ && (H.allowCustomizedBuiltInElements = t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),
+ Q && (X = !1),
+ nt && (et = !0),
+ lt
+ && (j = Zo({}, To(al)),
+ U = [],
+ !0 === lt.html && (Zo(j, Jo), Zo(U, sl)),
+ !0 === lt.svg && (Zo(j, tl), Zo(U, ol), Zo(U, cl)),
+ !0 === lt.svgFilters && (Zo(j, el), Zo(U, ol), Zo(U, cl)),
+ !0 === lt.mathMl && (Zo(j, il), Zo(U, ll), Zo(U, cl))),
+ t.ADD_TAGS && (j === z && (j = Qo(j)), Zo(j, t.ADD_TAGS, N)),
+ t.ADD_ATTR && (U === W && (U = Qo(U)), Zo(U, t.ADD_ATTR, N)),
+ t.ADD_URI_SAFE_ATTR && Zo(pt, t.ADD_URI_SAFE_ATTR, N),
+ t.FORBID_CONTENTS && (ct === ht && (ct = Qo(ct)), Zo(ct, t.FORBID_CONTENTS, N)),
+ st && (j["#text"] = !0),
+ K && Zo(j, ["html", "head", "body"]),
+ j.table && (Zo(j, ["tbody"]), delete q.tbody),
+ Oo && Oo(t),
+ wt = t);
+ },
+ St = Zo({}, ["mi", "mo", "mn", "ms", "mtext"]),
+ At = Zo({}, ["foreignobject", "desc", "title", "annotation-xml"]),
+ Dt = Zo({}, ["title", "style", "font", "a", "script"]),
+ Lt = Zo({}, tl);
+ Zo(Lt, el), Zo(Lt, nl);
+ var Ot = Zo({}, il);
+ Zo(Ot, rl);
+ var Nt = function(t) {
+ Yo(n.removed, { element: t });
+ try {
+ t.parentNode.removeChild(t);
+ } catch (e) {
+ try {
+ t.outerHTML = k;
+ } catch (e) {
+ t.remove();
+ }
+ }
+ },
+ Mt = function(t, e) {
+ try {
+ Yo(n.removed, { attribute: e.getAttributeNode(t), from: e });
+ } catch (t) {
+ Yo(n.removed, { attribute: null, from: e });
+ }
+ if (e.removeAttribute(t), "is" === t && !U[t]) {
+ if (et || nt) {
+ try {
+ Nt(e);
+ } catch (t) {}
+ } else {try {
+ e.setAttribute(t, "");
+ } catch (t) {}}
+ }
+ },
+ Bt = function(t) {
+ var e, n;
+ if (tt) t = "